# Нереляционные

{% hint style="info" %}
**Нереляционная база данных** — это база данных, в которой в отличие от большинства традиционных систем баз данных не используется табличная схема строк и столбцов. В этих базах данных применяется модель хранения, оптимизированная под конкретные требования типа хранимых данных. Например, данные могут храниться как простые пары "ключ — значение", документы JSON или граф, состоящий из ребер и вершин.
{% endhint %}

## Особенности NoSQL <a href="#osobennosti-nosql" id="osobennosti-nosql"></a>

Термин объединяет множество СУБД, имеющих различную архитектуру и характеристики. Однако, можно выделить несколько присущих им всем особенностей:

* **Неструктурированность.** В NoSQL-базах структура данных не регламентирована вообще или лишь в малой степени. Если нужно внести изменения в поля отдельного документа, для этого не потребуется декларативно менять всю структуру таблицы. При необходимости поменять модель данных потребуется просто указать изменения в коде приложения.
* **Использование альтернатив SQL.** В нереляционных базах данных не применяется классический SQL, а используются различные SQL-диалекты.
* **Агрегация данных.** В то время как реляционные БД сохраняют данные в виде таблиц, в нереляционных они представляют собой целостные объекты.&#x20;
* **Распределенность.** В нереляционных базах данных реализована горизонтальная масштабируемость. Она достигается за счет соединения быстрым подключением нескольких независимых друг от друга серверов, каждый из которых обрабатывает только часть данных, а не весь массив. Соответственно, нет необходимости наращивать мощность каждого сервера (тем более что есть физический предел) — достаточно просто добавить в систему новый.

## Виды NoSQL-баз данных <a href="#vidy-nosqlbaz-dannykh" id="vidy-nosqlbaz-dannykh"></a>

* **Ключ-значение.** В таких БД для доступа к значению используется ключ. Они применяются в качестве хранилищ изображений, специализированных файловых систем, кэшей, информационных платформ для онлайн-игр и т.д. — везде, где главными требованиями являются высокая масштабируемость и минимальная задержка обработки запроса.
* **Матричные.** В таких БД данные хранятся в виде разреженных матриц, где строки и столбцы используются как ключи доступа к значению. Чаще всего такие СУБД применяют в индексировании веб-страниц и других задачах, связанных с обработкой больших данных.
* **Документо-ориентированные.** В базах данных этого типа данные записываются в специальный документ в формате JSON или близком к нему. Таким БД свойственны одновременно иерархичность и гибкость. Чаще всего они применяются в системах управления контентом, каталогах, специализированных поисковых системах (например, в электронных архивах).
* **Графовые.** Такие БД сохраняют информацию в виде сложно связанных друг с другом графов. Связанность данных упрощает их хранение, навигацию и поиск. Типичными примерами использования графовых БД являются социальные сети, системы выявления мошенничества.

## Преимущества NoSQL <a href="#preimushestva-nosql" id="preimushestva-nosql"></a>

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

## Недостатки NoSQL <a href="#nedostatki-nosql" id="nedostatki-nosql"></a>

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

## Примеры нереляционных СУБД

1. **MongoDB**. Данная система хранения информации основана на *формате документа*. Она применяет документ вида JSON для того, чтобы сохранять информацию. С ее помощью можно легко и быстро масштабировать информацию и поддержать гибкую модель информации.&#x20;
2. **Cassandra**. Данная система хранения информации основана на *колонках*. Ее используют для обработки огромного количества информации. С ее помощью можно получить высокую доступность, она отлично масштабируется, к тому же поддерживает гибкую модель информации.&#x20;
3. **Redis**. Данная система хранения информации основана на *ключ-значениях*. Ее используют для кэша информации и убыстрения получения доступа к ним. Ее применяют и для хранения данных иного типа вроде наборов и списков. &#x20;
4. **Neo4j**. Данная система хранения информации основана на *графах*. Ее используют для оценки связей между информацией. С ее помощью можно получить высокие показатели эффективности и создать гибкую модель информации, из-за чего она становится прекрасной для обработки данных, которые связаны между собой.&#x20;
5. **Amazon DynamoDB**. Фактически это услуга по регуляции баз данных от компании Amazon. Она применяет модель *ключ-значение* для того, чтобы хранить информацию. С ее помощью можно получить высокий уровень доступа и легко масштабировать данные, к тому же гарантируется низкая задержка в случае доступа к информации.&#x20;

Источники:&#x20;

* <https://blog.skillfactory.ru/glossary/nosql/>
* <https://wiki.fenix.help/informatika/nerelyacionnye-bazy-dannyh>

Подробнее:&#x20;

* <https://learn.microsoft.com/ru-ru/azure/architecture/data-guide/big-data/non-relational-data>
