Релиз документо-ориентированной СУБД MongoDB 2.0

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

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

Отмечается, что версия 2.0, хоть и является значительным выпуском, не должна восприниматься как какой-то кардинальный шаг. Номер 2.0 присвоен как продолжение непрерывной нумерации стабильных релизов с четными номерами кратными 10 (1.8 + 0.2 = 2.0) и по уровню новшеств сопоставим различиями между прошлыми стабильными ветками 1.6 и 1.8. Из улучшений, добавленных в MongoDB 2.0, можно отметить:

  • Включены результаты первой стадии переработки проекта с целью увеличения параллелизма обработки данных. В версии 2.0 решен один важных вопросов - обеспечение надлежащей работы блокировок в процессе обращения к невыделенным страницам памяти (page faults). Реализованный механизм блокировок позволяет отслеживать кэширование в памяти и дает возможнось вынести за пределы основного обработчика блокировки при записи на диск и обработку page faults. Метод применен в нескольких местах, например в коде обновления по идентификатору, удаления и сканирования больших таблиц;
  • Возможность размещения рабочего набора индексов в оперативной памяти является важным фактором обеспечения высокой производительности. В новой версии индексы занимают примерно на 25% меньше места и работают на 25% быстрее, что позволяет вместить больше индексных данных в имеющийся объем памяти. Кроме того, уменьшен размер стека по умолчанию, что позволяет сэкономить память при большом числе одновременных клиентских соединений (более 1000);
  • Добавлены новые функции в реализацию поддержки передачи наборов реплик (Replica Sets). В новой версии добавлена возможность определения приоритетов и привязки меток (tagging). Приоритеты позволяют выделить первичные узлы, если кластер размещен в неоднородной сети. Привязка меток к репликам позволяет гарантировать, что данные будут записаны на определенные группы серверов (например, можно проследить что данные о регистрации нового пользователя будут отражены на серверах в двух разных дата-центрах, до того как выдать пользователю информацию об успешной регистрации).
  • Поддержка аутентификации для кластеров шардинга;
  • Реализация опции ContinueOnError, при которой операция массового добавления данных не будет прервана после ошибки. Тип и место последней ошибки можно отследить через вызов getLastError;
  • Для 64-разрядных платформ по умолчанию активировано журналирование операций, что позволяет кардинально уменьшить время, требуемое на восстановление целостности данных в случае сбоя. Для экономии места добавлена поддержка хранения журнала в сжатом виде;
  • Кроме вышеотмеченных улучшений, в новой версии представлена достаточно большая порция небольших оптимизаций производительности, увеличение стабильности шардинга, улучшение операций с набором реплик.

    © OpenNet