Доступна документо-ориентированная СУБД MongoDB 5.0
14 июля 2021 года
Представлен выпуск документо-ориентированной СУБД 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.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.