NoSQL ("не только SQL") — это подход к проектированию баз данных, который позволяет хранить и запрашивать данные вне традиционных структур, используемых в реляционных базах данных. Он был создан в первую очередь для работы с неструктурированными данными, которые генерируются из многочисленных источников, таких как документы, аудио, видео, социальные сети и т.д. Базы данных NoSQL лучше всего подходят для современных приложений, где модели данных эволюционируют, а масштабируемость имеет большое значение. Эта база данных приобрела популярность в последние годы, поскольку сейчас компаниям приходится иметь дело с неструктурированными данными больше, чем когда-либо прежде. Эта модель хранит данные иначе, чем традиционные реляционные таблицы, позволяя хранить связанные данные в единой структуре данных. Базы данных NoSQL можно разделить на четыре категории:

  • Хранилище документов

  • Базы данных с ключами-значениями

  • Ширококолоночные хранилища

  • Графовые базы данных

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

По данным db-engines, двумя лучшими базами данных NoSQL (июль 2021 года) являются MongoDB (рейтинг: 5) и Redis (рейтинг: 6). Интересно, что этих NoSQL баз данных не было 12 лет назад. То, как они появились, завоевали привлекательность, популярность и изменили ландшафт системы управления базами данных, является основной темой этой статьи в блоге.

MongoDB

MongoDB — это документо-ориентированная база данных с открытым исходным кодом, первоначальный выпуск которой состоялся в феврале 2009 года. Документоориентированные базы данных сильно отличаются от традиционных реляционных баз данных.  Они хранят всю информацию для данного объекта в одном экземпляре, и каждый хранимый объект может отличаться от всех остальных. Это устраняет необходимость в объектно-реляционном отображении и позволяет использовать бессхемную структуру, что дает разработчикам приложений возможность быстро эволюционировать благодаря гибкой модели данных. Вместо того чтобы подгонять приложение под требования схемы, разработчики создают приложение, а далее следует схема.

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

MongoDB появилась благодаря компании 10gen (до того, как она была переименована в MongoDB Inc), которая начала ее разработку в 2007 году и выпустила свой первый GA-релиз в феврале 2009 года. С тех пор MongoDB быстро развивалась и сейчас уже считается одним из самых интересных проектов баз данных для современных приложений. Согласно опросу разработчиков StackOverflow Developer Survey 2020, MongoDB остается технологией баз данных, которую разработчики хотят изучить больше всего. На момент написания этой статьи была выпущена версия 5.0 (13 июля 2021 года), в которой реализовано множество важных функций, таких как решардинг в реальном времени, поддержка данных временных рядов и версионный API, подходящий для многооблачных сред.

Еще одна важная особенность MongoDB — встроенные функции высокой доступности, такие как репликация, набор реплик и шардинг. Она горизонтально масштабируема, что позволяет снизить рабочую нагрузку и с легкостью масштабировать бизнес. Она предлагает репликацию с помощью собственного протокола консенсуса, который основан на Raft, и может распределять данные между шардами с помощью маршрутизатора запросов под названием mongos. Вы можете использовать ClusterControl для легкого развертывания набора реплик MongoDB и установки кластера с шардами.

MongoDB привлекла внимание общественности и критиков из-за своей уязвимости в конфигурации безопасности по умолчанию в MongoDB, позволяющей любому человеку иметь полный доступ к базе данных. Данные из десятков тысяч установок MongoDB были украдены. Кроме того, многие серверы MongoDB были выкуплены. Эта ситуация заставила нас написать несколько постов в блоге, связанных с безопасностью MongoDB, например, Secure MongoDB and Protect Yourself From the Ransom Hack и How to Secure MongoDB From Ransomware - Ten Tips. В связи с этим MongoDB улучшила аспекты конфигурации по умолчанию, чтобы повысить безопасность MongoDB 3 и более поздних версий.

Некоторые крупные компании, такие как Forbes, Toyota, SAP, Cisco, eBay и Adobe, в значительной степени полагаются на MongoDB в качестве хранилища данных. MongoDB рассматривается как переломное событие в мире баз данных. MongoDB стало одной из самых важных платформ баз данных в эпоху интернета.

ClusterControl поддерживает MongoDB с версии от июля 2013 года (v1.2.3) и с тех пор постоянно совершенствуется. ClusterControl даже поддерживал TokuMX (MongoDB с фрактальным деревом от Tokutek), прежде чем он был упразднен в MongoDB 3 из-за изменений в дизайне ядра. Среди последних заметных улучшений ClusterControl представляет поддержку Percona Backup for MongoDB, распределенного, малозатратного решения для создания последовательных резервных копий кластеров и наборов реплик MongoDB. Проект Percona Backup for MongoDB унаследован от проекта mongodb_consistent_backup, который больше активно не разрабатывается и не поддерживается.

Redis

Redis — еще одна популярная технология баз данных NoSQL, которая ориентирована на частый высокоскоростной доступ к одним и тем же фрагментам данных, даже если эти фрагменты данных велики. В мае 2009 года Сальваторе Санфиллиппо выпустил начальную версию Redis, также известную как Remote Dictionary Server, и привлек к ней всеобщее внимание благодаря своим более широким функциональным возможностям по сравнению с уже существующей на тот момент базой данных in-memory с открытым исходным кодом под названием Memcached.

Redis является сверхбыстрым благодаря структуре данных in-memory и тому факту, что он был написан на языке C (это одна из причин, по которой Memcached был переписан на C). Благодаря своей высокой производительности разработчики обращаются к Redis для кэширования данных, когда объем операций чтения и записи превышает возможности традиционных баз данных. Часто используемые данные можно кэшировать и обслуживать с помощью хранилищ ключевых значений в памяти и минимизировать чтение и запись в более медленные дисковые системы, ориентированные на постоянное хранение.

Традиционно системы управления базами данных разрабатываются для обеспечения надежной функциональности данных, а не скорости при масштабировании. Кэш приложений часто используется для хранения копий таблиц поиска и ответов на дорогостоящие запросы от СУБД, как для повышения производительности приложения, так и для снижения нагрузки на источник данных. Иногда рабочий процесс приложения требует генерации ресурсоемких результатов. После получения этих результатов есть случаи, когда результаты могут быть использованы повторно, например, при выполнении частичных агрегаций. Кэш выступает в качестве идеального промежуточного носителя для хранения таких результатов между запросами. Именно здесь Redis проявляет себя наилучшим образом.

Redis превратился из очень быстрого простого хранилища ключевых значений в постоянное хранилище данных и используется в качестве посредника обмена сообщениями и системы очередей. Он обеспечивает отсутствие статичности для процессов приложений, сокращая при этом дублирование данных или запросы к внешним источникам данных. Согласно опросу разработчиков StackOverflow Developer Survey 2020, Redis остается на первом месте среди технологий баз данных, к которым разработчики выразили заинтересованность в дальнейшем развитии. На момент написания этой статьи Redis 6 является последней версией, с новой, более сложной реализацией ACL на основе пользователя, встроенным SSL-шифрованием трафика и многопоточным вводом-выводом, хотя процесс Redis по-прежнему однопоточный.

Развертывание Redis поддерживается в ClusterControl 1.9.0 с помощью нашего нового пакета ClusterControl GUI нового поколения, доступного в отдельной установке. На момент написания этой статьи мы называем его ClusterControl v2 с меткой Technology Preview, который поддерживает только развертывание репликации Redis до 5 узлов с Redis Sentinel с резервным управлением AOF и RDB. Если вы заинтересовались данным продуктом, обратитесь к руководству по его установке.

Заключение

MongoDB и Redis — это два лучших решения на рынке в настоящее время для баз данных NoSQL, и считается, что они сохранят свои позиции в рейтинге 10 лучших баз данных в течение длительного времени. Именно по этой причине ClusterControl поддерживает обе технологии баз данных.


Материал подготовлен в рамках курса «NoSQL».

Всех желающих приглашаем на открытый урок «Шардированный реплицированный кластер mongodb». Цель занятия: шардировать в mongodb: mongos; правильно выбрать ключ шардирования. В результате получим развернутый шардированный реплицированный кластер mongodb.
>> РЕГИСТРАЦИЯ

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