Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

MongoDB - это кроссплатформенная документно-ориентированная база данных с доступным исходным кодом . Классифицируемая как программа базы данных NoSQL , MongoDB использует документы , подобные JSON, с дополнительными схемами . MongoDB разработан MongoDB Inc. и лицензируется в соответствии с общедоступной серверной лицензией (SSPL).

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

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

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

30 октября 2019 года MongoDB объединилась с Alibaba Cloud , которая предложит своим клиентам решение MongoDB-as-a-service. Клиенты могут использовать управляемое предложение из глобальных центров обработки данных BABA. [7]

Основные особенности [ править ]

Специальные запросы [ править ]

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

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

Поля в документе MongoDB можно проиндексировать с помощью первичных и вторичных индексов.

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

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

Если в реплицированном развертывании MongoDB есть только один вторичный член, в набор должен быть добавлен отдельный демон, называемый арбитром . У него единственная ответственность - решить вопрос о выборах новых праймериз. [26] Как следствие, идеализированное распределенное развертывание MongoDB требует как минимум трех отдельных серверов, даже в случае только одного основного и одного вторичного. [26]

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

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

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

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

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

Эта функция называется файл сетки системы , [28] включена с драйверами MongoDB. MongoDB предоставляет разработчикам функции для работы с файлами и контентом. Доступ к GridFS можно получить с помощью утилиты mongofiles или плагинов для Nginx [29] и lighttpd . [30] GridFS делит файл на части или куски и сохраняет каждый из этих фрагментов как отдельный документ. [31]

Агрегация [ править ]

MongoDB предоставляет три способа выполнения агрегации: конвейер агрегации, функцию уменьшения карты и одноцелевые методы агрегации. [32]

Map-reduce может использоваться для пакетной обработки данных и операций агрегирования. Но согласно документации MongoDB, конвейер агрегации обеспечивает лучшую производительность для большинства операций агрегирования. [33]

Платформа агрегации позволяет пользователям получать результаты, для которых используется предложение SQL GROUP BY. Операторы агрегирования могут быть объединены в конвейер - аналогично конвейерам Unix . Платформа агрегации включает оператор $ lookup, который может объединять документы из нескольких коллекций, а также статистические операторы, такие как стандартное отклонение.

Выполнение серверного JavaScript [ править ]

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

Коллекции с ограничением [ править ]

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

Транзакции [ править ]

MongoDB утверждает, что поддерживает транзакции ACID с несколькими документами с момента выпуска 4.0 в июне 2018 года. [34] Это утверждение оказалось неверным, поскольку MongoDB нарушает изоляцию моментальных снимков . [35]

Редакции [ править ]

Сервер совместной работы MongoDB [ править ]

MongoDB Community Edition бесплатна и доступна для Windows, Linux и OS X. [36]

Сервер предприятия MongoDB [ править ]

MongoDB Enterprise Server - это коммерческая версия MongoDB, доступная как часть подписки MongoDB Enterprise Advanced. [37]

Атлас MongoDB [ править ]

MongoDB также доступна как полностью управляемая служба по запросу. MongoDB Atlas работает на AWS, Microsoft Azure и Google Cloud Platform. [38]

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

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

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

Бессерверный доступ [ править ]

MongoDB Stitch [40] обеспечивает бессерверный доступ к MongoDB и другим службам. Клиентские библиотеки доступны для JavaScript, [41] iOS, [42] и Android. [43]

Управление и графический интерфейс [ править ]

Вставка записи в MongoDB с помощью Robomongo 0.8.5

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

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

Сервер совместной работы MongoDB [ править ]

По состоянию на октябрь 2018 года MongoDB выпускается под лицензией Server Side Public License (SSPL), разработанной в рамках проекта. Она заменяет Стандартную общественную лицензию GNU Affero и почти идентична Стандартной общественной лицензии GNU версии 3 , но требует, чтобы лица, делающие программное обеспечение общедоступным как часть «службы», сделали весь исходный код службы доступным по этой лицензии. [45] [46] SSPL был отправлен на сертификацию в Open Source Initiative, но позже отозван. [47] Языковые драйверы доступны по лицензии Apache.. Кроме того, MongoDB Inc. предлагает проприетарные лицензии для MongoDB. Последними версиями, имеющими лицензию AGPL версии 3, являются 4.0.3 (стабильная) и 4.1.4.

MongoDB была удалена из дистрибутивов Debian , Fedora и Red Hat Enterprise Linux в связи с изменением лицензирования. Fedora определила, что версия 1 SSPL не является лицензией на свободное программное обеспечение, потому что она «намеренно создана, чтобы быть агрессивно дискриминационной» по отношению к коммерческим пользователям. [48] [49]

Отчеты об ошибках и критика [ править ]

Безопасность [ править ]

Из-за конфигурации безопасности MongoDB по умолчанию, позволяющей любому иметь полный доступ к базе данных, данные из десятков тысяч установок MongoDB были украдены. Кроме того, многие серверы MongoDB были задержаны с целью выкупа . [50] [51]

Начиная с выпуска MongoDB 2.6, двоичные файлы из официальных пакетов MongoDB RPM и DEB по умолчанию привязываются к localhost . Начиная с MongoDB 3.6, это поведение по умолчанию было распространено на все пакеты MongoDB на всех платформах. В результате все сетевые подключения к базе данных будут запрещены, если это явно не настроено администратором. [52]

Техническая критика [ править ]

В некоторых сценариях сбоя, когда приложение может получить доступ к двум отдельным процессам MongoDB, но эти процессы не могут получить доступ друг к другу, MongoDB может вернуть устаревшие чтения. В этом сценарии MongoDB также может откатить подтвержденные записи. [53] Эта проблема устранена, начиная с версии 3.4.0, выпущенной в ноябре 2016 г. [54] (и перенесена на версию 3.2.12). [55]

До версии 2.2 блокировки реализовывались для каждого серверного процесса. В версии 2.2 блокировки были реализованы на уровне базы данных. [56] Начиная с версии 3.0, [57] были введены подключаемые механизмы хранения, и каждый механизм хранения может реализовывать блокировки по-разному. [57] В MongoDB 3.0 блокировки реализованы на уровне сбора для механизма хранения MMAPv1 [58], в то время как механизм хранения WiredTiger использует протокол оптимистичного параллелизма, который эффективно обеспечивает блокировку на уровне документа. [59] Даже в версиях до 3.0 одним из подходов к увеличению параллелизма является использование сегментирования . [60]В некоторых ситуациях чтение и запись приводят к их блокировкам. Если MongoDB предсказывает, что страница вряд ли будет в памяти, операции будут блокировать их во время загрузки страниц. Использование блокировки податливости значительно расширилось в 2.2. [61]

До версии 3.3.11 MongoDB не могла выполнять сортировку на основе сопоставления и была ограничена побайтным сравнением через memcmp, что не обеспечивало правильного упорядочения для многих неанглийских языков при использовании с кодировкой Unicode. Проблема исправлена ​​23 августа 2016 г.

До MongoDB 4.0 запросы к индексу не были атомарными. Документы, которые обновлялись во время выполнения запроса, могли быть пропущены. [62] Введение в MongoDB 4.0 проблемы чтения моментальных снимков устранило это явление. [63]

Хотя MongoDB заявляет в недатированной статье под названием «MongoDB and Jepsen» [64], что их база данных прошла тесты компании Jepsen по исследованиям безопасности распределенных систем, которые она назвала «самыми жесткими в отрасли тестами безопасности, правильности и согласованности данных», Джепсен опубликовал статью в В мае 2020 года заявлено, что MongoDB 3.6.4 на самом деле провалила их тесты, и что у более новой MongoDB 4.2.6 больше проблем, включая «ретропричинные транзакции», когда транзакция меняет порядок, чтобы при чтении можно было увидеть результат будущей записи. [65] [66] Джепсен отметил в своем отчете, что MongoDB не упомянула об этих выводах на странице MongoDB «MongoDB and Jepsen».

MongoDB World [ править ]

MongoDB World - это ежегодная конференция разработчиков, проводимая MongoDB, Inc. [67]

См. Также [ править ]

  • Apache Cassandra
  • BSON , двоичный формат JSON, который MongoDB использует для хранения и передачи данных.
  • Список серверных реализаций JavaScript
  • MEAN , стек решений с использованием MongoDB в качестве базы данных
  • Серверные сценарии
  • TokuMX , форк MongoDB с большей согласованностью и новыми индексными структурами

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

  1. ^ «Состояние MongoDB, март 2010 г.» . DB-Двигатели . Архивировано 18 сентября 2017 года . Проверено 5 июля 2017 года .
  2. ^ "Выпуск r4.4.5" . Проверено 9 апреля 2021 года .
  3. ^ «Как настроить кластер MongoDB NoSQL с помощью Oracle Solaris Zones» . Oracle . Архивировано 12 августа 2017 года . Проверено 5 июля 2017 года .
  4. ^ «Практическое руководство: MongoDB на FreeBSD 10.x» . Новости FreeBSD . Архивировано 28 декабря 2017 года . Проверено 5 июля 2017 года .
  5. ^ «10gen охватывает то, что было создано, становится MongoDB Inc.» . Гигаом . Архивировано 5 марта 2016 года . Проверено 29 января 2016 года .
  6. Рианна Витковски, Уоллес (21 октября 2017 г.). «Акции MongoDB выросли на 34% в первый день торгов по сравнению с повышенной ценой IPO» . MarketWatch . Доу Джонс. Архивировано 26 февраля 2018 года . Проверено 26 февраля 2018 года .
  7. Betz, Brandy (30 октября 2019 г.). «MongoDB объединяется с Alibaba Cloud» . В поисках альфы . Проверено 31 октября 2019 года .
  8. ^ «Примечания к выпуску MongoDB 1.2.x» . mongodb.com .
  9. ^ «Примечания к выпуску MongoDB 1.4» . mongodb.com .
  10. ^ «Примечания к выпуску MongoDB 1.6» . mongodb.com .
  11. ^ «Примечания к выпуску MongoDB 1.8» . mongodb.com .
  12. ^ «Примечания к выпуску MongoDB 2.0» . mongodb.com .
  13. ^ «Примечания к выпуску MongoDB 2.2» . mongodb.com .
  14. ^ «Примечания к выпуску MongoDB 2.4» . mongodb.com .
  15. ^ «Примечания к выпуску MongoDB 2.6» . mongodb.com .
  16. ^ «Примечания к выпуску MongoDB 3.0» . mongodb.com .
  17. ^ «Примечания к выпуску MongoDB 3.2» . mongodb.com .
  18. ^ «Примечания к выпуску MongoDB 3.4» . mongodb.com .
  19. ^ «Примечания к выпуску MongoDB 3.6» . mongodb.com .
  20. ^ «Примечания к выпуску MongoDB 4.0» . mongodb.com .
  21. ^ «Примечания к выпуску MongoDB 4.2» . mongodb.com .
  22. ^ «Примечания к выпуску MongoDB 4.4» . mongodb.com .
  23. ^ «Примечания к выпуску MongoDB 4.4» . mongodb.com .
  24. ^ Дэвис Керби. «Почему MongoDB - лучший выбор» . DZone. Архивировано 12 июня 2018 года . Проверено 6 июля 2017 года .
  25. ^ «Невероятно быстрое восстановление реплики MongoDB, часть 1 из 2» . ClusterHQ. Архивировано из оригинального 30 октября 2017 года.
  26. ^ a b «Документы MongoDB - Арбитр набора реплик» . Проверено 9 апреля 2021 года .
  27. ^ «Превращение реплики MongoDB в сегментированный кластер» . Несколько девяти . Архивировано 25 ноября 2016 года.
  28. ^ «GridFS и MongoDB: плюсы и минусы» . Сочинять . Архивировано 10 сентября 2017 года.
  29. ^ "Плагин NGINX для исходного кода MongoDB" . GitHub . Архивировано 11 апреля 2016 года . Проверено 10 сентября 2016 года .
  30. ^ "плагин lighttpd для исходного кода MongoDB" . Bitbucket . Архивировано 7 августа 2011 года . Проверено 28 июня 2010 года .
  31. ^ Малик Мэриленд "Обзор MongoDB" . Expertstown . Архивировано 5 марта 2014 года . Проверено 27 февраля 2014 года .
  32. ^ «Агрегация - Руководство MongoDB» . docs.mongodb.com . Архивировано 29 ноября 2018 года . Проверено 14 августа 2018 года .
  33. ^ "Map-Reduce - Руководство по MongoDB" . docs.mongodb.com . Архивировано 14 августа 2018 года . Проверено 14 августа 2018 года .
  34. ^ «MongoDB более глубоко продвигает NoSQL в корпоративные возможности» . 27 июня, 2018. архивации с оригинала на 7 августа 2018 года . Проверено 7 августа 2018 года .
  35. ^ MongoDB 4.2.6
  36. ^ "Центр загрузок MongoDB" . MongoDB . Архивировано 14 августа 2018 года . Проверено 14 августа 2018 года .
  37. ^ "Центр загрузок MongoDB" . MongoDB . Архивировано 14 августа 2018 года . Проверено 14 августа 2018 года .
  38. ^ «MongoDB запускает глобальные кластеры, чтобы сделать контроль над географическими данными доступным для всех» . MongoDB . Архивировано 27 июня 2018 года . Проверено 27 июня 2018 года .
  39. ^ MongoDB. «GitHub - mongodb / mongo» . GitHub. Архивировано 29 июля 2017 года . Проверено 6 июля 2017 года .
  40. ^ Саймон Биссон. «MongoDB Stitch: бессерверные вычисления с большой разницей» . ZDNet. Архивировано 4 апреля 2018 года . Проверено 13 сентября 2018 года .
  41. ^ MongoDB. "MongoDB Stitch JavaScript SDK" . GitHub.
  42. ^ MongoDB. "MongoDB Stitch iOS SDK" . GitHub.
  43. ^ MongoDB. "MongoDB Stitch Android SDK" . GitHub.
  44. ^ Ма, Джейсон. «Визуализация данных с помощью MongoDB Compass» . Dzone . Dzone.com. Архивировано 22 мая 2018 года . Проверено 6 июля 2017 года .
  45. ^ Баер, Тони. «Пришла очередь MongoDB изменить свою лицензию с открытым исходным кодом» . ZDNet . Архивировано 31 октября 2018 года . Проверено 16 октября 2018 года .
  46. ^ «MongoDB меняет свою лицензию с открытым исходным кодом» . TechCrunch . Архивировано 16 октября 2018 года . Проверено 16 октября 2018 года .
  47. Staff, Ars (16 октября 2019 г.). «В 2019 году несколько компаний с открытым исходным кодом изменили курс - правильный ли это шаг?» . Ars Technica .
  48. ^ Vaughan-Nichols, Стивен Дж. «MongoDB» с открытым исходным кодом «Отклонена публичная лицензия на стороне сервера» . ZDNet . Архивировано 16 января 2019 года . Проверено 17 января 2019 года .
  49. ^ «Изменения в лицензировании MongoDB заставили Red Hat удалить базу данных из последней версии своей серверной ОС» . GeekWire . 16 января 2019 года. Архивировано 17 января 2019 года . Проверено 17 января 2019 года .
  50. ^ Кребс, Брайан. «Вымогатели стирают тысячи баз данных, жертв, которые платят, становятся жесткими» . krebsonsecurity.com . Брайан Кребс. Архивировано 11 января 2017 года . Проверено 11 января 2017 года .
  51. ^ Константин, Люциан. «Группы программ-вымогателей удалили более 10 000 баз данных MongoDB» . Компьютерный мир . IDG. Архивировано 10 января 2017 года . Проверено 11 января 2017 года .
  52. ^ "Совместимость с MongoDB Bind IP" . MongoDB . MongoDB. Архивировано 6 марта 2019 года . Проверено 5 марта 2019 года .
  53. Кайл Кингсбери (20 апреля 2015 г.). «Позвони мне, может быть: MongoDB читает устаревшие» . Архивировано 15 августа 2015 года . Проверено 4 июля 2015 года .
  54. ^ «Примечания к выпуску MongoDB 3.4» . Руководство MongoDB . Архивировано 14 августа 2018 года . Проверено 6 апреля 2018 года .
  55. Рианна Кингсбери, Кайл (7 февраля 2017 г.). «MongoDB 3.4.0-rc3» . Джепсен . Архивировано 23 октября 2017 года.
  56. ^ «Атомарность, изоляция и параллелизм в MongoDB» . scalegrid.io . Архивировано 10 сентября 2017 года . Проверено 28 июня 2017 года .
  57. ^ a b «MongoDB подключается к механизмам хранения» . datanami.com. 5 марта 2015 года. Архивировано 4 июля 2017 года . Проверено 28 июня 2017 года .
  58. ^ Arborian Consulting. «MongoDB, MMAPv1, WiredTiger, блокировка и очереди» . Арбориан Консалтинг. Архивировано 19 июня 2017 года . Проверено 28 июня 2017 года .
  59. ^ Кенни Горман. «Сжатие и производительность MongoDB 3.0 WiredTiger» . Objectrocket.com/. Архивировано 16 июня 2017 года . Проверено 28 июня 2017 года .
  60. ^ Никита Манько. «Узкие места производительности MongoDB, стратегии оптимизации для MongoDB» . mikitamanko.com. Архивировано 19 июля 2017 года . Проверено 5 июля 2017 года .
  61. ^ scalegrid.io. «Атомарность, изоляция и параллелизм в MongoDB» . scalegrid.io. Архивировано 10 сентября 2017 года . Проверено 5 июля 2017 года .
  62. ^ Глассер, Дэвид (7 июня 2016). «Запросы MongoDB не всегда возвращают все совпадающие документы!» . Блог Метеор .
  63. ^ "Документы MongoDB" . Архивировано 6 марта 2019 года . Проверено 5 марта 2019 года .
  64. ^ «MongoDB и Джепсен» . MongoDB .
  65. Аллен, Джонатан (22 мая 2020 г.). «Джепсен оспаривает утверждения MongoDB о согласованности данных» . InfoQ .
  66. Кингсбери, Кайл (15 мая 2020 г.). «MongoDB 4.2.6» . Jepsen.io .
  67. ^ "Мир MongoDB" . www.mongodb.com . Архивировано 26 апреля 2019 года . Проверено 10 апреля 2019 года .
  68. ^ "Объявление Монго 2014" . MongoDB .
  69. ^ "Объявление Mongo 2015" . MongoDB .
  70. ^ «Объявление Mongo 2016» . MongoDB .
  71. ^ "Объявление Mongo 2017" . icrunchdata.
  72. ^ «Ретроспектива Монго 2018» . KenWalger.
  73. ^ "Mongo 2019 Sneak Peek" . MongoDB.
  74. ^ «Событие Монго 2020» . Eventil.

Библиография [ править ]

  • Банкир, Кайл (28 марта 2011 г.), MongoDB в действии (1-е изд.), Мэннинг , стр. 375, ISBN 978-1-935182-87-0
  • Ходоров, Кристина; Дирольф, Майкл (23 сентября 2010 г.), MongoDB: The Definitive Guide (1-е изд.), O'Reilly Media , стр. 216, ISBN 978-1-4493-8156-1
  • Пиртл, Митч (3 марта 2011 г.), MongoDB для веб-разработки (1-е изд.), Addison-Wesley Professional , стр. 360, ISBN 978-0-321-70533-4
  • Хокинс, Тим; Plugge, Eelco; Мембре, Питер (26 сентября 2010 г.), Полное руководство по MongoDB: База данных NoSQL для облачных и настольных вычислений (1-е изд.), Apress , стр. 350, ISBN 978-1-4302-3051-9

Внешние ссылки [ править ]

  • Официальный веб-сайт