Обзор СУБД MongoDB и сфер ее применения
MongoDB — яркий пример грамотной реализации NoSQL-системы управления базами данных. Программное обеспечение распространяется в соответствии с лицензией SSPL — это несвободная «Source Available» лицензия со значительными ограничениями.
В частности, в ее требованиях содержится ограничение на использование MongoDB в качестве DBaaS, если остальная инфраструктура не соответствует SSPL. В этом случае необходимо использовать коммерческую версию, которая отличается дополнительными возможностями: расширенными штатными интеграциями и набором инструментов, бэкапами, а также технической поддержкой.
Лицензия SSPL — предмет серьезных споров. Open Source Initiative не признает ее в качестве свободной лицензии из-за значительных несоответствий набору правил, определяющих программное обеспечение с открытым исходным кодом. Если вы собираетесь бесплатно использовать MongoDB, то в первую очередь необходимо изучить все тонкости условий, на которых вы сможете это сделать.
На данный момент существует несколько изданий:
- MongoDB Community Edition — бесплатное издание, доступное для основных операционных систем: macOS, Windows и Linux.
- MongoDB Enterprise Server — коммерческое издание, требующее оплаченную подписку MongoDB Enterprise Advanced.
- MongoDB Atlas — облачный сервис, оказывающий услуги по управлению базами данных: для хранения задействуются сервера таких гигантов, как AWS, Azure, Google Cloud.
В случае с MongoDB Atlas можно выбрать как платные, так и бесплатные варианты использования. Они неравнозначные: бесплатные возможности урезаны как по объему хранилища, так и по доступным инструментам.
Краткая история
Компания-разработчик зарегистрировалась еще в далеком 2007 г., но первый выпуск СУБД появился только в 2009 г. — в этом же году компания стала использовать модель разработки с открытым исходным кодом, оказывая дополнительные коммерческие услуги: техподдержку, резервное копирование и прикладные инструменты для работы с данными.
Изначально компания называлась 10gen, но в 2013 г. выбрала в качестве названия MongoDB Inc — это было сделано с целью подчеркнуть основное направление развития. Штаб-квартиры компании расположены в Нью-Йорке (США) и Дублине. В 2019 г. MongoDB заключила договор с Alibaba Cloud (Aliyun) и теперь она предлагает СУБД своим клиентам в качестве услуги.
В начале марта этого года разработчикам из России и Беларуси пришло уведомление от компании. В нем содержалось предупреждение о том, что все их данные, хранимые на MongoDB Atlas, будут удалены без возможности восстановления.
Техническая сторона
Система написана на языке C++, что подразумевает кроссплатформенность, а в качестве драйверов для программирования доступны Java, PHP, Python, Perl, C# и другие. Помимо этого, существует и неофициальная поддержка различных языков и фреймворков.
Это документоориентированная система управления базами данных, обеспечивающая высокую производительность и простоту масштабирования. В отличие от традиционных способов построения баз, тут не применяются таблицы, внешние ключи, запросы SQL. Вместо этого для хранения данных используются документы JavaScript Object Notation (JSON) и Binary JavaScript Object Notation (BSON).
Документы позволяют хранить бинарные данные — музыку, изображения, но для файлов размером свыше 1 Mb лучше использовать GridFS. Это спецификация MongoDB, которая предназначена для работы с большими файлами — видео, аудио, картинками — позволяющая хранить файлы, размером свыше 16 Mb. Достигается это за счет разделения файла на части по 255 Kb, информация о которых записывается в fs.files и fs.chunks. Такой метод позволяет обеспечить высокую скорость работы и широкие возможности.
К особенностям этой системы можно отнести:
- поддержка ad-hoc-запросов — функционал, позволяющий возвращать определенные поля документа, а также пользовательские функции;
- поиск по регулярным выражениям;
- поддержка индексов по вложенным документам и массивам, включая геопространственные;
- в запросах и функциях агрегации поддерживается JavaScript;
- поддержка атомарных операций, записи без подтверждения, compare-and-swap и других.
Отказ от привычных для реляционных баз практик позволил разработчикам добиться высокой скорости работы и хорошей производительности, сохранив при этом отказоустойчивость и надежность хранения данных.
Безопасность и производительность
Если рассматривать использование системы с точки зрения безопасности, то MongoDB может обеспечить транзакции, соответствующие требованиям ACID — эти требования определяют наиболее надежное и предсказуемое поведение работы СУБД в неопределенных условиях и при возникновении ошибок.
Отказоустойчивость обеспечивают журналирование и репликация: поддерживается два вида репликации — наборы реплик и технология «master/slave» — сами разработчики советуют использовать именно наборы реплик, если у проекта нет жесткой привязки к выбору. С точки зрения выстраивания работы эти технологии практически идентичны: главное отличие набора реплик заключается в автоматическом выборе нового «master», если с существующим произойдут неполадки, и возвращением его в строй в качестве реплики, после восстановления работоспособности.
В системе реализована возможность автоматической сегментации по нескольким наборам реплик. В основе сегментирования находится диапазон — для определения документа к определенному диапазону используется shard key (сегментный ключ). Распределение нагрузки происходит равномерно между всеми участниками набора реплик. Поэтому для того, чтобы разгрузить кластер, который перестает справляться с работой, достаточно просто добавить в него дополнительный набор реплик, и данные автоматически перераспределятся.
Варианты использования
На самом деле примеров использования в самых разных областях можно привести сколько угодно, главное, что вы должны понимать — это нереляционная БД, а следовательно, сама логика работы у нее другая. Востребованность таких СУБД подтверждает использование MongoDB в своих проектах крупными корпорациями, среди которых находятся Facebook, Google, Twitter и другие.
Система подходит для реализации схем, где требуется аналитика в реальном времени, быстрое журналирование. Кроме этого, ее традиционно используют для кэширования данных и проектов, в которых важное значение имеет масштабируемость. Вот несколько примеров, где можно задействовать MongoDB:
- Социальные сети, чаты, генераторы новостей и схожие сценарии использования.
- Большие данные — нереляционная структура системы хорошо подходит для работы с big data.
- Каталоги для магазинов электронной торговли, содержащие большое количество разных наименований товаров.
- Работа с данными, основанными на местоположении — геопространственными данными.
- Сбор и обработка информации с различных датчиков и считывающих устройств;
- Сервисы блогосферы — особенно те, которые подразумевают большое количество изображений, аудио и видеоматериалов.
Система плохо подходит для хранения сильно связанных данных и проектов, основной упор в которых сделан на транзакции на уровне базы данных. К минусам MongoDB традиционно относят:
- неполное соответствие требованиям ACID — реляционные БД в этом плане выигрывают;
- невозможно реализовать бизнес-логику на уровне БД, так как в базе нет положений о хранимых функциях и процедурах;
- сложная реализация транзакций.
Собственно, как и любой инструмент, MongoDB в чем-то лучше других СУБД, а в чем-то проигрывает.
Подведение итогов
MongoDB — это популярная СУБД, способная хранить и обрабатывать любые данные, если они будут в JSON/BSON-формате. На выбор доступны несколько различных редакций, в том числе и бесплатная, если она удовлетворяет требованиям лицензии SSPL. В свою очередь, коммерческая редакция предоставляет расширенный набор инструментов, включая резервное копирование и техническую поддержку. Есть возможность использовать вариант в облаке: платный или бесплатный, с ограничениями.
Система хорошо подходит для обработки больших данных и может использоваться в таких отраслях, как машинное обучение, аналитика в реальном времени, web-ресурсы с большим количеством фото и видеоматериалов, чаты, новостные ленты, блоги. Плохо подходит для проектов, в которых важны соответствие требованиям ACID и множественные транзакции.