Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГАК-2026.docx
Скачиваний:
1
Добавлен:
16.06.2026
Размер:
2.66 Mб
Скачать

Вопрос 11: NoSql-базы данных: типы (документные, ключ-значение, графовые, колоночные), сценарии применения

1. Введение: что такое NoSql и почему они появились?

NoSQL (Not Only SQL) — это широкий класс систем управления базами данных, которые отличаются от классических реляционных СУБД. Термин появился в конце 2000-х годов, когда компании вроде Google, Amazon, Facebook столкнулись с ограничениями реляционных баз при работе с колоссальными объёмами данных.

Почему реляционные базы перестали устраивать?

  • Горизонтальное масштабирование — реляционные базы хорошо масштабируются вертикально (более мощный сервер), но плохо горизонтально (кластер из множества серверов). Шардинг (распределение данных) сложен, JOIN'ы между шардами практически невозможны.

  • Скорость работы с большими данными — при терабайтах данных и миллионах запросов в секунду реляционные базы начинают тормозить.

  • Гибкость схемы — в современных проектах структура данных часто меняется, а ALTER TABLE на огромной таблице может занять часы.

  • Разнообразие данных — не все данные удобно укладывать в таблицы (графы социальных связей, JSON-документы, временные ряды).

NoSQL-базы пожертвовали строгой согласованностью (ACID) и универсальностью ради производительности, масштабируемости и гибкости под конкретные задачи.

2. Общие характеристики NoSql

Несмотря на разнообразие, у большинства NoSQL-баз есть общие черты:

  1. Отказ от реляционной модели — данные хранятся не в таблицах со строгими схемами.

  2. Горизонтальное масштабирование — из коробки поддерживают распределение по кластеру.

  3. Гибкая схема (schema-less) — можно хранить записи с разным набором полей.

  4. Отсутствие или ограниченная поддержка JOIN'ов — данные часто денормализованы.

  5. BASE вместо ACID — согласованность в конечном счёте (eventual consistency).

  6. Специализация — каждая NoSQL-база заточена под определённый тип данных и запросов.

3. Типы NoSql-баз данных

Разделение на типы — по модели данных.

Тип 1: Документные базы данных (Document Stores)

Модель данных: Данные хранятся в виде документов, обычно в формате JSON, BSON (двоичный JSON), XML. Каждый документ самодостаточен и имеет уникальный идентификатор.

Структура документа:

Особенности:

  • Один документ может содержать вложенные структуры (объекты, массивы).

  • Разные документы в одной коллекции могут иметь разные поля (гибкость схемы).

  • Данные, которые часто запрашиваются вместе, хранятся в одном документе (денормализация).

Как работают запросы:

  • Поиск по полям документа (например, найти всех, у кого age > 25).

  • Создание индексов по любым полям.

  • Агрегационные конвейеры (аналог GROUP BY в SQL).

Популярные представители:

  • MongoDB — самая популярная документная БД. Использует BSON, мощный язык запросов, агрегационный фреймворк.

  • CouchDB — использует JSON и JavaScript, делает упор на синхронизацию.

  • Firebase Firestore — облачная документная БД от Google.

  • Amazon DocumentDB — совместима с MongoDB.

Когда использовать:

  • Каталоги товаров (каждый товар может иметь разный набор характеристик).

  • Блоги, CMS (статьи с разными типами контента).

  • Пользовательские профили с гибкой структурой.

  • Системы аналитики, где данные приходят в разном формате.

  • Журналирование событий.

Когда НЕ использовать:

  • Когда нужны сложные транзакции с участием многих документов (хотя в MongoDB есть поддержка multi-document транзакций, но это не основное).

  • Когда данные сильно связаны и требуют частых JOIN'ов (придётся денормализовать и дублировать).