![]() | |
![]() | |
Разработчики) | MongoDB Inc. |
---|---|
Первый выпуск | 11 февраля 2009 г. ; 12 лет назад ( 2009-02-11) |
Стабильный выпуск | 5.0 ![]() |
Репозиторий | |
Написано в | C ++, JavaScript, Python |
Операционная система | Windows Vista и новее, Linux, OS X 10.7 и новее, Solaris, FreeBSD |
Доступно в | английский |
Тип | Документно-ориентированная база данных |
Лицензия | Общественная лицензия на стороне сервера |
Веб-сайт | www.mongodb.com ![]() |
MongoDB - это кроссплатформенная документно-ориентированная база данных с доступным исходным кодом. Классифицируемая как программа базы данных NoSQL, MongoDB использует документы, подобные JSON, с дополнительными схемами. MongoDB разработан MongoDB Inc. и лицензируется в соответствии с публичной лицензией на стороне сервера (SSPL).
Софтверная компания 10gen начала разработку MongoDB в 2007 году как компонент запланированной платформы в качестве сервисного продукта. В 2009 году компания перешла на модель разработки с открытым исходным кодом, предлагая коммерческую поддержку и другие услуги. В 2013 году 10gen сменила название на MongoDB Inc.
20 октября 2017 года MongoDB стала публичной компанией, зарегистрированной на NASDAQ как MDB с ценой IPO 24 доллара за акцию.
MongoDB - это глобальная компания со штаб-квартирой в США в Нью-Йорке и международной штаб-квартирой в Дублине.
30 октября 2019 года MongoDB объединилась с Alibaba Cloud, которая предложит своим клиентам решение MongoDB-as-a-service. Клиенты могут использовать управляемое предложение из глобальных центров обработки данных BABA.
Версия | Дата выхода | Примечания к функциям | Ссылки |
---|---|---|---|
1.0 | Февраль 2009 г. | ||
1.2 | Декабрь 2009 г. |
| |
1.4 | Март 2010 г. | ||
1.6 | Август 2010 г. |
| |
1,8 | Март 2011 г. | ||
2.0 | Сентябрь 2011 г. | ||
2.2 | Август 2012 г. | ||
2,4 | Март 2013 г. |
| |
2,6 | 8 апреля 2014 г. |
| |
3.0 | 3 марта 2015 г. |
| |
3.2 | 8 декабря 2015 г. |
| |
3,4 | 29 ноября 2016 г. |
| |
3,6 | Ноябрь 2017 г. | ||
4.0 | Июнь 2018 г. |
| |
4.2 | Август 2019 г. | ||
4.4 | Июль 2020 г. | ||
4.4.5 | Апрель 2021 г. | ||
4.4.6 | Май 2021 г. | ||
5.0 | 13 июля 2021 г. |
|
MongoDB поддерживает поиск по полям, диапазонам и регулярным выражениям. Запросы могут возвращать определенные поля документов, а также включать определяемые пользователем функции JavaScript. Запросы также можно настроить так, чтобы они возвращали случайную выборку результатов заданного размера.
Поля в документе MongoDB можно проиндексировать с помощью первичных и вторичных индексов или индекса.
MongoDB обеспечивает высокую доступность с помощью наборов реплик. Набор реплик состоит из двух или более копий данных. Каждый член набора реплик может выступать в роли первичной или вторичной реплики в любое время. По умолчанию все операции записи и чтения выполняются на первичной реплике. Вторичные реплики поддерживают копию данных первичной с помощью встроенной репликации. Когда первичная реплика выходит из строя, набор реплик автоматически проводит процесс выбора, чтобы определить, какая вторичная реплика должна стать первичной. Вторичные серверы могут дополнительно обслуживать операции чтения, но по умолчанию эти данные согласованы только в конечном итоге.
Если в реплицированном развертывании MongoDB есть только один вторичный член, в набор должен быть добавлен отдельный демон, называемый арбитром. У него единственная ответственность - решить вопрос о выборах новых праймериз. Как следствие, идеализированное распределенное развертывание MongoDB требует как минимум трех отдельных серверов, даже в случае только одного основного и одного дополнительного.
MongoDB масштабируется по горизонтали с использованием сегментирования. Пользователь выбирает ключ осколка, который определяет, как будут распределяться данные в коллекции. Данные разбиваются на диапазоны (на основе ключа сегментов) и распределяются по нескольким сегментам. (Осколок - это мастер с одной или несколькими репликами.) В качестве альтернативы ключ осколка может быть хеширован для сопоставления с осколком, что обеспечивает равномерное распределение данных.
MongoDB может работать на нескольких серверах, балансируя нагрузку или дублируя данные, чтобы система оставалась работоспособной в случае отказа оборудования.
MongoDB может использоваться как файловая система, называемая GridFS, с функциями балансировки нагрузки и репликации данных на нескольких машинах для хранения файлов.
Эта функция, называемая файловой системой сетки, включена в драйверы MongoDB. MongoDB предоставляет разработчикам функции для работы с файлами и контентом. Доступ к GridFS можно получить с помощью утилиты mongofiles или плагинов для Nginx и lighttpd. GridFS делит файл на части или куски и сохраняет каждый из этих фрагментов как отдельный документ.
MongoDB предоставляет три способа выполнения агрегации: конвейер агрегации, функцию уменьшения карты и одноцелевые методы агрегации.
Map-reduce может использоваться для пакетной обработки данных и операций агрегирования. Но согласно документации MongoDB, конвейер агрегации обеспечивает лучшую производительность для большинства операций агрегирования.
Платформа агрегации позволяет пользователям получать результаты, для которых используется предложение SQL GROUP BY. Операторы агрегации могут быть объединены в конвейер - аналогично конвейеру Unix. Платформа агрегации включает оператор $ lookup, который может объединять документы из нескольких коллекций, а также статистические операторы, такие как стандартное отклонение.
JavaScript можно использовать в запросах, функциях агрегирования (таких как MapReduce ) и отправлять непосредственно в базу данных для выполнения.
MongoDB поддерживает коллекции фиксированного размера, называемые ограниченными коллекциями. Этот тип коллекции поддерживает порядок вставки и по достижении указанного размера ведет себя как круговая очередь.
MongoDB утверждает, что поддерживает транзакции ACID с несколькими документами с момента выпуска 4.0 в июне 2018 года. Это утверждение оказалось неверным, поскольку MongoDB нарушает изоляцию моментальных снимков.
MongoDB Community Edition бесплатна и доступна для Windows, Linux и OS X.
MongoDB Enterprise Server - это коммерческая версия MongoDB, доступная как часть подписки MongoDB Enterprise Advanced.
MongoDB также доступна как полностью управляемая служба по запросу. MongoDB Atlas работает на AWS, Microsoft Azure и Google Cloud Platform.
MongoDB имеет официальные драйверы для основных языков программирования и сред разработки. Также существует большое количество неофициальных или поддерживаемых сообществом драйверов для других языков программирования и фреймворков.
Основным интерфейсом к базе данных была оболочка mongo. Начиная с MongoDB 3.2, MongoDB Compass представлен как собственный графический интерфейс. Существуют продукты и сторонние проекты, предлагающие пользовательские интерфейсы для администрирования и просмотра данных.
По состоянию на октябрь 2018 года MongoDB выпускается под общедоступной лицензией на стороне сервера (SSPL), лицензией, разработанной в рамках проекта. Она заменяет Стандартную общественную лицензию GNU Affero и почти идентична Стандартной общественной лицензии GNU версии 3, но требует, чтобы лица, делающие программное обеспечение общедоступным как часть «службы», сделали весь исходный код службы доступным по этой лицензии. SSPL был отправлен на сертификацию в Open Source Initiative, но позже отозван. Языковые драйверы доступны по лицензии Apache. Кроме того, MongoDB Inc. предлагает проприетарные лицензии для MongoDB. Последними версиями, имеющими лицензию AGPL версии 3, являются 4.0.3 (стабильная) и 4.1.4.
MongoDB была удалена из дистрибутивов Debian, Fedora и Red Hat Enterprise Linux в связи с изменением лицензирования. Fedora определила, что версия 1 SSPL не является лицензией на свободное программное обеспечение, потому что она «намеренно создана так, чтобы быть агрессивно дискриминационной» по отношению к коммерческим пользователям.
Из-за конфигурации безопасности MongoDB по умолчанию, позволяющей любому иметь полный доступ к базе данных, данные из десятков тысяч установок MongoDB были украдены. Кроме того, многие серверы MongoDB были задержаны с целью выкупа.
В сентябре 2017 г.; обновлено в январе 2018 года, в официальном ответе Дави Оттенхеймер, руководитель службы безопасности продуктов в MongoDB, заявил, что MongoDB приняла меры для защиты от этих рисков.
Начиная с выпуска MongoDB 2.6, двоичные файлы из официальных пакетов MongoDB RPM и DEB по умолчанию привязываются к localhost. Начиная с MongoDB 3.6, это поведение по умолчанию было распространено на все пакеты MongoDB на всех платформах. В результате все сетевые подключения к базе данных будут запрещены, если это явно не настроено администратором.
В некоторых сценариях сбоя, когда приложение может получить доступ к двум отдельным процессам MongoDB, но эти процессы не могут получить доступ друг к другу, MongoDB может вернуть устаревшие чтения. В этом сценарии MongoDB также может откатить подтвержденные записи. Эта проблема устранена, начиная с версии 3.4.0, выпущенной в ноябре 2016 г. (с последующим переносом на v3.2.12).
До версии 2.2 блокировки реализовывались для каждого серверного процесса. В версии 2.2 блокировки были реализованы на уровне базы данных. Начиная с версии 3.0, были представлены подключаемые механизмы хранения, и каждый механизм хранения может реализовывать блокировки по-разному. В MongoDB 3.0 блокировки реализованы на уровне сбора для механизма хранения MMAPv1, в то время как механизм хранения WiredTiger использует протокол оптимистичного параллелизма, который эффективно обеспечивает блокировку на уровне документа. Даже в версиях до 3.0 одним из подходов к увеличению параллелизма является использование сегментирования. В некоторых ситуациях чтение и запись приводят к их блокировкам. Если MongoDB предсказывает, что страница вряд ли будет в памяти, операции будут блокировать их во время загрузки страниц. Использование блокировки податливости значительно расширилось в 2.2.
До версии 3.3.11 MongoDB не могла выполнять сортировку на основе сопоставления и была ограничена побайтным сравнением через memcmp, что не обеспечивало правильного упорядочения для многих неанглийских языков при использовании с кодировкой Unicode. Проблема исправлена 23 августа 2016 г.
До MongoDB 4.0 запросы к индексу не были атомарными. Документы, которые обновлялись во время выполнения запроса, могли быть пропущены. Введение проблемы чтения моментальных снимков в MongoDB 4.0 устранило это явление.
Хотя MongoDB заявляет в недатированной статье под названием «MongoDB and Jepsen», что их база данных прошла тесты компании Jepsen, занимающейся исследованиями безопасности распределенных систем, которые она назвала «самыми жесткими в отрасли тестами на безопасность, правильность и согласованность данных», Джепсен опубликовал статью в мае 2020 года, в которой говорится что MongoDB 3.6.4 на самом деле провалила их тесты, и что у более новой MongoDB 4.2.6 больше проблем, включая «ретропричинные транзакции», когда транзакция меняет порядок, чтобы при чтении можно было увидеть результат будущей записи. Джепсен отметил в своем отчете, что MongoDB не упомянула эти выводы на странице MongoDB «MongoDB and Jepsen».
MongoDB Inc. проводит ежегодную конференцию разработчиков, которую называют либо MongoDB World, либо MongoDB.live.
Год | Даты | Город | Место проведения | Примечания |
---|---|---|---|---|
2014 г. | 23–25 июня | Нью-Йорк | Отель Sheraton Times Square | |
2015 г. | 1-2 июня | Нью-Йорк | Отель Sheraton Times Square | |
2016 г. | 28–29 июня | Нью-Йорк | Нью-Йорк Хилтон Мидтаун | |
2017 г. | 20–21 июня | Чикаго | Хаятт Ридженси Чикаго | Первый год не в Нью-Йорке |
2018 г. | 26–27 июня | Нью-Йорк | Нью-Йорк Хилтон Мидтаун | |
2019 г. | 17-19 июня | Нью-Йорк | Нью-Йорк Хилтон Мидтаун | |
2020 г. | 4-6 мая | онлайн | Личное мероприятие отменено, а конференция полностью проведена онлайн из -за пандемии COVID-19 | |
2021 г. | 13–14 июля | онлайн | Конференция проводится онлайн в связи с пандемией COVID-19 | |
2022 г. | 7–9 июня | Нью-Йорк |