Насколько эффективны прогнозы MongoDB?

Есть ли много накладных расходов при исключении почти всех данных в документе при запросе базы данных mongo?

Например, в случае, когда мне требуется только поле1 и поле2, для коллекции с структурой документа:

{
    "field1" : 1
    "field2" : true
    "field3" : ["big","array",...]
    "field4" : ["another","big","array",...]
}

Я получаю больше пользы от:

  • Создание отдельной коллекции рядом с этой коллекцией, содержащей только поле1 и поле2, или
  • Использование .find() в исходных документах с параметрами включения/исключения

Примечание. Неэффективность сохранения одних и тех же данных не является для меня проблемой не столько, сколько эффективностью запроса данных.

Большое спасибо!

Ответ 1

Проецирование несколько похоже на использование имен столбцов в явном виде в SQL, поэтому кажется немного противоречащим интуиции спросить, будет ли возврат меньшего количества данных накладными расходами на возврат большего объема данных (полный документ).

Итак, вам нужно найти документ (в зависимости от того, как вы .find() может быть быстрым или медленным), но возвращая только первые два поля документа, а не все поля (полный документ), сделает его быстрее не медленным.

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

Таким образом, хотя сложные детали могут зависеть от вашей индивидуальной настройки, общий ответ, вероятно, будет равен 2. Вам будет полезно больше использовать проекцию и вернуть только два поля, которые вам нужны.