На тему NoSQL написано достаточно много статей и книг. В отличие от SQL-баз данных, в которых используются таблицы, базы данных NoSQL могут использовать такие модели, как пары ключ‑значение, документо-ориентированную модель или графы. Такая гибкость выгодна для работы с различными типами данных и большими объемами информации, особенно когда приоритетами стратегии управления данными являются высокая масштабируемость и простота конструкции. Термин "NoSQL" часто означает «не только SQL», чтобы подчеркнуть его взаимодополняемость, а не противопоставление SQL.

Ключевой особенностью баз данных NoSQL является их способность к горизонтальному масштабированию. Это означает добавление большего числа машин в кластер, а не наращивание аппаратного обеспечения одной машины. Это свойство полезно для компаний, испытывающих экспоненциальный рост данных. Базы данных NoSQL также обеспечивают высокую доступность и производительность, что делает их подходящими для использования в приложениях, где время безотказной работы и время отклика имеют решающее значение.

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

Проблема выбора

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

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

Прежде всего необходимо четко понимать, какую проблему вы хотите решить, уточните, какие возможности и функциональность должен предоставлять инструмент. Возможно, для вас больший приоритет будет иметь скорость записи данных в таблицы. Например, БД в системах мониторинга — в них могут сохраняться тысячи событий в секунду. В других случаях, наоборот, более важны операции быстрого чтения данных.

Следующий важный вопрос — кто будет работать с системой? Какое решение вы будете применять — бесплатное или проприетарное? Вам необходимо определить, будет ли доступ к платформе нужен только команде по работе с данными или всей организации. Когда это станет ясно, стоит подумать, что для вас приоритетнее — простота использования для всех или скорость для опытных технических пользователей.

Важно понимать, с какими инструментами будет работать ваша БД, с чем именно придется интегрироваться. Сюда можно отнести существующую инфраструктуру данных, различные источники данных и общий технологический стек. Вам также может понадобиться решить, должны ли инструменты интегрироваться друг с другом, или, наоборот, можно ли заменить несколько инструментов одной консолидированной NoSQL‑базой данных.

Ещё один важный критерий, про который иногда забывают, это какой результат должен дать инструмент, чтобы считаться успешным. Подумайте, какие возможности вы хотите получить от используемого решения или что хотите улучшить, и как вы будете измерять успех. Вы можете очень долго сравнивать возможности баз данных NoSQL, составляя различные таблицы с функциями и сравнивая значения столбцов, но если вы не думаете о результатах, которые вы хотите получить, вы можете потерять много драгоценного времени.

Также важно понимать, как выбранное решение будет работать в вашей организации — рассмотрите решения вместе с вашими рабочими процессами и методологией управления данными. Наличие отлаженного работающего конвейера CI/CD, микросервисы, контейнеры и многое другое — всё это важно учитывать при выборе решения, так как последующая интеграция может вызвать сложности при использовании выбранной БД.

Оцените, что работает хорошо, а в каких областях возникают проблемы, требующие решения. Помните, что каждый бизнес индивидуален — не стоит полагать, что если инструмент популярен, то он будет хорошо работать и в вашей организации.

Например, несмотря на все преимущества NoSQL, эту БД не стоит использовать для банковских транзакций, так как блокировка записей может стать серьёзной проблемой.

Определившись с критериями, рассмотрим наиболее распространённые решения NoSQL.

MongoDB

Начнём с одного из наиболее популярных решений — MongoDB. Это документоориентированная (document‑based) база данных с открытым исходным кодом. Она может хранить структурированные данные в популярном формате JavaScript Object Notation (JSON) или в собственном формате Binary JSON (BSON). BSON может хранить больше типов данных, чем JSON, и кодировать тип и длину фрагмента информации, что облегчает машинный разбор (преобразование форматированного текста в определённую структуру данных).

Документоориентированные NoSQL базы данных хранят данные в виде документов, где пары ключ‑значение сохраняются. Эти документы далее группируются в коллекции на основе их содержимого и использования.

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

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

Для установки MongoDB нужно выполнить следующие действия:

Импортировать публичный ключ:

curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc |   sudo gpg –o \ /usr/share/keyrings/mongodb-server-8.0.gpg    --dearmor

Создать список файлов:

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

И затем выполнить установку:

sudo apt-get update

sudo apt-get install -y mongodb-org

Для запуска процесса mongod выполним следующее:

sudo systemctl enable mongod

sudo systemctl start mongod

Убедиться в работоспособности инсталляции можно с помощью:

$ mongosh

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

К минусам можно отнести некоторые проблемы с производительностью при работе с большими базами данных, и то, что BSON занимает больше места в хранилище, чем широкораспространённый формат JSON.

Elasticsearch

Следующий участник нашего обзора также хорошо известен. Elasticsearch — это распределённая база данных с функционалом быстрого поиска. Основанная на библиотеке Apache Lucene, Elasticsearch может использоваться в различных отраслях для оптимизации получения данных.

Помимо хранения и анализа больших объёмов данных в режиме реального времени, Elasticsearch может предоставлять ответы за миллисекунды. Такая скорость достигается за счёт преобразования неструктурированных данных в специально построенные документы, оптимизированные для поиска на основе языка. Это позволяет пользователям быстро и легко находить нужную информацию. Недаром Elasticsearch является ядром знаменитого стека ELK.

Среди особенностей решения — архитектура распределённого поиска, позволяющая выполнять высокоскоростные запросы и индексировать огромные массивы данных. Он также предлагает встроенную поддержку полнотекстового поиска с расширенными функциями, такими как нечёткое сопоставление, автозаполнение и оценка релевантности для уточнения результатов.

Для установки Elasticsearch необходимо выполнить следующие команды:

sudo apt-get install apt-transport-https

echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

sudo apt-get update && sudo apt-get install elasticsearch

Здесь очевидным плюсом использования Elasticsearch является высокая скорость работы. К серьёзным минусам можно отнести отсутствие встроенных средств обеспечения информационной безопасности. В частности, в базе нет системы авторизации и ограничения прав доступа.

Redis

И третье NoSQL решение — это Redis. Это также база данных с открытым исходным кодом, хранящаяся в памяти в виде ключей‑значений. Она обеспечивает высокое время отклика, что делает её идеальной для всех видов приложений реального времени, таких как обновление данных в таблицах в режиме реального времени.

Одной из причин высокой скорости работы Redis является то, что она хранит данные в памяти, а не на физическом диске или твердотельном накопителе, поэтому при запросе данных нет необходимости обращаться к диску, что делает эту БД более эффективным по сравнению со многими конкурентами.

Также Redis поддерживает сохранение данных с помощью моментальных снимков и режимов «файл только для добавления» (AOF), позволяя пользователям балансировать между скоростью и долговечностью. Кроме того, Redis предлагает встроенную поддержку обмена сообщениями pub/sub, что делает его отличным выбором для архитектуры, управляемой событиями, и уведомлений в реальном времени.

Установка Redis очень проста:

sudo apt-get update

sudo apt-get install redis-server

Далее нам необходимо разрешить запуск БД в качестве демона. Для этого откроем файл настроек в редакторе:

$ sudo nano /etc/redis/redis.conf

Раскомментируем параметр supervised и присвоим ему значение system:

Далее выполним необходимые настройки для автозапуска:

$ sudo systemctl enable redis-server

$ sudo systemctl restart redis-server

И убедимся в работоспособности сервера, запросив версию:

Достоинства Redis в определённой степени являются её недостатками. Так, высокая производительность основана на хранении данных в оперативной памяти, но при этом нам необходимо, чтобы данные в принципе могли умещаться в памяти. Кроме того, сбой питания уничтожит все данные в RAM.

Также стоит помнить, что в Redis нет языка запросов, есть только команды. Это важно учитывать при построении структуры взаимодействия приложений с БД.

Заключение

В этой статье мы рассмотрели некоторые аспекты работы БД NoSQL, определились с теми требованиями, которые должны предъявляться к данному классу решений, и рассмотрели три наиболее распространённые БД.


В продолжение обсуждения темы NoSQL рекомендую посетить открытые уроки:

  • 19 февраля: «Используем NATS как ключ-значение, документ стор и очередь». Подробнее

  • 24 февраля: «NoSQL и IoT в Яндекс Облаке». Подробнее

Комментарии (3)


  1. Zore_pinge
    17.02.2025 04:57

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


  1. serious2monkeys
    17.02.2025 04:57

    Сильно много воды, а тема раскрыта слабовато. До колоночных так и не дошли, а ведь это нынче очень часто используется


  1. caspermax
    17.02.2025 04:57

    Это каким надо быть сказочным дятлом чтобы сравнивать мокрое со сладким. 1 - бд, 2 - поисковый движок, 3 - вообще для кэширования предназначено. Что у них общего? Ответ прост - фантазия автора статьи.

    Дорогие курсы программистов, ОСТАНОВИТЕСЬ!!!