MongoDB

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Mongo-db-logo.png
MongoDB
Тип документоориентированная СУБД
Разработчик MongoDB, Inc.[d]
Написана на C++, C and JavaScript
Операционная система Linux, macOS и Microsoft Windows
Первый выпуск 2009
Последняя версия
Тестовая версия 3.5.2[2] (2017-01-26; 541 день тому назад)
Состояние Active
Лицензия GNU AGPL (СУБД) и Apache License (драйверы)
Сайт mongodb.com[3]
Commons-logo.svg MongoDB на Викискладе

MongoDB (от англ. humongous — огромный) — документоориентированная система управления базами данных (СУБД) с открытым исходным кодом, не требующая описания схемы таблиц. Классифицирована как NoSQL, использует JSON-подобные документы и схему базы данных. Написана на языке C++.

Лицензирование и поддержка[править | править код]

MongoDB можно бесплатно получить по общедоступной лицензии Affero (AGPL) GNU. В драйверах для языков программирования находятся под лицензией Apache. В дополнение к этим лицензиям, MongoDB Inc. предлагает коммерческую лицензию для MongoDB, которая включает в себя дополнительные функции (например, интеграция с SASL, LDAP, Kerberos, Simple Network Management Protocol и поиска текста Розетта Лингвистика Platform Basis Technology), Инструменты управления, мониторинг и резервное копирование, а также поддержка.

Возможности[править | править код]

Ad hoc запросы[править | править код]

Запросы могут возвращать конкретные поля документов и пользовательские JavaScript-функции. Поддерживается поиск по регулярным выражениям. Также можно настроить запрос на возвращение случайного набора результатов.[4]

Индексация[править | править код]

В MongoDB имеется поддержка индексов.

Репликация[править | править код]

MongoDB может работать с набором реплик.[5] Набор реплик состоит из двух и более копий данных. Каждый экземпляр набора реплик может в любой момент выступать в роли основной или вспомогательной реплики. Все операции записи и чтения по умолчанию осуществляются с основной репликой. Вспомогательные реплики поддерживают в актуальном состоянии копии данных. В случае, когда основная реплика дает сбой, набор реплик проводит выбор, который из реплик должен стать основным. Второстепенные реплики могут дополнительно являться источником для операций чтения.

Балансировка нагрузки[править | править код]

MongoDB масштабируется горизонтально используя шардинг.[6] Пользователь выбирает ключ шарда, который определяет как данные в коллекции будут распределены. Данные разделятся на диапазоны (в зависимости от ключа шарда) и распределятся по шардам.

Файловое хранилище[править | править код]

MongoDB может быть использован в качестве файлового хранилища с балансировкой нагрузки и репликацией данных.

Эта функция, названная Grid File System,[7] поставляется вместе с драйверами MongoDB. MongoDB предлагает разработчикам функции для работы с файлами и их содержимым. GridFS используется в плагинах для NGINX[8] и lighttpd.[9] GridFS разделяет файл на части и хранит каждую часть как отдельный документ.[10]

Агрегация[править | править код]

Может работать в соответствии с парадигмой MapReduce.

В фреймворке для агрегации есть аналог SQL-инструкции GROUP BY. Операторы агрегации могут быть связаны в конвейер подобно UNIX-конвейрам. Фреймворк так же имеет оператор $lookup для связки документов при выгрузке и статистические операции такие как среднеквадратическое отклонение.

Исполнение JavaScript на стороне сервера[править | править код]

JavaScript может использоваться в запросах, функциях аггрегации (например в MapReduce) и отправлен базе для исполнения.

Коллекции с фиксированным размером[править | править код]

MongoDB поддерживает коллекции с фиксированным размером. Такие коллекции сохраняют порядок вставки и по достижении заданного размера ведут себя как кольцевой буфер.

Архитектура[править | править код]

Запись записи в MongoDB с Robomongo 0.8.5.

Доступность языка программирования[править | править код]

У MongoDB есть официальные драйверы для основных языков программирования.Существует также большое количество неофициальных или поддерживаемых сообществом драйверов для других языков программирования и фреймворков.

Управление и интерактивный инструментарий[править | править код]

Основным интерфейсом к базе данных была командная оболочка «mongo». С версии MongoDB 3.2 в качестве графической оболочки поставляется «MongoDB Compass». Существуют продукты и сторонние проекты, которые предлагают инструменты с GUI для администрирования и просмотра данных.

Лицензирование[править | править код]

MongoDB доступен бесплатно под лицензией GNU Affero General Public, версия 3. Языковые драйверы доступны под лицензией Apache. Кроме того, MongoDB Inc. предлагает собственные лицензии для MongoDB.

Основные проблемы[править | править код]

Не реализует многодоменные свойства ACID[править | править код]

MongoDB гарантирует ACID в том же документе. Неспособность реализовать свойства ACID означает, что база данных не обеспечивает долговечность, целостность, согласованность и изоляцию, необходимые для транзакций. Возможно, что в будущих версиях это будет решено.

На основании этого пункта подробно описаны следующие четыре:

Проблемы с согласованностью[править | править код]

В предыдущих версиях базы данных строго последовательные чтения рассматривают устаревшие версии документов, они также могут возвращать неверные данные из показаний, которые никогда не должны происходить.[11]

Эта проблема считается исправленной с версии 3.4: https://jepsen.io/analyses/mongodb-3-4-0-rc3

Блокировка на уровне документа[править | править код]

MongoDB блокирует базу данных на уровне документа перед каждой операцией записи. Только разные операции записи могут выполняться между различными документами.

Скрипты не являются долговечными или проверяемыми[править | править код]

MongoDB возвращается, когда информация еще не была записана в постоянном хранилище, что может привести к потере информации. В MongoDB 2.2 значение по умолчанию изменяется для записи по крайней мере в одной реплике, но это все еще не удовлетворяет долговечности или проверяемости. 18

Проблемы с масштабируемостью[править | править код]

Проблемы с производительностью появляются тогда, когда объем данных превышает 100 ТБ.

Варианты использования[править | править код]

База данных MongoDB подходит для следующих применений:

  • Хранение и регистрация событий
  • Для систем управления документами и контентом
  • Электронная коммерция
  • Игры
  • Проблемы с большим объемом показаний
  • Мобильные приложения
  • Хранилище операционных данных веб-страницы
  • Управление контентом
  • Хранение комментариев
  • рейтинги
  • Регистрация пользователя
  • Профили пользователей
  • Сеансы данных
  • и т.д.
  • Проекты, использующие итеративные или гибкие методологии разработки
  • Управление статистикой в ​​реальном времени

MongoDB используется для одного или нескольких из этих случаев несколькими компаниями.

История[править | править код]

Компания программного обеспечения 10gen начала разработку MongoDB в 2007 году как компонент планируемой платформы в качестве сервисного продукта. В 2009 году компания перешла на модель разработки с открытым исходным кодом, а компания предлагает коммерческую поддержку и другие услуги. В 2013 году 10gen изменил свое название на MongoDB Inc.

20 октября 2017 года MongoDB стала публичной компанией, зарегистрированной на NASDAQ в качестве MDB с ценой IPO в размере 24 долл. За акцию.

Инструменты MongoDB[править | править код]

Для управления и администрирования системы базы данных могут быть установлены следующие команды:

Подключение к MongoDB Shell
  • mongo: - интерактивная оболочка, которая позволяет разработчикам и администраторам просматривать, вставлять, удалять и обновлять данные в своей базе данных. Это также позволяет среди других функций репликации данных, настройку осколков, отключить серверы, выполнить JavaScript и все команды, которые могут быть выполнены.
  • mongostat: - инструмент командной строки, который суммирует список статистических данных для исполняемого экземпляра MongoDB. Это позволяет вам визуализировать количество вложений, обновлений, удалений, запросов и команд, но также, сколько памяти используется и как долго база данных была закрыта.
  • mongotop: - это инструмент командной строки, который предоставляет метод для отслеживания времени, которое считывает или записывает данные в экземпляре. Он также обеспечивает статистику на уровне каждой коллекции. mongosniff: - инструмент командной строки, который обеспечивает обнюхивание в базе данных путем обнюхивания сетевого трафика в MongoDB и обратно.
  • mongoimport / mongoexport: представляет собой инструмент командной строки , которая облегчает содержание импорта экспорта из JSON, CSV или TSV. Он также может импортировать или экспортировать в другие форматы.
  • mongodump / mongorestore: - инструмент командной строки для создания двоичного образа содержимого базы данных. Эти команды используются для стратегии резервного копирования в MongoDB.

Поддерживаемые языки программирования[править | править код]

У MongoDB есть официальные драйверы для следующих языков программирования:

  • С
  • C ++
  • C # / .NET
  • Erlang
  • Haskell
  • J #
  • Java
  • JavaScript
  • Lisp
  • Node.js
  • Perl
  • PHP
  • Python
  • Ruby
  • Delphi
  • Scala

Сотрудничество[править | править код]

6 июня 2012 года компания-разработчик MongoDB 10gen[en] начала длительное сотрудничество с корпорацией Microsoft, предоставив MongoDB её облаку Microsoft Azure. В результате этого партнёрства разработчики получили простой установщик для запуска MongoDB на виртуальных машинах Microsoft Azure. В дополнение к расширению опций облака и хостинга, доступных разработчикам MongoDB, этот шаг объединяет возможности ведущей базы данных NoSQL с технологиями Microsoft, включая Microsoft Azure, .NET и другие технологии с открытым исходным кодом, которые поддерживает Microsoft.


Прочее[править | править код]

Имеется подробная и качественная документация, большое число примеров и драйверов под популярные языки и платформы Java, JavaScript, Node.js, C++, C#, PHP, Python, Perl, Ruby, Grails&Groovy[12].

Заявляется, что релиз MongoDB 1.0.0 готов к использованию в производстве как в качестве единичного мастера, так и в связках «ведущий — ведомые». Код этого релиза достаточно стабилен и проверен в промышленной эксплуатации на протяжении 1,5 лет[13]. По возможности MongoDB должна быть развернута минимум на двух серверах, используя репликацию Master/Slave[14]. Это обеспечивает наличие актуальных данных при выходе из строя одной из СУБД.

Примечания[править | править код]

Литература[править | править код]

  • Кайл Бэнкер. MongoDB в действии = MongoDB in Action. — ДМК Пресс, 2014. — 394 с. — ISBN 978-5-97060-057-3.
  • Kristina Chodorow. MongoDB: The Definitive Guide, 2nd Edition. — O'Reilly Media, Inc., 2013. — 432 с. — ISBN 978-1-4493-4468-9.
  • David Hows, Peter Membrey, Eelco Plugge, Tim Hawkins. The Definitive Guide to MongoDB: A complete guide to dealing with Big Data using MongoDB, Third Edition. — Apress, 2015. — 376 с. — ISBN 978-1-4842-1183-0.
  • Eelco Plugge, Peter Membrey, Tim Hawkins. The Definitive Guide to MongoDB: The NoSQL Database for Cloud and Desktop Computing. — Apress, 2010. — 327 с. — ISBN 1-4302-3051-7.
  • Mithun Satheesh; Bruno Joseph D'mello; Jason Krol. Web Development with MongoDB and NodeJS - Second Edition. — Packt Publishing, 2015. — 300 с. — ISBN 978-1-78528-745-9.
  • Steve Hoberman. Data Modeling for MongoDB. — Technics Publications, 2014. — 226 с. — ISBN 978-1-935504-70-2.
  • Mitch Pirtle. MongoDB for Web Development. — Addison-Wesley Professional, 2011. — С. 360. — ISBN 9780321705334.

Ссылки[править | править код]

Сайты и порталы
Прочее