Представляем MongoDB 5.2 Rapid Release
Привет, Хабр. В феврале стартует очередной поток курса "MongoDB", в связи с чем подготовили для будущих студентов перевод статьи из официального блога MongoDB про релиз 5.2. Решили, что для читателей Хабра эта информация тоже может оказаться полезной, поэтому делимся с вами.
MongoDB позволяет решать самые разные задачи с данными при помощи единого API. Наш последний быстрый релиз — MongoDB 5.2 — развивает эту концепцию, улучшая эргономику запросов, совершенствуя коллекции временных рядов (представленные в MongoDB 5.0), масштабирование, оперативную устойчивость и новые возможности, позволяющие командам выполнять более сложную аналитику на месте.
Сжатие столбцов для коллекций временных рядов
Появившиеся в MongoDB 5.0 коллекции для данных в форме временных рядов позволяют легко получать и работать с информацией из этих коллекций вместе с вашими операционными или транзакционными данными без необходимости интеграции отдельной одноцелевой базы в вашу среду. В версии 5.2 Rapid Release представлено сжатие столбцов для коллекций временных рядов в MongoDB.
Случаи использования временных рядов — будь то мониторинг устройств, выявление тенденций или прогнозирование — требуют, чтобы при каждом измерении в базу данных вносились новые данные. В случаях, когда данные поступают постоянно, их объем может быть ошеломляющим, что затрудняет управление постоянно растущим объемом хранилища.
Чтобы помочь командам достичь высокой производительности при сохранении эффективности использования ресурсов, мы добавили несколько возможностей в коллекции временных рядов.
Новое сжатие столбцов для коллекций временных рядов поможет командам значительно сократить объем хранения базы данных на 70% благодаря лучшим в своем классе алгоритмам сжатия, таким как дельта-кодирование, дельта-дельта-кодирование, Simple-8b, RLE и другие.
Для команд, использующих MongoDB Atlas, поддержка Atlas Online Archive для коллекций временных рядов (представленная в версии 5.1 Rapid Release) позволяет определять правила архивирования для автоматического перемещения устаревших данных из базы в недорогое, полностью управляемое облачное хранилище объектов.
Улучшенная эргономика запросов и запросы на определенный момент времени для оперативной аналитики
Более эффективные запросы облегчают жизнь разработчикам. В MongoDB 5.2 Rapid Release мы представляем новые операторы и усовершенствования, которые повысят производительность, качество запросов и сократят их количество, необходимое для достижения понимания. Это также позволит командам больше работать с базой данных, сокращая объем кода, который разработчикам нужно писать и поддерживать, ограничивая при этом объем данных, которые приходится пересылать обратно и манипулировать ими в приложениях.
Новые аккумуляторы и выражения для сортировки массивов
В MongoDB 5.2 появились новые операторы, которые оптимизируют ваши запросы. Операторы $top
и $bottom
позволяют вычислять верхний и нижний элементы датасета и возвращать связанные поля в рамках одного запроса без сложной логики. Например, допустим, вы анализируете показатели продаж и хотите получить данные о лучших продавцах в каждом регионе, включая их выручку. Эти новые операторы помогут вам получить результаты в одном датасете, включая любые дополнительные поля из исходного набора данных.
{$group: {
_id: "$region",
person: {
$top: {
output: ["$name", "$sales"],
sortBy: {"sales": -1}
}
}
}}
Result:
{
{_id:’amer’, person: [‘Daniel LaRousse’, 100000]},
{_id:’emea’, person: [‘John Snow’, 1]},
{_id:’latam’, person: [‘Frida Kahlo’, 99]}
}
Мы также вводим выражения $maxN
, $minN
и аккумуляторы, такие как $firstN
, $lastN
, которые возвращают элементы с учетом текущего порядка документов в датасете.
Новое выражение $sortArray
, являющееся наиболее востребованной функцией, позволяет вам сортировать элементы массива непосредственно в вашем пайплайне агрегации интуитивно понятным и оптимизированным способом. Входной массив может быть простым, как массив скаляров, или сложным, как массив документов с вложенными субдокументами. Допустим, ранее вы сортировали отзывы о товарах по временной метке, а теперь — по рейтингу пользователя. Сейчас вы можете легко сделать это с помощью оператора $sortArray
, чтобы изменить критерии сортировки без дополнительного кода.
Сортировка массива целых чисел
$sortArray: {
input: [3, 1, 4, 1, 5, 9],
sortBy: 1
}
Result: [1, 1, 3, 4, 5, 9]
Сортировка массивов документов
{
"team": [
{
"name": "kyle",
"age": 28,
"address": { "street": "12 Baker St", "city": "London" }
},
{
"name": "bill",
"age": 42,
"address": { "street": "12 Blaker St", "city": "Boston" }
}
]
Простая сортировка: "имя" по возрастанию
{$project: {
_id: 0,
result: {
$sortArray: {
input: "$team",
sortBy: {name: 1}
}
}
}
Output: {
"result": [
{
"name": "bill",
"age": 42,
"address": { "street": "12 Blaker St", "city": "Boston" }
},
{
"name": "kyle",
"age": 28,
"address": { "street": "12 Baker St", "city": "London" }
}
]
}
Длительные запросы к снапшотам теперь общедоступны
Теперь ваши приложения могут выполнять сложные аналитические запросы на основе глобально и транзакционно согласованного снапшота текущих оперативных данных. Даже когда вы меняете данные, MongoDB сохраняет согласованность результатов запросов, возвращаемых вашим пользователям, без необходимости внедрения сложных элементов управления согласованием в код. По умолчанию продолжительность выполнения запросов со снапшотами в MongoDB Atlas составляет 5 минут, но ее можно изменить с помощью нашей службы поддержки.
Запросы могут охватывать несколько шардов, открывая возможности для анализа больших распределенных датасетов. Перенаправляя длительные запросы на вторичные ресурсы, вы можете изолировать аналитику от транзакционных запросов, при этом обе рабочие нагрузки обслуживаются одним кластером, что позволяет избежать медленного, сложного и дорогостоящего ETL в хранилища данных.
Результаты запросов могут возвращаться непосредственно в приложение или быть кэшированы в материализованном представлении, обеспечивая пользователям доступ к глубокой аналитике с низкой задержкой. Типичные области применения включают сверку данных на конец дня и отчетность, а также специальное исследование и майнинг. Все эти сценарии использования теперь могут обслуживаться непосредственно из вашего уровня транзакционных данных, что значительно упрощает инфраструктуру данных, необходимую для обслуживания различных классов рабочих нагрузок.
Повышение отказоустойчивости благодаря ускоренной начальной синхронизации с помощью копирования файлов
Начальная синхронизация — это способ, с помощью которого элемент набора реплик в MongoDB загружает полную копию данных с существующего элемента. Этот процесс происходит, когда пользователи добавляют новые узлы в наборы реплик для повышения отказоустойчивости, уменьшения задержки чтения или улучшения его масштабируемости с помощью вторичных чтений. Начальная синхронизация также часто используется для восстановления элементов набора реплик, которые слишком сильно отстали от других компонентов в кластере. До версии 5.2 логическая начальная синхронизация была единственным доступным вариантом выполнения начальной синхронизации. При логической начальной синхронизации сканируется каждая коллекция на исходном узле, а затем все документы вставляются в соответствующие коллекции на целевом узле (в момент вставки документов создаются индексы). Однако пользователи и заказчики, использующие логическую начальную синхронизацию, особенно те, кто пытается синхронизировать большие объемы данных, сообщали об удручающе долгой продолжительности данного процесса.
Начиная с версии 5.2 Rapid Release, мы добавили возможность начальной синхронизации через копирование файлов, чтобы значительно повысить ее производительность. С помощью этого метода MongoDB будет копировать файлы из файловой системы исходного узла в систему целевого узла. Этот процесс может выполняться быстрее, чем логическая начальная синхронизация, особенно при больших объемах данных. В нашем тестировании с датасетом размером 630 ГБ начальная синхронизация с помощью копирования файлов была почти в четыре раза (4X) быстрее, чем логическая начальная синхронизация для того же набора данных. Эта новая возможность основана на постоянных улучшениях, которые мы сделали для повышения отказоустойчивости и масштабируемости, включая способность начальной синхронизации автоматически возобновляться после сбоя сети и предоставление пользователям права на указание предпочтительного источника начальной синхронизации — обе эти функции были введены в MongoDB 4.4.
Для получения дополнительной информации см. документацию по начальной синхронизации.
Расширение возможностей разработчиков с помощью MongoDB Analyzer for .NET
И наконец, мы рады объявить о выпуске MongoDB Analyzer for .NET, который поможет разработчикам C# легче устранять неисправности в запросах и агрегациях и предотвращать появление ошибок во время рантайма. MongoDB Analyzer создан на основе предыдущих выпусков драйвера MongoDB .NET. Он позволяет разработчикам проще и быстрее использовать MongoDB с C#, включая полностью переработанный интерфейс LINQ.
Ранее разработчики C# могли взаимодействовать с MongoDB идиоматически, используя Builders или выражения LINQ, но не было простого способа проверить перед запуском кода, правильно ли они маппируются в API запросов MongoDB. MongoDB Analyzer, загружаемый в виде пакета NuGet, позволяет разработчикам легко проверить, соответствуют ли их запросы и агрегации выражениям, поддерживаемым API Query. Выявляя неподдерживаемые выражения во время разработки кода, MongoDB Analyzer в конечном итоге повышает производительность разработчиков и снижает сложность отладки.
Начало работы с MongoDB 5.2
MongoDB 5.2 доступна уже сейчас. Если вы используете бессерверные инстансы Atlas Serverless или подписались на получение Rapid Releases в выделенном кластере Atlas, то ваш деплой будет автоматически обновлен до версии 5.2 c сегодняшнего дня. В течение короткого периода времени после обновления версия совместимости функций (FCV) будет установлена на 5.1; некоторые функции 5.2 будут недоступны до тех пор, пока мы не повысим FCV. MongoDB 5.2 также доступна в виде версии для разработчиков только для ознакомительных целей в Центре загрузки MongoDB. В соответствии с нашим новым порядком выпуска релизов, объявленным в прошлом году, функциональность, доступная в 5.2 и последующих Rapid Releases, будет включена в MongoDB 6.0, наш следующий основной релиз, запланированный к выпуску в конце этого года.
Также всех желающих приглашаем на demo-занятие на тему "Map-reduce & Aggregation Framework". На нем мы обсудим:
— зачем нужен map-reduce в MondoDB;
— концепцию aggegation pipeline;
— транзакции;
— простые/материализованные представления.
Записывайтесь, если интересно.