Доступна документо-ориентированная СУБД MongoDB 3.0

Представлен релиз ориентированной на хранение документов высокопроизводительной и высокомасштабируемой СУБД MongoDB 3.0, занимающей нишу между быстрыми и масштабируемыми системами, оперирующими данными в формате ключ/значение, и реляционными СУБД, функциональными и удобными в формировании запросов. Код MongoDB написан на языке C++ и распространяется в рамках лицензии AGPLv3. MongoDB поддерживает хранение документов в JSON-подобном формате, имеет достаточно гибкий язык для формирования запросов, может создавать индексы для различных хранимых атрибутов, эффективно обеспечивает хранение больших бинарных объектов, поддерживает журналирование операций по изменению и добавлению данных в БД, может работать в соответствии с парадигмой Map/Reduce, поддерживает репликацию и построение отказоустойчивых конфигураций.

В MongoDB имеются встроенные средства по обеспечению шардинга (распределение набора данных по серверам на основе определенного ключа), комбинируя который репликацией данных можно построить горизонтально масштабируемый кластер хранения, в котором отсутствует единая точка отказа (сбой любого узла не сказывается на работе БД), поддерживается автоматическое восстановление после сбоя и перенос нагрузки с вышедшего из строя узла. Расширение кластера или преобразование одного сервера в кластер производится без остановки работы БД простым добавлением новых машин.

Особенности нового выпуска:

Pluggable Storage Engine API, позволяющий сторонним разработчикам создавать движки хранения для MongoDB; Возможность использования движка хранения WiredTiger, помимо штатного движка MMAPv1. WiredTiger может использоваться только на 64-разрядных системах и отличается высоким уровнем масштабуемости на многоядерных системах и предсказуемым временем обработки запроса, не зависящим от числа записей в базе, благодаря применению алгоритма, не использующего блокировки, и активному кэшированию данных ОЗУ. В WiredTiger также реализована возможность блокировки записей на уровне документов и поддержка хранения данных в сжатом виде (для сжатия используется библиотека snappy). 0_1425643266.png При использовании WiredTiger поддерживаются все возможности MongoDB, но для перехода на новое хранилище требуется изменение дискового формата хранилища. Настройка нового движка осуществляется через набор опций storage.wiredTiger. В системах репликации и шардинга в кластере MongoDB могут комбинироваться и совместно использоваться узлы с разными движками хранения.

0_1425643672.png В штатном движке хранения MMAPv1 обеспечена поддержка блокировки на уровне коллекций. Изменена стратегия распределения данных в хранилище, которая теперь построена на основе метода PowerOf2, подразумевающего использование записей, размер которых кратен степени двойки (32, 64, 128, 256, 512 … 2MB). Подобный подход более оптимален для хранения документов большого размера, но больше расходует дисковое пространство (например, если документ больше 2 Мб для него выделяется N блоков по 2 Мб, даже если он занимает 2Мб 1 байт). Увеличено число узлов в наборе репликации. В MongoDB 3.0 в одном наборе может присутствовать до 50 узлов. С большим размером реплик могут работать драйверы C# (.NET) 1.10, Java 2.13, Python (PyMongo) 3.0+, Ruby 2.0+ и Node.JS 2.0+. Работа c большими наборами реплик в драйверах C++, Perl, PHP пока не поддерживается; Поддержка механизма аутентификации SCRAM-SHA-1 (RFC 5802). Добавлена новая система для анализа эффективности выполнения запросов. Расширен формат данных о запросе и реализованы средства доскональной интроспекции как плана построения запроса, так и выполнения запроса. Для анализа запросов представлены новый метод db.collection.explain () и команда explain; Расширены средства ведения диагностических логов, в которых обеспечена привязка записей к специфичным компонентам и операциям; В утилиты mongodump и mongorestore добавлена поддержка параллельной обработки нескольких коллекций (опция »--numParallelCollections»). В mongodump добавлены опции для выборочного исключения коллекций из дампа (--excludeCollection и --excludeCollectionsWithPrefix); Утилиты mongostat и mongotop теперь могут возвращать статистику в формате JSON (опция --json).

© OpenNet