Введение в MongoDB
MongoDB представляет наиболее популярную на данный момент документо-ориентированную систему управления базами данных. По разным оценкам входит в десяток самых используемых баз данных в мире.
На момент написания данного материала последней версией платформы была версия 7.0 , которая вышла летом 2023 года и которая будет использоваться далее в данном руководстве. Использование конкретной версии может несколько отличаться от применения иных версий платформы MongoDB. Но в целом отличия в построении запросов в mondogb между версиями минимальны, имеет место довольно большая совместимость предудщеих версий с последующими
Документы вместо строк
Если реляционные базы данных хранят строки, то MongoDB хранит документы. В отличие от строк документы могут хранить сложную по структуре информацию. Документ можно представить как хранилище ключей и значений.
Ключ представляет простую метку, с которым ассоциировано определенный кусок данных.
Однако при всех различиях есть одна особенность, которая сближает MongoDB и реляционные базы данных. В реляционных СУБД встречается такое понятие как первичный ключ . Это понятие описывает некий столбец, который имеет уникальные значения. В MongoDB для каждого документа имеется уникальный идентификатор, который называется _id . И если явным образом не указать его значение, то MongoDB автоматически сгенерирует для него значение.
Каждому ключу сопоставляется определенное значение. Но здесь также надо учитывать одну особенность: если в реляционных базах есть четко очерченная структура, где есть поля, и если какое-то поле не имеет значение, ему (в зависимости от настроек конкретной бд) можно присвоить значение NULL . В MongoDB все иначе. Если какому-то ключу не сопоставлено значение, то этот ключ просто опускается в документе и не употребляется.
Коллекции
Если в традиционном мире SQL есть таблицы, то в мире MongoDB есть коллекции. И если в реляционных БД таблицы хранят однотипные жестко структурированные объекты, то в коллекции могут содержать самые разные объекты, имеющие различную структуру и различный набор свойств.
Репликация
Вся система MongoDB может представлять не только одну базу данных, которая располагается на одном физическом сервере. Функциональность MongoDB позволяет расположить несколько баз данных на нескольких физических серверах, и эти базы данных смогут легко обмениваться данными и сохранять целостность.
Система хранения данных в MongoDB представляет набор реплик. В этом наборе есть основной узел, а также может быть набор вторичных узлов. Все вторичные узлы сохраняют целостность и автоматически обновляются вместе с обновлением главного узла. И если основной узел по каким-то причинам выходит из строя, то один из вторичных узлов становится главным.
Формат данных в MongoDB
Одним из популярных стандартов обмена данными и их хранения является JSON (JavaScript Object Notation). JSON эффективно описывает сложные по структуре данные. Способ хранения данных в MongoDB в этом плане похож на JSON, хотя формально JSON не используется. Для хранения в MongoDB применяется формат, который называется BSON (БиСон) или сокращение от binary JSON.
BSON позволяет работать с данными быстрее: быстрее выполняется поиск и обработка. Хотя надо отметить, что BSON в отличие от хранения данных в формате JSON имеет небольшой недостаток: в целом данные в JSON-формате занимают меньше места, чем в формате BSON, с другой стороны, данный недостаток с лихвой окупается скоростью.
Кроссплатформенность
MongoDB написана на C++, поэтому ее легко портировать на самые разные платформы. MongoDB может быть развернута на платформах Windows, Linux, MacOS, Solaris. Можно также загрузить исходный код и самому скомпилировать MongoDB, но рекомендуется использовать библиотеки с офсайта.
Простота в использовании
Отсутствие жесткой схемы базы данных и в связи с этим потребности при малейшем изменении концепции хранения данных пересоздавать эту схему значительно облегчают работу с базами данных MongoDB и дальнейшим их масштабированием. Кроме того, экономится время разработчиков. Им больше не надо думать о пересоздании базы данных и тратить время на построение сложных запросов.
Но, даже учитывая все недостатки традиционных баз данных и достоинства MongoDB, важно понимать, что задачи бывают разные и методы их решения бывают разные. В какой-то ситуации MongoDB действительно улучшит производительность вашего приложения, например, если надо хранить сложные по структуре данные. В другой же ситуации лучше будет использовать традиционные реляционные базы данных. Кроме того, можно использовать смешенный подход: хранить один тип данных в MongoDB, а другой тип данных — в традиционных БД.
GridFS
Одной из проблем при работе с любыми системами баз данных является сохранение данных большого размера. Можно сохранять данные в файлах, используя различные языки программирования. Некоторые СУБД предлагают специальные типы данных для хранения бинарных данных в БД (например, BLOB в MySQL).
В отличие от реляционных СУБД MongoDB позволяет сохранять различные документы с различным набором данных, однако при этом размер документа ограничивается 16 мб. Но MongoDB предлагает решение — специальную технологию GridFS , которая позволяет хранить данные по размеру больше, чем 16 мб.
Система GridFS состоит из двух коллекций. В первой коллекции, которая называется files , хранятся имена файлов, а также их метаданные, например, размер. А в другой коллекции, которая называется chunks , в виде небольших сегментов хранятся данные файлов, обычно сегментами по 256 кб.
Для тестирования GridFS можно использовать специальную утилиту mongofiles , которая идет в пакете mongodb.
Руководство по базам данных MongoDB
MongoDB — это кроссплатформенная система управления базами данных, разработанная с целью хранения документов. Она входит в топ-10 аналогичных продуктов в мире. А её популярность объясняется удобством использования и открытым ПО.
В этой статье мы рассмотрим, как выполняется установка MongoDB, познакомимся с её концепцией, основными командами и запросами.
Терминология
Начать знакомство с продуктом стоит с 3 ключевых определений.
Привычные всем базы данных хранят записи. В MongoDB вместо них расположены документы, что позволяет структурировать сложную информацию.
Документ выглядит, как парные наборы ключей и значений. В свою очередь, ключ является меткой, к которой привязана какая-либо часть данных.
Отдельно выделяется термин первичный ключ. По аналогии с реляционными СУБД он описывает один столбец с уникальным значением. У каждого документа есть id — это шестнадцатеричное число, в котором 12 байтов. В них зашифрованы метка времени, идентификаторы компьютера и процесса на сервере. Если не указывать его вручную, MongoDB присваивает его автоматически.
Главным отличием от других продуктов считается возможность содержать в одном поле различные типы данных.
Так называют набор документов. Их можно сравнить с привычными таблицами в СУБД. Только в них могут размещаться объекты, отличающиеся друг от друга структурой и свойствами.
По сути, это физический контейнер для коллекций. В каждой из них свой набор файлов в файловой системе.
Особенность MongoDB заключается в возможности разместить несколько БД на разных серверах. Они способны обмениваться данными и сохранять целостность.
Особенности и преимущества MongoDB
Реляционная база данных всегда показывает количество таблиц и связи между ними. А в MongoDB таких связей нет. Поэтому в работе она довольно специфична. У неё отсутствуют сложные соединения и традиционная схема, за счёт чего сохраняется простая, логичная структура.
Кроме того, поддерживаются расширенные возможности запросов, в том числе динамические запросы документов.
База данных MongoDB характеризуется лёгкой масштабируемостью. Не нужно преобразовывать объекты приложения в объекты базы данных.
Для хранения используется внутренняя память, за счёт чего удаётся осуществляется быстрый доступ к информации.
Как установить MongoDB
Для начала нужно последнюю версию MongoDB скачать с официального сайта разработчика и следовать инструкциям. Для этого придётся заполнить форму, а после ввода данных перейти на вкладку «Server».
(6).png)
Для хранения файлов необходимо создать каталог, по умолчанию она расположен на c:\data\db. Для этого нужно вводить команду.
В mongod.exe указываем путь к новому каталогу dbpath. Затем в командной строке переходим к директории bin. Рассмотрим процесс на стандартном пути C:\Program Files\MongoDB (вы можете выбрать другой).
C:\Users\XYZ>d:cd C:\Program Files\MongoDB\Server\4.2\bin
C:\Program Files\MongoDB\Server\4.2\bin>mongod.exe —dbpath «C:\data»
Консоль сообщит об ожидании соединения. Это значит, что всё сделано правильно. Теперь нужно запустить MongoDB. Для выполнения этой задачи используется другая командная строка, где нужно ввести следующие строки.
MongoDB shell version v4.2.1
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { «id» : UUID(«4260beda-f662-4cbe-9bc7-5c1f2242663c») }
MongoDB server version: 4.2.1
Готово. В следующий раз для запуска потребуются только две простые команды.
C:\Program Files\MongoDB\Server\4.2\bin>mongod.exe —dbpath «C:\data»
Для запуска MongoDB в Ubuntu необходимо 7 команд.
Импорт публичного ключа GPG MongoDB
sudo apt-key adv —keyserver hkp://keyserver.ubuntu.com:80 —recv 7F0CEB10
echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’ | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
apt-get install mongodb-10gen = 4.2
sudo service mongodb start
sudo service mongodb stop
sudo service mongodb restart
Дополнительные команды можно узнать с помощью команды db.help(), которую нужно ввести в клиенте MongoDB. В ответ система выдаст подробный перечень.
(4).png)
MongoDB запросы
Этот термин подразумевает способ получения данных из базы данных MongoDB. Они похожи на SQL-запросы на языке баз данных SQL, то есть можно указывать критерии или условия.
Запрос Find
Метод find() показывает коллекцию базы данных в неструктурированной форме
При этом применяется автоматически созданный ключ, идентификатор. Так мы можем увидеть все присутствующие в коллекции документы.
Для поиска одного конкретного документа актуален другой метод – findOne()
(5).png)
Метод pretty() показывает документы в форматированном, понятном и логичном виде.
Существуют запросы с равным фильтром для сравнения документов.
(4).png)
Запросы с условием
Можно задавать конкретные числовые параметры.
Запросы в массивах
С помощью запросов можно выделять документы, которые соответствуют всем заданным выражениям в массиве.
Запросы с ограничением
Метод limit() нужен для указания максимального количества документов для возврата курсором. Например, если нужно ограничиться тремя запросами, строка будет выглядеть так.
db.artists.find( { albums: { $exists: false }} ).limit(3)
Регулярные выражения
Регулярными выражениями называют обобщенный способ сопоставления шаблонов с последовательностями символов.
Например, нам нужно найти информацию о сотруднике, имя которого начинается с буквы B. Запрос будет выглядеть так.
Вывод
MongoDB – очень востребованная база данных с открытым исходным кодом, которая предназначена для хранения документов. Причём её можно использовать одновременно на нескольких серверах, что является её особенностью и преимуществом.
Установить и запустить MongoDB просто. А для использования команд и запросов необходимы навыки и знания в сфере информационных технологий. При этом специалистам будет легко разобраться в конфигурации и синтаксисе.
В чем разница между MongoDB и MySQL?

MongoDB и MySQL – это две системы управления базами данных, которые можно использовать для хранения данных и управления ими. MySQL – это реляционная база данных, в которой данные хранятся в структурированном табличном формате. В отличие от нее, MongoDB хранит данные в виде документов JSON в более гибком формате. Оба типа баз данных обеспечивают эффективность и масштабируемость, но наилучшие показатели их работы соответствуют различным вариантам использования.
В чем сходство между MongoDB и MySQL?
И MySQL, и MongoDB являются системами управления базами данных. Они хранят данные и имеют встроенный пользовательский интерфейс и язык запросов, что позволяет добавлять, редактировать, изменять и анализировать данные.
Лицензии с открытым исходным кодом
MySQL и ранние версии MongoDB имеют лицензии с открытым исходным кодом. Версии с открытым исходным кодом можно скачать бесплатно. Затем вы можете изменить код в зависимости от того, что вам нужно с ним делать.
На MySQL распространяется лицензия General Public License GNU. Все версии MongoDB, выпущенные до 16 октября 2018 г., доступны под лицензией GNU Affero General Public License.
Поддержка индексирования
MySQL и MongoDB используют индексацию для повышения скорости и производительности запросов. Индексы – это структуры баз данных, которые связываются с часто используемыми данными. Индекс помогает очень быстро находить и извлекать данные.
Платформы баз данных MySQL и MongoDB используют хэш-индексы, индексы B-дерева и ряд других.
Удобные интерфейсы
MongoDB и MySQL просты в использовании. Они предлагают язык запросов на основе естественного языка для обновления и чтения данных. Они также предлагают графический пользовательский интерфейс (GUI) для более визуального управления данными и их анализа.
Языки программирования
MySQL и MongoDB совместимы с несколькими одинаковыми языками программирования. Можно использовать Java, Python, Node.js, PHP на стороне сервера, Ruby и C# как с MongoDB, так и с MySQL.
Безопасность
MySQL и MongoDB используют аутентификацию, контроль доступа и шифрование для гарантии безопасности своих баз данных. Они используют шифрование TLS/SSL для защиты данных в движении и в местах хранения. Они также позволяют определять различные уровни доступа пользователей.
Документация и поддержка сообщества
MySQL и MongoDB содержат подробную официальную документацию на своих сайтах. Их пособия, руководства и справочники предлагают полные инструкции по установке, настройке и выполнению оперативных задач.
У MongoDB и MySQL также есть активное сообщество разработчиков, в котором вам ответят на вопросы и помогут в устранении неполадок. Оба решения также предлагают корпоративные версии со специальной поддержкой, отвечающей вашим конкретным требованиям.
Ключевые отличия MongoDB и MySQL
MySQL – это система управления реляционными базами данных, а MongoDB – это система баз данных NoSQL. Подробнее об этом можно прочитать в разделах Что такое реляционная база данных? и Что такое NoSQL?.
MySQL использует SQL, с которым большинство разработчиков знакомы. И наоборот, MongoDB использует язык запросов MongoDB (MQL). Хотя между MQL и SQL есть сходство, для изучения языка MQL обычно требуется дополнительные усилия.
Далее мы рассмотрим некоторые другие ключевые отличия.
Модель данных
MySQL – это реляционная система баз данных, которая хранит данные в столбцах, строках и таблицах. Данные хранятся в строках, причем каждый столбец представляет разные типы данных. Затем вы определяете отношения между данными с помощью внешних и первичных ключей. Каждая таблица содержит первичный ключ, который используется для ее идентификации, а внешний ключ создает связь.
MongoDB – это документно-ориентированная база данных, в которой все данные хранятся в виде двоичных документов JSON (BSON). BSON позволяет сериализовать множество форм данных. Использование документов BSON позволяет хранить неструктурированные, полуструктурированные и структурированные данные. Вместо схемы базы данных MongoDB использует гибкий подход, сохраняя документы в коллекциях.
Масштабируемость
В системе баз данных MySQL доступные варианты масштабирования ограничены. Вы можете выбрать один из следующих вариантов:
- Вертикальная масштабируемость за счет добавления дополнительных ресурсов к текущему серверу баз данных
- Репликация чтения путем создания копий базы данных, доступных только для чтения, на других серверах
Репликация чтения ограничена максимум пятью копиями. Реплики также могут отставать от основной копии, что приводит к масштабным проблемам с производительностью. Вертикальная масштабируемость также ограничена используемой инфраструктурой.
Напротив, конструкция MongoDB дает значительное преимущество с точки зрения масштабируемости. Решение имеет две ключевые функции для масштабирования:
- Наборы реплик – группы серверов MongoDB, содержащие идентичные данные
- Сегментирование – разные части данных, распределенные по разным серверам
MongoDB позволяет создавать сегментированные кластеры, поэтому части ваших данных реплицируются на нескольких серверах. Например, если у вас есть большое количество записей о клиентах, вы можете распределить их так, чтобы имена от A до J и имена от K до Z находились в собственном наборе реплик. Таким образом, MongoDB может масштабироваться по горизонтали для оптимизации производительности чтения и записи в нужном масштабе.
Производительность
Решение MySQL предназначено для высокопроизводительных объединений нескольких таблиц, которые надлежащим образом проиндексированы. Однако требуется вставлять данные по строкам, поэтому скорость записи снижается.
Документы MongoDB следуют иерархической модели данных и хранят большую часть данных в одном документе, что снижает необходимость объединения нескольких документов. Соединения поддерживаются операцией $lookup, но они не оптимизированы для повышения производительности. Однако MongoDB предлагает API insertMany() для быстрой вставки данных с приоритетным вниманием производительности записи.
Гибкость
Как система управления реляционными базами данных, MySQL имеет более жесткую структуру, чем MongoDB. MySQL использует фиксированную схему и организует данные в строку и таблицу. Чтобы использовать MySQL, необходимо структурировать данные и поместить их в табличную систему.
Сохраняя данные в виде документов JSON, MongoDB позволяет создавать сложные приложения с различными типами данных. Например, вы можете создавать новые поля, обновляя поля вложенного массива. Можно также использовать конвейер агрегирования – функцию MongoDB, которая позволяет преобразовывать данные, объединяя несколько операций в один рабочий процесс.
Контроль доступа
В MongoDB вы можете управлять доступом на уровне операции, коллекции или базы данных. Для аутентификации пользователей используются сертификаты Kerberos, X.509 и LDAP. Напротив, MySQL позволяет ограничить доступ пользователей на уровне пользователя, базы данных и таблицы. MySQL использует собственную систему аутентификации. Она представляет собой дополнительную уязвимость безопасности при атаках с внедрением SQL-кода, которой позволяет избежать подход MongoDB без схем.
Когда использовать MongoDB и MySQL
Формат хранения данных в MySQL делает его пригодным для хранения данных и аналитической обработки в режиме онлайн. Он совместим с ACID, что означает, что транзакции атомарны, последовательны, изолированы и долговечны. Поэтому решение MySQL полезно при работе со сложными транзакциями, например в электронной коммерции, транзакциях и финансах.
Высокоструктурированные данные и индексация MySQL также подходят для специальных запросов. Специальные запросы обычно выполняются конечными пользователями или аналитиками данных, которым требуется быстрый доступ к данным, недоступным в стандартных отчетах или запросах.
С другой стороны, MongoDB – это база данных NoSQL. Это более удобно при работе с неструктурированными данными в таких случаях использования, как социальные сети, СМИ или Интернет вещей (IoT). Поскольку у MongoDB нет схемы, это хороший выбор для работы с постоянно меняющимися и расширяющимися данными.
MongoDB
MongoDB — это документоориентированная система управления базами данных, которая не требует описания схемы таблиц. Считается одним из классических примеров NoSQL-систем, использует JSON-подобные документы и схему базы данных. Написана на языке C++.


Освойте профессию
«Fullstack-разработчик на Python»
MongoDB имеет открытый исходный код, она бесплатная и доступна любому разработчику. СУБД подходит для операционных систем семейства Linux, Windows и macOS. Ей можно пользоваться в облаке. Название читается как «Монго-ДБ».
Кто пользуется MongoDB
- Бэкенд-разработчики веб-приложений и сайтов. В основном СУБД MongoDB используется в веб-программировании.
- Специалисты в области Big Data и аналитики, которые работают с большим количеством не связанной друг с другом информации.
- Разработчики в стартапах, где четко не определена структура хранения данных — в любой момент может потребоваться ее изменение.
- DevOps-инженеры — иногда знание MongoDB может быть необходимо при работе с инфраструктурой проекта.
Профессия / 8 месяцев
IT-специалист с нуля
Попробуйте 9 профессий за 2 месяца и выберите подходящую вам

Для чего нужна MongoDB
- Хранение данных, которые не жестко связаны между собой.
- Управление данными: создание новых записей, их редактирование, удаление, контроль версий.
- Получение данных с помощью запросов без использования SQL.
- Отправка транзакций — последовательностей из нескольких запросов, которые выполняются один за другим.
- Быстрый, удобный и простой доступ к данным.
- Контроль доступа и поддержки безопасности данных.
- Выдача прав разным категориям пользователей.
- Поддержка базы в актуальном состоянии, в том числе при одновременном доступе с нескольких клиентов.
Отличие от реляционных баз данных
В реляционной базе данных информация представлена как набор связанных между собой таблиц. Доступ к данным осуществляется с помощью запросов на языке SQL. Реляционная модель — традиционная, ее используют чаще всего. Но для многих задач она неоптимальна, например, если связи между разными данными не жесткие.
В MongoDB реализована система, при которой данные хранятся в «табличных» документах форматов, близких к JSON. Информация записывается в виде пар из ключей и значений — как в таблице, в которой есть идентификаторы и соответствующие им данные. Благодаря такому формату в MongoDB можно разместить очень разнообразную и сложно структурированную информацию: документ — более гибкая структура.

При работе с такими базами SQL не используется, отсюда название NoSQL. Вместо него применяют языки программирования. В случае с MongoDB это JavaScript. Существуют драйверы для поддержки других популярных языков: Python, Java, C/C++, Go, PHP, Ruby и прочих.
Как устроено хранение данных в MongoDB
Вместо традиционных понятий таблиц и полей в MongoDB используются свои сущности. Они отличаются от принятых в реляционных базах данных, но во многом схожи.
_id. Это идентификатор, который должен быть в каждом документе. Он помогает обращаться к тем или иным данным, по нему записи отличают друг от друга. Идентификатор создается автоматически, если его не задает программист при создании нового документа. В реляционных базах тоже есть идентификатор, но он называется иначе — первичный ключ.
Поле. Это одна запись в документе, если точнее, один ключ, метка, которой соответствует определенный набор данных. Понятие можно сравнить со столбцом в таблице реляционной базы. Например, если документ описывает данные о нескольких собаках, то в нем могут быть поля «Порода», «Кличка», «Возраст» и другие.
Описанный выше идентификатор — одно из полей, которые есть в документе, причем обязательное.
Документ. Один документ — это файл в формате BSON: название расшифровывается как binary JSON, или бинарный JSON. Отличие от стандартного JSON в том, что формат работает еще быстрее, но файлы в нем занимают меньше места.
В документе хранятся однотипные строго структурированные записи: ключи и значения. Выше мы привели пример с собаками: если документ посвящен им, то в нем будет только определенная информация о собаках и ничего другого. Его можно сравнить со строкой в таблице реляционной базы данных. Но в отличие от строки документ может хранить сложную по структуре информацию, а еще он более гибкий — для отдельных записей можно, например, опускать те или иные поля.
Максимальный размер документа — 16 Мб. Для сохранения данных большего размера используется технология GridFS, о которой мы поговорим ниже.
Коллекция. Вместо таблиц в MongoDB используются коллекции. Это наборы из документов. В одном наборе могут храниться документы с разнообразными данными — это главное отличие от таблиц. Коллекция разнородна, документы внутри нее могут различаться структурой, размером, значениями и связями. Поэтому MongoDB считается отличным выбором для хранения слабо структурированной информации.
Встроенный документ. В базах данных, которые управляются SQL, есть операция JOIN, объединяющая между собой сведения из разных таблиц. В MongoDB другая структура: обычно все находится внутри одной коллекции, а операции JOIN не предусмотрено. Для связей и разделений используются встроенные документы — структуры встраиваются друг в друга.
База данных. Так называется общее хранилище, где находятся коллекции, в которых, соответственно, расположены документы. У баз в MongoDB есть интересная особенность: когда база создана, но в нее ничего не записано, она де-факто не существует. Это отличает ее от пустых реляционных баз, которые существуют, даже если в них ничего нет.

Станьте дата-сайентистом и решайте амбициозные задачи с помощью нейросетей
Особенности MongoDB
Индексация. Данные внутри базы можно индексировать — так система быстрее найдет к ним доступ. Для данных создаются индексы, специальные объекты, которые хранят указатели на ту или иную информацию: обычно это конкретные значения и ссылки на них. Благодаря индексам можно реализовать поиск по базе, он не будет выглядеть как простой перебор всех данных. Это ускоряет работу системы.
Репликация. Так называется возможность работы с репликами — копиями базы данных. Можно иметь несколько связанных друг с другом копий БД на разных серверах, и одна из них будет главной, а остальные — вспомогательными. Изменения сначала будут вноситься в главную базу, а потом передаваться другим. В итоге, если с основной копией что-то случится, любая существующая реплика сможет ее заменить — так в системе поддерживается стабильность. Замена происходит автоматически.
Сегментирование. Репликация — не единственный способ хранить базу MongoDB на разных серверах. Система поддерживает сегментирование, то есть разделение базы данных на отдельные сегменты и их распределение по разным серверам. Это позволяет балансировать нагрузку на мощности. Принцип разбиения определяет администратор, поэтому распределение по разным частям серверного кластера тоже можно спланировать.
Запросы ad hoc. Латинские слова означают «специально для этого», поэтому такие запросы еще называют специальными. Одна из особенностей MongoDB — гибкая поддержка разнообразных запросов. СУБД принимает запросы на поиск по разным полям, работает с функциями JavaScript и может возвращать пользовательские функции в ответ на запрос. Она поддерживает регулярные выражения. MongoDB позволяет получить в качестве ответа диапазон или случайное значение — запросы могут быть в том числе очень сложными.
Grid File System. Сокращенно эта технология называется GridFS, мы упоминали ее выше. Речь шла о том, что максимальный размер документа в MongoDB — 16 Мб, а технология применяется, если нужно сохранить в базу более объемные данные. По сути, это то же сегментирование, но в рамках документа. Массивные данные хранятся в двух коллекциях: files и chunks:
- files — коллекция, в которой находятся сведения о файлах. Это их имена и метаданные, содержащие информацию об объеме и других параметрах;
- chunks — коллекция, где хранятся сами файлы, но не целиком, а разбитые на небольшие сегменты. Размер каждого сегмента обычно 256 Кб, но эта цифра может меняться.
Благодаря такому разделению на маленькие составные части в базе можно хранить даже очень большие файлы. Это позволяет обойти максимальный размер документа в 16 Мб.
Преимущества MongoDB
Быстрая работа. Благодаря структуре документов, поддержке индексации и другим особенностям MongoDB работает быстро, без задержек. База производительна, часто используется во внутренних системах, на сайтах — там, где скорость имеет значение.
Гибкость. MongoDB позволяет хранить разнородные данные, поэтому она гибкая и легко адаптируется под разнообразные задачи. Например, если информация не укладывается в общую структуру или собирается разными способами и сильно различается, MongoDB все равно позволит успешно хранить ее и получать доступ.
Легкая масштабируемость. Причина, по которой MongoDB пользуются стартапы и небольшие компании, — возможность быстро и легко масштабировать систему. Если информация в базе должна измениться, например, планируется добавить новое поле, не нужно радикально перекраивать структуру всей БД. Это возможно благодаря документно-ориентированной модели и особому формату данных.
Отсутствие сложных соединений. В MongoDB не нужно описывать схему таблиц. Конструкции вроде JOIN не используются. В реляционных базах JOIN соединяет между собой данные из разных таблиц, но при документно-ориентированной модели необходимость в таких соединениях отсутствует.
Возможность работы на нескольких серверах. Это возможно благодаря механизмам репликации и сегментирования. Первый позволяет создавать работающие копии базы, которым в любой момент можно передать управление; второй помогает грамотно распределять нагрузку. Такие возможности делают работу системы стабильнее и снижают риск отказа базы в важный момент.
Недостатки MongoDB
Отсутствие хранимых процедур и функций. Хранимые процедуры — это возможность реляционных баз данных: разработчик один раз пишет набор команд на языке SQL, сохраняет его, а потом может вызвать в любой момент. Получается подобие скрипта, который выполняется по команде. Поддержка хранимых процедур в MongoDB не предусмотрена, и это не дает в полной мере автоматизировать работу с БД.
Пользовательские функции, или UDF, похожи на хранимые процедуры, но различаются особенностями сохранения и вызова. Их можно реализовать самостоятельно — функции, написанные на JavaScript, сохраняются с помощью специальной команды и позднее используются снова. Правда, это сложнее, чем возможность работать с ними «из коробки».
Неполное соответствие ACID. ACID — это набор принципов для баз данных, соответствие которым делает систему стабильной и предсказуемой. Принципов всего четыре: атомарность, согласованность, изолированность, устойчивость. MongoDB, в отличие от распространенных реляционных СУБД, соответствует им не полностью. До версии 4.0 система не отвечала требованиям атомарности — они требуют, чтобы никакая транзакция не «зависала» в системе завершенной не до конца. В более поздних версиях это исправили.
Сложности с транзакциями. Документно-ориентированный подход дает много плюсов, но из-за него сначала было затруднительно работать с транзакциями. В старых версиях их ACID-реализации не было, поэтому многие считали, что при NoSQL-подходе транзакции отсутствуют в принципе. Позже они появились, но работа по-прежнему имеет специфику.
Трудности при работе с жестко связанными данными. У разных документов внутри коллекции может быть совершенно различная структура, и сами коллекции не обязаны походить друг на друга. Это упрощает хранение слабо связанной информации, но если данные имеют жесткие связи между собой, подход перестает быть удобным. В этих ситуациях лучше отдавать предпочтение традиционным СУБД, которые работают с SQL.
Как начать работу с MongoDB
- Скачать MongoDB на официальном сайте проекта, где компания представляет СУБД и другие решения, в том числе коммерческие. Можно воспользоваться официальным репозиторием MongoDB на GitHub или пакетным менеджером. В macOS это brew, в Linux — apt-get и другие.
- Скачать MongoShell — шелл-оболочку, которая позволяет отдавать команды. Она скачивается отдельно и тоже есть на официальном сайте.
- Установить MongoDB и шелл-оболочку на сервер, где будет храниться база. В реальных проектах обычно это арендованные на хостингах мощности. Создать тестовую базу данных для тренировки можно и на собственном устройстве.
Взаимодействие с базой обычно происходит через терминал. Можно подключить модули для поддержки разных языков программирования, но по умолчанию язык запросов для MongoDB — это JavaScript. Операторы, с помощью которых управляют базой данных MongoDB, основаны на нем.
Fullstack-разработчик на Python
Fullstack-разработчики могут в одиночку сделать IT-проект от архитектуры до интерфейса. Их навыки востребованы у работодателей, особенно в стартапах. Научитесь программировать на Python и JavaScript и создавайте сервисы с нуля.

Статьи по теме: