Представлен выпуск документо-ориентированной СУБД MongoDB 5.0, которая занимает нишу между быстрыми и масштабируемыми системами, оперирующими данными в формате ключ/значение, и реляционными СУБД, функциональными и удобными в формировании запросов. Код MongoDB написан на языке C++ и распространяется под лицензией SSPL, которая основана на лицензии AGPLv3, но не является открытой, так как содержит дискриминирующее требование поставки под лицензией SSPL не только кода самого приложения, но и исходных текстов всех компонентов, вовлечённых в предоставление облачного сервиса.
MongoDB поддерживает хранение документов в JSON-подобном формате, имеет достаточно гибкий язык для формирования запросов, может создавать индексы для различных хранимых атрибутов, эффективно обеспечивает хранение больших бинарных объектов, поддерживает журналирование операций по изменению и добавлению данных в БД, может работать в соответствии с парадигмой Map/Reduce, поддерживает репликацию и построение отказоустойчивых конфигураций.
В MongoDB имеются встроенные средства по обеспечению сегментирования (распределение набора данных по серверам на основе определенного ключа), в сочетании с репликацией позволяющие построить горизонтально масштабируемый кластер хранения, в котором отсутствует единая точка отказа (сбой любого узла не сказывается на работе БД), поддерживается автоматическое восстановление после сбоя и перенос нагрузки с вышедшего из строя узла. Расширение кластера или преобразование одного сервера в кластер производится без остановки работы БД простым добавлением новых машин.
Особенности нового выпуска:
- Добавлены коллекции для данных в форме временного ряда (time series collections), оптимизированные для хранения срезов значений параметров, записываемых через определённые промежутки времени (время и набор соответствующих этому времени значений). Необходимость в хранении подобных данных возникает в системах мониторинга, финансовых платформах, системах опроса состояний датчиков. Работа с данными временного ряда осуществляется как с обычными коллекциями документов, но индексы и метод хранения для них оптимизированы с учётом привязки ко времени, что позволяет значительно сократить потребление места на диске, уменьшить задержки при выполнении запросов и реализовать возможность анализа данных в режиме реального времени.
MongoDB рассматривает подобные коллекции как доступные на запись нематериализированные представления, созданные на базе внутренних коллекций и при вставке автоматически группирующие данные временного ряда в оптимизированный формат хранения. При этом каждая привязанная ко времени запись при запросе трактуется как отдельный документ. Данные автоматически упорядочиваются и индексируются по времени (нет необходимости в явном создании индексов по времени).
- Добавлена поддержка оконных операторов (аналитических функций), позволяющих выполнить действия с определённым набором документов в коллекции. В отличие от агрегатных функций, оконные функции не свёртывают сгруппированный набор, а производят агрегирование на основе содержимого “окна”, включающего один или более документов из результирующего набора. Для манипуляции с подмножеством документов предложена новая стадия $setWindowFields, при помощи которой можно, например, определить различия между двумя документами в коллекции, рассчитать рейтинг продаж и проанализировать информацию в сложных временных рядах.
- Добавлена поддержка версионирования API, позволяющая привязать приложение к определённому состоянию API и исключить риски, связанные с возможным нарушением обратной совместимости при переходе на новые выпуски СУБД. Версионирование API отделяет жизненный цикл приложения от жизненного цикла СУБД и позволяет разработчикам вносить изменения в приложение тогда, когда возникла потребность задействовать новые возможности, а не когда выполняется переход на новую версию СУБД.
- Добавлена поддержка механизма Live Resharding, позволяющего на лету менять используемые для сегментирования ключи (shard key) без остановки СУБД.
- Расширены возможности шифрования полей на стороне клиента (Client-Side Field Level Encryption). Появилась возможность перенастройки фильтров аудита и ротации сертификатов x509 без остановки работы СУБД.
Добавлена поддержка настройки набора шифров для TLS 1.3. - Предложена новая оболочка командной строки MongoDB Shell (mongosh), которая развивается как отдельный проект, написана на JavaScript с использованием платформы Node.js и распространяется под лицензией Apache 2.0. MongoDB Shell даёт возможность подключаться к СУБД, менять настройки и отправлять запросы. Поддерживается умное автодополнение ввода методов, команд и выражений MQL, подсветка синтаксиса, контекстная подсказка, разбор сообщений об ошибках и возможность расширения функциональности через дополнения. Старая CLI-оболочка “mongo” объявлена устаревшей и будет удалена в будущем выпуске.
- Добавлены новые операторы: $count, $dateAdd, $dateDiff,
$dateSubtract, $sampleRate и $rand. - Обеспечено задействование индексов при использовании операторов $eq, $lt, $lte, $gt и $gte внутри выражения $expr.
- В командах aggregate, find, findAndModify, update, delete
и методах db.collection.aggregate(), db.collection.findAndModify(), db.collection.update() и db.collection.remove() реализована поддержка опции “let” для определения списка переменных, делающих команды более читаемые благодаря отделению переменных от текста запроса. - Операции find, count, distinct, aggregate, mapReduce, listCollections и listIndexes теперь не блокируются, если параллельно выполняется операция, выставляющая эксклюзивную блокировку на коллекцию документов.
- В рамках инициативы по избавлению от неполиткорректных терминов команда isMaster и метод db.isMaster() переименованы в hello и db.hello().
- Изменена схеме нумерации выпусков и осуществлён переход на предсказуемый график формирования релизов. Раз в год будет формироваться значительный релиз (5.0, 6.0, 7.0), раз в три месяца промежуточные выпуски с новыми возможностями (5.1, 5.2, 5.3) и по мере необходимости корректирующие обновления с исправлением ошибок и уязвимостей (5.1.1, 5.1.2, 5.1.3). В промежуточных выпусках будет формироваться функциональность для следующего значительного релиза, т.е. в MongoDB 5.1, 5.2 и 5.3 будет сформированы новые возможности для выпуска MongoDB 6.0.