Предположите мобильную игру, которая поддерживается базой данных MongoDB, содержащей коллекцию User
с несколькими миллионами документов.
Теперь предположим несколько десятков свойств, которые должны быть связаны с пользователем - например. массив _id
значений Friend
документов, их имя пользователя, фотография, массив _id
значений Game
документов, дата последнего_лога, количество внутриигровой валюты и т.д. и т.д. и т.д.
Моя забота заключается в том, будет ли создание и обновление больших, растущих массивов на многих миллионах пользовательских документов добавит "вес" к каждому пользовательскому документу и/или медлительность для всей системы.
Мы, скорее всего, никогда не затмем 16mb за документ, но мы можем с уверенностью сказать, что наши документы будут на 10-20x больше, если мы будем хранить эти растущие списки напрямую.
Вопрос: это даже проблема в MongoDB? Размер документа даже имеет значение, если ваши запросы правильно управляются с помощью прогнозов и индексов и т.д.? Должны ли мы активно сокращать размер документа, например. с ссылками на внешние списки или на встраивание списков значений _id
напрямую?
Другими словами: если я хочу значение пользователя last_login
, будет ли запрос, который проектирует/выбирает только поле last_login
, будет отличаться, если мои документы User
равны 100 кб и 5 МБ?
Или: если я хочу найти всех пользователей с определенным значением last_login
, размер документа повлияет на этот запрос?