Виды нереляционных БД. Какие бывают NoSQL базы данных



Ранее мы писали о реляционных БД, сравнивали их с нереляционными. Познакомимся с NoSQL подробнее. Все ссылки кликабельны, нажмите на название СУБД и откроется статья из Хабра.



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



1️⃣ Ключ-значение (Key-value)

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

👉 Примеры СУБД: Redis, Memcached, Tarantool.



2️⃣ Документо-ориентированные БД

Могут быть полезны, если нужно хранить много файлов/документов и вы не хотите задумываться о структуре хранения, иерархии, связях. Такие БД имеют структуру дерева: начинаются с корневого узла и может содержать несколько внутренних и листовых узлов.



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

👉 Примеры СУБД: MongoDB.



3️⃣ БД временных рядов (TSDB)

Подходят, если есть упорядоченные по времени данные с временными метками, такие как метрики от инфраструктуры или данные датчиков. Часто используются для осуществления мониторинга различных метрик (будь то загрузка CPU, или показатели работы какого-либо датчика).

👉 Примеры СУБД: Prometheus, InfluxDB, Graphite.



4️⃣ Графовые БД

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

👉 Примеры СУБД: Neo4J.



5️⃣ Поисковые БД (Search Engines)

Подходит, если вам необходимо осуществлять поиск по большим объемам данных, особенно неструктурированным, как пример поиск по нескольким терабайтами логов.



Поиск по текстам работает на основе индексирования. Каждому слову/лемме/n-грамме присваивается индекс. Затем формируется структура вроде таблицы, где строки являются документом, а столбцы индексами. Поиск по индексу существенно быстрее, чем по совпадению по словам в документах.

👉 Примеры СУБД: Elasticsearch.



6️⃣ Объектно-ориентированные БД

Здесь информация представлена в виде объектов, прямо как в ООП. Объектно-ориентированные базы данных появились как способ нативной коммуникации кода написанного с использованием объектно-ориентированных языков с базой данных.

👉 Примеры СУБД: Db4o.



7️⃣ Колоночные БД (column family store)

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

👉 Примеры СУБД: Cassandra, Clickhouse.



📎 Ещё полезные материалы

1. Виды баз данных. Большой обзор типов СУБД

2. Базы данных: большой обзор типов и подходов. Доклад Яндекса

3. Модели данных в NoSQL

4. Использование memcached и Redis в высоконагруженных проектах

5. Как базы данных «ключ-значение» обеспечивают производительность и масштабируемость без границ

6. SQL и NoSQL. Правда ли одно лучше другого?



#бд