Представлен (http://blog.mongodb.org/post/112603230233/announcing-mongodb...) релиз ориентированной на хранение документов высокопроизводительной и высокомасштабируемой СУБД MongoDB 3.0 (http://www.mongodb.org), занимающей нишу между быстрыми и масштабируемыми системами, оперирующими данными в формате ключ/значение, и реляционными СУБД, функциональными и удобными в формировании запросов. Код MongoDB написан на языке C++ и распространяется в рамках лицензии AGPLv3.MongoDB поддерживает хранение документов в JSON-подобном формате, имеет достаточно гибкий язык для формирования запросов, может создавать индексы для различных хранимых атрибутов, эффективно обеспечивает хранение больших бинарных объектов, поддерживает журналирование операций по изменению и добавлению данных в БД, может работать в соответствии с парадигмой Map/Reduce, поддерживает репликацию и построение отказоустойчивых конфигураций.
В MongoDB имеются встроенные средства по обеспечению шардинга (распределение набора данных по серверам на основе определенного ключа), комбинируя который репликацией данных можно построить горизонтально масштабируемый кластер хранения, в котором отсутствует единая точка отказа (сбой любого узла не сказывается на работе БД), поддерживается автоматическое восстановление после сбоя и перенос нагрузки с вышедшего из строя узла. Расширение кластера или преобразование одного сервера в кластер производится без остановки работы БД простым добавлением новых машин.
Особенности (http://docs.mongodb.org/manual/release-notes/3.0/) нового выпуска:
- Pluggable Storage Engine API, позволяющий сторонним разработчикам создавать движки хранения для MongoDB;
- Возможность использования движка хранения WiredTiger (http://wiredtiger.com/), помимо штатного движка MMAPv1. WiredTiger может использоваться только на 64-разрядных системах и отличается высоким уровнем масштабуемости на многоядерных системах и предсказуемым временем обработки запроса, не зависящим от числа записей в базе, благодаря применению (http://source.wiredtiger.com/pdfs/WiredTiger-1page.pdf) алгоритма, не использующего блокировки, и активному кэшированию данных ОЗУ. В WiredTiger также реализована возможность блокировки записей на уровне документов и поддержка хранения данных в сжатом виде (для сжатия используется библиотека snappy (http://www.opennet.me/opennews/art.shtml?num=30003)).
<center><a href="http://res.cloudinary.com/hrscywv4p/image/upload/c_limit,h_9... src="http://www.opennet.me/opennews/pics_base/0_1425643266.png" style="border-style: solid; border-color: #e9ead6; border-width: 15px;max-width:100%;" title="" border=0></a></center>
При использовании WiredTiger поддерживаются все возможности MongoDB, но для перехода на новое хранилище требуется изменение (http://docs.mongodb.org/manual/release-notes/3.0-compatibili...) дискового формата хранилища. Настройка нового движка осуществляется через набор опций storage.wiredTiger (http://docs.mongodb.org/manual/reference/configuration-optio...). В системах репликации и шардинга в кластере MongoDB могут комбинироваться и совместно использоваться узлы с разными движками хранения.
<center><a href="http://res.cloudinary.com/hrscywv4p/image/upload/c_limit,h_9... src="http://www.opennet.me/opennews/pics_base/0_1425643672.png" style="border-style: solid; border-color: #e9ead6; border-width: 15px;max-width:100%;" title="" border=0></a></center>
- В штатном движке хранения 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 (http://docs.mongodb.org/manual/core/authentication/#authenti...) (RFC 5802 (https://tools.ietf.org/html/rfc5802)).
- Добавлена новая система для анализа эффективности выполнения запросов. Расширен (http://docs.mongodb.org/manual/reference/explain-results/) формат данных о запросе и реализованы средства доскональной интроспекции как плана построения запроса, так и выполнения запроса. Для анализа запросов представлены новый метод db.collection.explain() (http://docs.mongodb.org/manual/reference/method/db.collectio...) и команда explain (http://docs.mongodb.org/manual/reference/command/explain/#db...);
- Расширены (http://docs.mongodb.org/manual/reference/log-messages/) средства ведения диагностических логов, в которых обеспечена привязка записей к специфичным компонентам и операциям;
- В утилиты mongodump и mongorestore добавлена поддержка параллельной обработки нескольких коллекций (опция "--numParallelCollections"). В mongodump добавлены опции для выборочного исключения коллекций из дампа (--excludeCollection и --excludeCollectionsWithPrefix);
- Утилиты mongostat и mongotop теперь могут возвращать статистику в формате JSON (опция --json).
URL: http://blog.mongodb.org/post/112603230233/announcing-mongodb...
Новость: http://www.opennet.me/opennews/art.shtml?num=41785