MongoDB multikey: максимальное (рекомендуемое, эффективное) количество ключей?

У меня есть коллекция "каналов", каждый канал имеет комментарии. Поэтому, когда кто-то комментирует ленту новостей, он добавляется к "подписчикам", которые являются полем для нескольких ключей Монго.

feeds: {
 _id: ...,
 text: "Text",
 comments: [{by: "A", text: "asd"},{by: "B", text: "sdf"}],
 subscribers: ["A","B"]

}

Затем, когда мне нужно получить все фиды с новыми комментариями для пользователя A, я запрашиваю фиды с {подписчиками: "A"}.

Обычно есть 2-5 комментариев, но иногда (на горячих каналах) может быть>100 комментариев и>100 подписчиков.

Я знаю, что не рекомендуется иметь многоключевые поля со слишком большим количеством ключей. Так сколько это слишком много?

Я спрашиваю, потому что мне нужно решить - буду ли я использовать мультиключи или лучше отправлять комментарии непосредственно каждому пользователю. В этом случае мне нужно скопировать фид для каждого подписчика - и коллекция будет расти ОЧЕНЬ быстро - что, я думаю, не очень хорошо: 1000 пользователей, за которыми следуют 10 пользователей, каждое из которых выполняет 10 действий в день = 1 000 000 записей каждые 10 дней!

1 ответ

Решение

Хотя у вас могут возникнуть проблемы с действительно большими документами, особенно если MongoDB должен сканировать весь документ, чтобы выполнить запрос, как вы ожидаете; массивы с большим количеством значений сами по себе не представляют проблемы в MongoDB, даже если они являются многоключевыми индексами.

Есть одно предупреждение: в индексе не будут храниться ключи (в случае многоключевого документа, это элемент в массиве), длина которого превышает 1024 байта. Пока элементы в массиве короче этого предела, у вас все будет хорошо.

Сказав это, вы хотите избежать моделей данных, где массив или другая часть документа будут расти неограниченно и навсегда. В то время как MongoDB добавляет немного отступа на диск для каждого документа, если документ существенно увеличивается после создания, база данных должна переместить его в другое место на диске. Однако, если вы решите смоделировать свои данные, убедитесь, что ваши документы не имеют большого размера после создания.

Ссылка:

Другие вопросы по тегам