MongoDB

MongoDB
Логотип программы MongoDB
Скриншот программы MongoDB
Подключение к MongoDB Shell
Тип документоориентированная СУБД
Разработчик MongoDB
Написана на C++, C и JavaScript
Операционные системы Linux, macOS, Windows и OpenBSD
Первый выпуск 2009
Последняя версия
Репозиторий github.com/mongodb/mongo
Состояние Активное
Лицензия Server Side Public License (SSPL), ранее GNU AGPL (СУБД) и Apache License (драйверы)
Сайт mongodb.com (англ.)
Логотип Викисклада Медиафайлы на Викискладе

MongoDB — документоориентированная система управления базами данных, не требующая описания схемы таблиц. Считается одним из классических примеров NoSQL-систем, использует JSON-подобные документы и схему базы данных. Написана на языке C++. Применяется в веб-разработке, в частности, в рамках JavaScript-ориентированного стека MEAN.

Возможности

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

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

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

Система масштабируется горизонтально, используя технику сегментирования объектов баз данных — распределение их частей по различным узлам кластера. Администратор выбирает ключ сегментирования, который определяет, по какому критерию данные будут разнесены по узлам (в зависимости от значений хэша ключа сегментирования). Благодаря тому, что каждый узел кластера может принимать запросы, обеспечивается балансировка нагрузки.

Система может быть использована в качестве файлового хранилища с балансировкой нагрузки и репликацией данных (функция Grid File System[4]; поставляется вместе с драйверами MongoDB). Предоставляются программные средства для работы с файлами и их содержимым. GridFS используется в плагинах для Nginx[5] и lighttpd[6]. GridFS разделяет файл на части и хранит каждую часть как отдельный документ[7].

Может работать в соответствии с парадигмой MapReduce. Для агрегации данных предусмотрен аналог SQL-выражения GROUP BY; операторы агрегации могут быть связаны в цепи подобно Unix-конвейерам. Фреймворк также имеет оператор $lookup для связки документов при выгрузке и статистические операции такие как среднеквадратическое отклонение.

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

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

В июне 2018 года (в версии 4.0) добавлена поддержка транзакций, удовлетворяющих требованиям ACID[8].

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

Есть официальные драйверы для основных языков программирования (Си, C++, C#, Go, Java, Node.js, Perl, PHP, Python, Ruby, Rust, Scala, Swift). Существует также большое количество неофициальных или поддерживаемых сообществом драйверов для других языков программирования и фреймворков.

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

Лицензирование

MongoDB изначально выходила под лицензией GNU Affero General Public версии 3. Языковые драйверы доступны под лицензией Apache. MongoDB можно бесплатно получить по общедоступной лицензии Affero (AGPL) GNU. В октябре 2018 года компания-разработчик объявила о переходе к более жёсткой по сравнению с AGPL копилефтной лицензии SSPL (Server Side Public License)[9][10]. Вслед за этим было начато изучение новой лицензии представителями Open Source Initiative и Free Software Foundation на предмет соответствия определениям открытого и свободного программного обеспечения[11].

Кроме того, компания MongoDB выпускает коммерческую версию СУБД, включающую дополнительные функции (например, интеграцию с SASL, LDAP, Kerberos, SNMP), инструменты управления, мониторинг и резервное копирование, а также поддержку.

Варианты использования

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

  • регистрация и хранение информации о событиях;
  • системы управления документами и контентом;
  • электронная коммерция;
  • игры;
  • данные мониторинга, датчиков;
  • мобильные приложения;
  • хранилище операционных данных веб-страниц (например, хранение комментариев, рейтингов, профилей пользователей, сеансы пользователей).

Компания

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

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

10 марта 2022 года MongoDB предупредила своих пользователей в России и Белоруссии, что их данные, которые хранятся на платформе MongoDB Atlas (облачный вариант базы, поддерживаемый AWS, Microsoft Azure, и Google Cloud Platform), будут уничтожены[12].

Инструменты

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

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

Примечания

  1. Release Notes for MongoDB 7.0.5
  2. MongoDB Find Command. Дата обращения: 9 марта 2017. Архивировано 18 октября 2016 года.
  3. MongoDB. Introduction to Replication. MongoDB. Дата обращения: 9 марта 2017. Архивировано 11 апреля 2016 года.
  4. MongoDB. GridFS article on MongoDB Developer's Manual. MongoDB. Дата обращения: 9 марта 2017. Архивировано 17 января 2013 года.
  5. NGINX plugin for MongoDB source code. GitHub. Дата обращения: 9 марта 2017. Архивировано 11 апреля 2016 года.
  6. lighttpd plugin for MongoDB source code. Bitbucket. Дата обращения: 9 марта 2017. Архивировано из оригинала 7 августа 2011 года.
  7. Malick Md. MongoDB overview. Expertstown. Дата обращения: 9 марта 2017. Архивировано 5 марта 2014 года.
  8. Transactions (амер. англ.). MongoDB. Дата обращения: 12 декабря 2018. Архивировано 18 декабря 2018 года.
  9. mongodb/mongo (англ.). GitHub. Дата обращения: 19 октября 2018. Архивировано 16 сентября 2020 года.
  10. "MongoDB Issues New Server Side Public License for MongoDB Community Server". MongoDB (англ.). 2018-10-16. Архивировано 16 октября 2018. Дата обращения: 19 октября 2018.
  11. OpenNews: СУБД MongoDB переведена на новую лицензию, которая пока не проверена на открытость. opennet.ru. Дата обращения: 19 октября 2018. Архивировано 20 октября 2018 года.
  12. MongoDB уничтожит все данные Россиян и Белорусов Архивная копия от 11 марта 2022 на Wayback Machine // SecurityLab.ru

Литература

  • Эрик Редмонд, Джим. Р. Уилсон. Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL = MongoDB in Action. — ДМК Пресс, 2013. — 384 с. — ISBN 978-5-94074-866-3.
  • Кайл Бэнкер. MongoDB в действии = MongoDB in Action. — ДМК Пресс, 2014. — 394 с. — ISBN 978-5-97060-057-3.
  • Kristina Chodorow. MongoDB: The Definitive Guide, 2nd Edition. — O’Reilly, 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.
  • 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.

Ссылки