Колоночные БД, Cassandra vs PostreSQL
В колоночной БД данные хранятся и обрабатываются по столбцам, а не по строкам. Все значения одного столбца хранятся вместе, отдельно от значений других столбцов.
Отличия колоночных БД
В строковой БД данные хранятся построчно:
- [1, 2024-01-01, Телефон, 500]
- [2, 2024-01-02, Ноутбук, 1000]
- [3, 2024-01-03, Планшет, 300]
В колоночной — по столбцам:
- ID: [1, 2, 3]
- Дата: [2024-01-01, 2024-01-02, 2024-01-03]
- Продукт: [Телефон, Ноутбук, Планшет]
- Цена: [500, 1000, 300]
Чтение: если нужно найти все цены, БД сразу читает столбец "Цена", не проходя по каждой строке.
Особенности
- Данные одной колонки сохраняются вместе на диске. Каждая колонка хранится отдельно (в строковых — вместе).
- Хранят все ячейки, которые относятся к колонке, в виде непрерывной записи — это и делает выполнение операций по поиску и доступу быстрее.
- Агрегированные операции выполняются быстрее, так как считывается меньше данных и не нужно обрабатывать лишние колонки.
- Оптимизированы для операций агрегации, таких как SUM, AVG, COUNT.
- Каждая запись в семействе колонок идентифицируется уникальным ключом строки (Row Key).
Когда лучше выбрать?
- Когда нужно быстро читать большие объемы данных по конкретным столбцам.
- Когда важна быстрая агрегация данных.
- Для данных, собранных по времени или другим параметрам, т.к. информация часто анализируется по определенным метрикам (столбцам).
- Для распределенной обработки данных и масштабируемости.
- Для OLAP систем при анализе больших объемов данных.
Когда неэффективны
- Если данные часто обновляются, то колоночные БД могут быть неэффективными, т.к. нужно обновлять каждый столбец отдельно.
- Могут иметь ограничения при выполнении транзакций, что может усложнять согласование данных в случае ошибок.
- При выполнении транзакций с большим объемом данных может возникнуть задержка из-за сканирования множества столбцов.
Примеры использования
- Анализ данных продаж для определения трендов и прогнозов.
- Хранилище данных для аналитики финансовых транзакций.
- Мониторинг производительности серверов и сетевого трафик а.
Отличия колоночных SQL от NoSQL
SQL:
- Имеет более строгую схему, таблицы и типы данных фиксированы.
- Стандартный язык SQL для запросов.
- Для вертикального масштабирования (увеличение мощности одного сервера).
- Для аналитических запросов.
NoSQL:
- Более гибкая схема, можно легко добавлять новые столбцы.
- Часто собственные языки или API.
- Легче масштабируется горизонтально (добавление новых серверов).
- Для больших распределенных систем.
Примеры БД
SQL: Clickhouse, Google BigQuery
NoSQL: Apache Cassandra, Apache HBase
Когда лучше выбирать строковые БД
- Для транзакционных систем (OLTP): БД, такие как PostgreSQL и MySQL, оптимизированы для быстрого выполнения транзакций, включая вставку, обновление и удаление строк. Подходят для банковских систем или системы обработки заказов.
- Когда структура данных может часто меняться: в строковых БД каждая запись хранится в виде строки, операции обновления данных более эффективные.
- Для частого соединения данных из разных таблиц и реляционных операций между таблицами.
Сравнительная таблица Apache Cassandra и PostgreSQL
| Критерий | Apache Cassandra | PostgreSQL |
|---|---|---|
| Тип базы данных | NoSQL (колоночная) | SQL (реляционная) |
| Схема данных | Гибкая, схемы можно изменять динамически | Строгая, схемы должны быть определены заранее |
| Масштабируемость | Горизонтальная, легко масштабируется | Вертикальная, масштабируется сложнее |
| Запросы | CQL (Cassandra Query Language) | SQL |
| Консистентность | Eventual consistency (возможная согласованность) | ACID (атомарность, согласованность, изоляция, долговечность) |
| Поддержка транзакций | Ограниченная, не поддерживает ACID полностью | Полная поддержка ACID-транзакций |
| Области применения | Большие распределенные системы, аналитика | Традиционные бизнес-приложения, OLTP, аналитика |
| Обработка данных | Оптимизирована для записи, высокая скорость вставки данных | Оптимизирована для сложных запросов и аналитики |