Найти в Дзене
hoster.by

Как устроена и что умеет СУБД MongoDB

Далеко не все данные совместимы с таблицами. Например, важная для проекта информация может храниться в документах. Именно для таких случаев и предусмотрены NoSQL СУБД, среди которых одной из самых популярных стала MongoDB. Рассказываем, как она устроена, для каких данных подходит и на каких проектах используется. Почему возник спрос на NoSQL Термин NoSQL впервые был озвучен в 1998 году Карло Строцци, который разрабатывал собственную нереляционную СУБД. Тогда табличные базы применялись уже более 20 лет. Диджитализация продолжала набирать обороты. Появлялись новые типы данных, а следовательно — и способы их хранения. К тому же созданию альтернативных СУБД способствовали и определенные тенденции. Потребность в распределённых СУБД. Появление транснациональных компаний, социальных сетей и глобальных онлайн-сервисов требовали обработки различных типов данных и, конечно, масштабирования БД. Но модернизировать оборудование — дорого, а сегментировать данные по разным нодам — сложно. Необходим

Далеко не все данные совместимы с таблицами. Например, важная для проекта информация может храниться в документах. Именно для таких случаев и предусмотрены NoSQL СУБД, среди которых одной из самых популярных стала MongoDB. Рассказываем, как она устроена, для каких данных подходит и на каких проектах используется. Почему возник спрос на NoSQL Термин NoSQL впервые был озвучен в 1998 году Карло Строцци, который разрабатывал собственную нереляционную СУБД. Тогда табличные базы применялись уже более 20 лет. Диджитализация продолжала набирать обороты. Появлялись новые типы данных, а следовательно — и способы их хранения. К тому же созданию альтернативных СУБД способствовали и определенные тенденции. Потребность в распределённых СУБД. Появление транснациональных компаний, социальных сетей и глобальных онлайн-сервисов требовали обработки различных типов данных и, конечно, масштабирования БД. Но модернизировать оборудование — дорого, а сегментировать данные по разным нодам — сложно. Необходимость ускорения обработки данных. Команда SQL запрашивает информацию из нескольких связанных таблиц. И чем больше таких таблиц, записей и взаимосвязей, тем дольше может обрабатываться каждый отдельный запрос. Потребность в более гибких подходах. Вместе с четкой структурированностью реляционные СУБД обладают и жестким регламентом в работе с информацией. И за счет этого могут быть несовместимы с какими-то типами данных или методами их обработки. А это может приводить к избыточному числу таблиц или невозможности адаптировать бизнес-логику приложения к структурированному формату. Подход NoSQL охватывает альтернативные реляционным типы СУБД: графовые, колоночные, «ключ — значение» и документные. Как раз к последним и относится MongoDB, которая стала одной из наиболее популярных NoSQL БД. Как устроена MongoDB В ответ на потребность в более гибких и масштабируемых базах данных в 2007—2009 годах была разработана MongoDB. Постепенно она обрела популярность и стала подходящим решением для анализа множества не связанных данных и других задач, слабо совместимых с реляционными СУБД. MongoDB — это бесплатная документная СУБД, созданная на C++. Она подходит для хранения неструктурированных и частично структурированных данных в формате JSON: текстовых и музыкальных файлов, картинок. А еще совместима с большими данными и слабо связанными структурами. В отличие от реляционных СУБД MongoDB не требует распределения записей по ячейкам. Хотя некоторая перекличка с организацией табличных сведений у нее все же есть. А потому, пускай и с оговорками, но обработать строго упорядоченные данные она тоже сможет. MongoDB состоит из коллекций, документов, полей вида «ключ—значение» и некоторых других элементов. Коллекции содержат документы и представляют своеобразный аналог таблиц из реляционных СУБД. Главное отличие в том, что одна коллекция может содержать документы с различными данными. Документы представляют собой файлы формата BSON — бинарной разновидности JSON. Они могут отличаться по размеру и наличием или отсутствием определенных полей. При этом в каждом документе хранятся записи определенного типа. Например, сведения о клиентах, заказах или товарах — по аналогии со строками в SQL-СУБД. Поле — тип записи в документе формата ключ — значение. Например, документ «Клиент 159» может включать поля с id, именем, датой регистрации и другими. Напоминает ячейки в реляционных СУБД, не так ли? ObjectId — идентификатор документа, который делает записи уникальными. Может быть создан вручную или автоматически системой. ObjectId состоит из 12 байтов в виде 24-значной шестнадцатеричной строки. Вот сгенерированный пример: 1234567890abcdefabcd. На практике этот набор байтов и символов включает временную метку, идентификатор устройства и процесса, а также счетчик. Для наглядности рассмотрим пример организации данных в MongoDB. Так, коллекция из двух документов о клиентах Ivan и Maria может выглядеть следующим образом: { "_id": ObjectId("1234567890abcdefabcd "), "name": "Ivan", "age": 30, "email": "ivan@example.com", "address": {, "city": "Maintown", }, }, { "_id": ObjectId (" abcdef0123456789abcd "), "name": "Maria", "age": 27, "address": { "street": "456 Nice St", "city": "Maintown", "state": "CA", }, "phone_number": "987-65***, } В файле Ivan не указана улица и отсутствует номер. А в документе Maria нет почты, зато есть номер телефона. Это пример того, как в MongoDB можно хранить частично заполненные данные без следования строгой структуре. Особенности MongoDB Совместимость с различными ОС. MongoDB можно запускать на Linux, Windows и macOS. Выполнение команд. Для отправки запросов в MongoDB по умолчанию используется JavaScript. Но при помощи специальных драйверов можно реализовать совместимость с Python, Java, C/C++ и другими популярными языками программирования. Поддержка индексов. Когда коллекции содержат тысячи и миллионы документов, поиск нужных данных может занять время. Но при помощи индексов можно упорядочить записи по определенному полю и быстрее найти нужные сведения. Например, если поиск чаще выполняется по полю email, то и индексировать коллекцию можно по нему. Возможность репликации. MongoDB поддерживает создание отказоустойчивой системы с развертыванием баз на нескольких серверах. Тогда один из них играет роль главного, а остальные — вспомогательных. И в случае сбоя на основном сервере, его подменяет одна из реплик. Сегментирование. Для балансировки нагрузки и повышения производительности данные можно также разделить на составные части и распределить их по разным серверам. GridFS (Grid File System). По умолчанию документы в MongoDB ограничены объемом в 16 Мб. Обойти этот лимит помогает технология GridFS, которая сегментирует файлы и распределяет их между двумя коллекциями: files и chunks. в files хранятся сведения о файлах: имена и метаданные со сведениями об объеме и других параметрах; а в chunks — сами документы, разбитые на сегменты обычно объемом в 256К, однако этот параметр можно скорректировать. Специальные запросы. В MongoDB можно искать документы по разным полям с использованием операторов и условий. Поддерживается поиск по точным значениям, диапазонам, условиям и регулярным выражениям. А еще могут использоваться функции, например JavaScript. При этом в MongoDB можно создавать запросы, которые не требуют предварительной подготовки схемы и могут включать сложные условия и фильтры. Преимущества и недостатки Высокая скорость. Особенности структуры, поддержка индексов и другие возможности обеспечивают СУБД MongoDB быстрое выполнение команд и высокую производительность. Гибкость. В MongoDB можно хранить и получать доступ к данным различного типа и объема, полученным разными способами и не имеющим единой структуры. Удобное редактирование. При добавлении новой информации или полей не нужно серьезно переделывать структуры базы. Можно хранить и обрабатывать неполные данные без единого стандарта наполнения для всех объектов. Отказ от сложных связей. Не нужно составлять схему таблиц и логику взаимодействия связей из разных таблиц, как в реляционных СУБД. Из преимуществ для одних задач плавно вытекают и недостатки для других. И в основном они связаны со структурированной информацией. Если у проекта жесткая бизнес-логика, а между данными о клиентах, товарах и заказах нужны взаимосвязи, MongoDB будет уступать реляционным СУБД. Например, поддержка транзакций появилась только в версии 4.0. А отсюда вытекает и сложная реализация соответствия требованиям ACID. Сценарии использования В целом MongoDB применима в сферах, где нужно обрабатывать большое количество не связанной информации. Или, например, на старте проекта, когда данные уже накапливаются, а логика их хранения еще не определена. При этом за счет особенностей и преимуществ MongoDB ее можно эффективно использовать в решении различных задач: управление контентом и ведение каталогов сайтов хранение событий и записи данных с датчиков мониторинга для данных интернета вещей, видеоигр и множество других приложений, работающих с неструктурированными данными в работе сервисов, обрабатывающих временные ряды Как эффективно развернуть MongoDB Локальная инфраструктура, облачные и выделенные серверы — всё это возможные сценарии для работы с MongoDB. А еще можно воспользоваться защищенным DBaaS и обеспечить данным ряд преимуществ. Аттестованный контур. Хранение и обработка данных в соответствии с требованиями законодательства о защите информации. Возможность прохождения аттестации СЗИ. Подход DBaaS. Database as a Service — это сервис, специально настроенный и оптимизированный для удобной работы с БД. Удобный интерфейс. Развернуть базу и управлять ей можно прямо в личном кабинете. И для этого не нужны глубокие технические навыки. Сокращение расходов. Экономия на покупке и обслуживании собственного оборудования. Оплата только используемых ресурсов. Гибкое масштабирование. Возможность в любой момент увеличить параметры конфигурации: количество ядер CPU, объем RAM и дискового пространства. Высокая надежность. Автоматические резервные копии и возможность создания отказоустойчивого кластера из нескольких нод для работы БД. Хотите совместить высокую гибкость, производительность и защищенность с удобным управлением? Это легче, чем кажется. Оставляйте заявку и запускайте СУБД всего в пару кликов! ]]>