Представлен релиз ориентированной на хранение документов высокопроизводительной и высокомасштабируемой СУБД MongoDB 2.2, занимающей нишу между быстрыми и масштабируемыми системами, оперирующими данными в формате ключ/значение, и реляционными СУБД, функциональными и удобными в формировании запросов. Код MongoDB написан на языке C++ и распространяется в рамках лицензии AGPLv3.
MongoDB поддерживает хранение документов в JSON-подобном формате, имеет достаточно гибкий язык для формирования запросов, может создавать индексы для различных хранимых атрибутов, эффективно обеспечивает хранение больших бинарных объектов, поддерживает журналирование операций по изменению и добавлению данных в БД, может работать в соответствии с парадигмой Map/Reduce, поддерживает репликацию и построение отказоустойчивых конфигураций. В MongoDB имеются встроенные средства по обеспечению шардинга (распределение набора данных по серверам на основе определенного ключа), комбинируя который репликацией данных можно построить горизонтально масштабируемый кластер хранения, в котором отсутствует единая точка отказа (сбой любого узла не сказывается на работе БД), поддерживается автоматическое восстановление после сбоя и перенос нагрузки с вышедшего из строя узла. Расширение кластера или преобразование одного сервера в кластер производится без остановки работы БД простым добавлением новых машин.
В новой версии внесено около тысячи изменений, связанных с добавлением новых возможностей, исправлением ошибок и оптимизациями производительности. Основной упор при подготовке выпуска был сделан на увеличение гибкости и производительности. Из улучшений, добавленных в MongoDB 2.2, можно отметить:
- Добавлен Aggregation Framework, нацеленный на упрощение манипулирования и обработки документов в MongoDB. Вместо необходимости использования парадигмы Map/Reduce или запуска отдельного процесса-обработчика, фреймворком предоставляется набор более привычных агрегатных функций (sum, min, max, avg) и операторов фильтрации, сортировки и группировки, управление которыми осуществляется через вызов db.collection.aggregate(). Логика построения выражений в db.collection.aggregate() чем-то напоминает построение запроса SQL;
- Добавлена поддержка метода шардинга "tag aware sharding", позволяющего при использовании шардинга в кластере с территориально разнесёнными узлами гарантировать оптимальное распределение данных, при котором требуемые приложениям данные размещены на узлах, ближайших к потребителю, наиболее часто запрашивающему эти данные. Привязка к узлам осуществляется путем назначения тегов, на основании которых создаются логические области шардинга, например, всем данным которые должны быть доступны в США можно присвоить тег USA и привязать его к узлам, размещённым в нужном датацентре;
- Полная поддержка семантики для выбора источника операций чтения данных, что позволят клиенту перенаправить выполнение операций чтения на вторичные узлы, реплицирующие эти данные. Указанная возможность позволяет разгрузить первичные узлы репликации, запросы к которым ранее осуществлялись в первую очередь. Например, можно использовать вторичные реплики в таких ситуациях как выполнение резервного копирования, создание сложных отчётов и для минимизации задержки при построении территориально распределённых систем;
- Продолжение работы по увеличению параллелизма обработки данных. Новая версия полностью избавлена от глобальной блокировки в процессе mongod. Блокировка отныне осуществляется отдельно для каждой базы данных, т.е. данные из разных баз могут обрабатываться параллельно. Кроме того новая подсистема позволяет избежать блокировок в процессе обращения к невыделенным страницам памяти (page faults), что позволяет повысить параллелизм выполнения операций и для систем, обслуживающих одну БД. Кроме того, проведена работа по увеличению параллелизма на стороне клиента;
- Поддержка TTL-коллекций, позволяющих удалять из коллекций просроченные данные, используя специальный тип индекса и обслуживающую выполнение чистки фоновую нить, ежеминутно проверяющую наличие документов с истекшим временем жизни.
TTL-коллекции удобно использовать при хранении логов, сессий и данных о событиях, которые имеют актуальность ограниченный период времени.
|