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 добавляет немного отступа на диск для каждого документа, если документ существенно увеличивается после создания, база данных должна переместить его в другое место на диске. Однако, если вы решите смоделировать свои данные, убедитесь, что ваши документы не имеют большого размера после создания.
Ссылка: