Как и в моем предыдущем блоге, в этом также говорится об обработке огромных объемов данных, даже если у вас есть машина с 4 ГБ оперативной памяти (которая, очевидно, относится к конфигурации 2012 года). Успешно протестировано более 90 миллионов записей, не убивая мой компьютер.

Боб. Как mongodb помогает вам достичь таких результатов?

Джек. Конвейер агрегации

Боб. Как mongodb справляется с этим огромным объемом?

Джек. Конвейер агрегации – режим, в котором пространство на жестком диске используется для удовлетворения потребностей в памяти. И преимущество в том, что вам не нужно беспокоиться о памяти.

Боб. А как насчет скорости? Я слышал, что mongodb поддерживает сценарии с Javascript.

Джек. В отличие от Map-Reduce, конвейер агрегации работает на C. Вам нужно передать конфигурации для обработки данных, и он работает молниеносно быстро.

Боб. Значит, это всемогущее существо, вроде супермена?

Джек. Да, он мощный, но, как и у супермена, у него есть слабость. Меньше гибкости при написании запросов, и существует кривая обучения. Так что иногда написать Map-reduce было бы самым простым способом. Но если вам нужна скорость и оптимальное использование ресурсов, используйте агрегатный конвейер.

Конвейер агрегации

Для ваших подробных ссылок читать дальше.

Как упоминалось ранее, для обработки данных вам необходимо преобразовать их поэтапно, вам может потребоваться применить несколько этапов обработки для получения желаемого результата. Следует отметить, что выходные данные текущего этапа становятся входными данными для следующего этапа. Это как цепочка. Каждый этап выполняет набор операций с данными, и то, что должно быть выполнено, должно быть передано как объект конфигурации (аналогично JSON).

Несмотря на то, что этапы определяют платформу для выполняемых вами операций, операции определяются с помощью операторов конвейера.

На изображении ниже показано, что происходит, когда этапы агрегации применяются к коллекции mongodb.

Примечания

  1. Этапы применяются к документам в коллекции или результатам предыдущего этапа.
  2. В конвейере агрегации можно применять только этапы.
  3. Операторы и этапы упоминаются с $ (например, $match).
  4. Чтобы получить доступ к полям в документе, вы можете использовать «$field-name» (например, $cust_id)
  5. Если вы определяете локальные переменные внутри своей операции, то доступ к ним можно получить с помощью $$ ( например, $$current_item)
  6. Изменения или преобразования, примененные и заданные как свойство документа на текущем этапе, будут доступны для вашей обработки/доступа только на следующем этапе.
  7. Некоторые операторы могут применяться на выборочных этапах. (например,$pushможно использовать на этапе$group)
  8. Для больших наборов данных включите «allowDiskUse: true» для агрегирования.
  9. Порядок группировки документов будет основан на порядке сбора входных данных.

Этапы конвейера

В Mongodb определено множество этапов. Наиболее распространенные из них, которые вы можете использовать, перечислены ниже.

$match

Используется для фильтрации необходимых документов из входной коллекции. "читать далее"

$группа

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

$проект

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

$addFields

Добавьте новые поля в документ. Он также сохраняет ранее доступные поля. "читать далее"

$лимит

Ограничивает количество документов, которые необходимо передать на следующий этап. "читать далее"

$сортировка

Сортирует/упорядочивает документы на основе значения указанного поля. "читать далее"

$поиск

Помогает объединить документы из другой коллекции в текущую на основе совпадающих полей. читать далее"

$расслабиться

Разбивает документ со списком элементов в поле на несколько документов с отдельным элементом из списка. "читать далее"

$аут

Записывает результат в отдельный сборник. Поэтому, если вы укажете существующую коллекцию, все ее содержимое будет перезаписано. "читать далее"

Операторы трубопроводов

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

$сумма

Складывает параметры вместе и возвращает результат. Или можно использовать в качестве короткой руки на групповом этапе для подсчета вхождений сгруппированных документов. Чтобы узнать больше, нажмите здесь. Также проверьте похожие опции $subtract, $multiply, $divide

$dateFromString

Преобразует строку даты и времени в объект Date. читать дальше. Также, чтобы узнать больше о других параметрах, связанных с датой

$arrayElementAt

Дает возможность доступа к элементу, указанному в индексе данного массива.

$push

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

$первый

Как и $push, этот доступен только на групповом этапе. Это сохраняет первое обнаруженное поле для результирующей группировки и назначает его. "читать далее." Также читайте о $last

$gte

Проверяет, является ли левое выражение больше или равно правому. "читать далее". Также читайте о $eq, $gt, $lte, $lt, $ne

$cond

Это похоже на if ‹exp› then ‹statement› else ‹statement›, доступную в обычных языках программирования. Вы можете использовать это и вложить его для создания более сложных выражений. "читать далее".

$or

Вычисляет одно или несколько выражений и возвращает true, если хотя бы одно из них истинно. "читать далее". Также читайте больше о , $не

$карта

Подобно тому, что вы видите в других языках программирования, карта выполняет итерацию по элементам в списке и преобразует элементы в списке. Это применяется индивидуально к документам в коллекции. "читать далее". Также читайте о $reduce

пусть

Дает возможность определять переменные для обработки. Это можно использовать в $map для большей гибкости.

Вывод

Упомянутый код является иллюстративным, для справки, чтобы вы могли получить общее представление. Это только основы, но…

Возможности ограничены только вашим воображением