Типы баз данных
Тип БД выбирают по модели доступа, гарантиям и эксплуатации. Слова SQL/NoSQL не образуют шкалу «старое — новое»: разные модели решают разные задачи.
Реляционные
Данные представлены таблицами и отношениями, схема и ограничения формализованы.
Подходят, когда важны:
- транзакции над связанными данными;
- join и гибкие запросы;
- constraints;
- зрелые средства резервирования и анализа планов.
Пример модели: users -> orders -> items.
Key-value
key: session:7f...
value: serialized sessionОчень быстрый доступ по ключу, но сложные выборки и связи обычно строятся на стороне приложения или дополнительными структурами.
Документные
Объект хранится документом с вложенными полями. Удобно, когда агрегат читается целиком и его схема эволюционирует. Дублирование данных и обновление нескольких документов требуют осознанной модели согласованности.
Wide-column
Оптимизированы под большие распределенные наборы и заранее известные шаблоны запросов. Модель часто проектируют от запросов, допуская денормализацию.
Графовые
Вершины и ребра — объекты первого класса. Полезны для обходов переменной глубины: связи, маршруты, зависимости, рекомендации.
Временные ряды
Оптимизированы под события со временем: append-heavy запись, retention, downsampling, агрегаты по интервалам.
Поисковые движки
Inverted index дает полнотекстовый поиск, ранжирование и агрегации. Обычно это не единственный источник истины для транзакционного домена.
OLTP и OLAP
- OLTP — короткие конкурентные операции над небольшим числом строк;
- OLAP — сканирование и агрегация больших объемов, часто колоночное хранение.
Одна организация часто использует несколько моделей: relational source of truth, cache key-value, поисковый индекс и аналитическое хранилище.
Как выбирать
- Какие запросы и объемы?
- Какие транзакционные границы?
- Допустима ли задержка согласования?
- Как делать backup, restore, миграцию и наблюдаемость?
- Есть ли компетенции эксплуатировать систему?
Связано: Оперативная обработка транзакций, Нормализация денормализация, Шардирование базы данных.
Вопросы
NoSQL означает отсутствие запросов? Нет; это семейство нереляционных моделей, у каждой свой язык и ограничения.
Когда документная БД удобна? Когда агрегат естественно хранится и читается целым документом.
Почему поисковый индекс редко source of truth? Обновление проекции обычно асинхронно, а транзакционные ограничения слабее.
Можно ли использовать несколько БД? Да, но каждое дополнительное хранилище увеличивает сложность согласования и эксплуатации.