Абсолютно все проекты сводятся к тому, что нужно где-нибудь хранить данные, чтобы потом управлять ими. Большинство программистов знают язык структурированных запросов SQL используемый для работы с информацией в реляционных базах данных, например в MySQL.

Использование альтернативных систем хранения и управления данными наводит на вопрос: а насколько они хороши и работают ли на практике, так как необходимо? Одной из таких альтернатив является система управления базами данных MongoDB.

Реляционные СУБД используются огромным количеством программистов, а также во многих крупных компаниях, так как зарекомендовали себя как качественное и производительное решение для хранения и управления данными. Необходимость использования транзакций делает реляционные БД очень подходящим выбором для интернет-магазинов, где производятся денежные операции.

История MongoDB

MongoDB – это система управления базами данных имеющая документную модель хранения данных. Документно-ориентированная модель позволяет хранить и управлять иерархически организованными структурами данных.

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

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

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

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

lOgen сделало MongoDB проектом с открытым исходным кодом. Хоть разработкой ядра системы и занимаются исключительно сотрудники компании, каждый желающий может сообщать о найденных ошибках и предлагать их исправление. Поддержку и обслуживание СУБД для конечных пользователей компания осуществляет за абонентскую плату.

Основные особенности MongoDB

  • Высокая производительность
  • Высокая скорость чтения и записи данных
  • Простая масштабируемость
  • Надежность хранения данных

Крупные проекты используемые MongoDB

  • Expedia
  • Forbes
  • Bosch
  • AstraZeneca
  • MetLife

И многие другие…

Хранение данных

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

Данные в документах хранятся в JSON подобной структуре, состоящей из ключей и значений, в двоичном формате BSON. Кроме этого данные в документах являются единым целым и с ними можно работать как с объектом. Например, если в реляционной базе данных посты, категории, комментарии хранятся в нескольких таблицах, то в документной базе все данные можно хранить единым целым в одном документе.

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

Индексы

Индексы в MongoDB работают также как в реляционных базах. Вторичные индексы сделаны в виде B-деревьев. Допускается использование нескольких вторичных индексов для оптимизации выполнения запросов. Поддерживаются такие индексы, как: по возрастанию, убыванию, с  составным ключем, уникальные.

Репликация

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

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

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

Набор реплик изначально имеет один первичный узел и несколько вторичных

первичный узел и вторичные узлы

Первичный узел вышел из строя, один из вторичных узлов занимает место первичного.

первичный узел вышел из строя

Вышедший из строя первичный узел восстанавливается и становится вторичным.

первичный узел стал вторичным

Таким образом, MongoDB позволяет использовать простой способ  горизонтального масштабирования – распределения данных по нескольким узлам.  В случае вертикального масштабирования приходится наращивать пропускную способность дисковых систем, ставить дополнительную оперативную память и т.п. Однако этот способ не очень надежный и слишком дорогой.

MongoDB очень интересная и обширная тема, которую понять и изучить одной статьей нельзя. Поэтому на данном моменте у меня все, возможно будет следующие статьи об этой базе данных :)