🔵 Колоночные БД, 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)
Когда лучше выбрать?
⏩ Когда нужно быстро читать большие объемы данных по конкретным столбцам
⏩ Когда важна быстрая агрегация данных
⏩ Для данных, собранных по времени или другим параметрам, т.к. информация часто анализируются по определенным метрикам (столбцам)
⏩ Для распределенной обработки данных и масштабируемости
Некоторые БД (Apache Cassandra и HBase) спроектированы для работы в распределенной среде. Они легко масштабируются горизонтально, добавляя новые узлы в кластер
Это позволяет обрабатывать большие объемы и распределять нагрузку между серверами
⏩ Для OLAP систем при анализе больших объемов данных
Когда неэффективны
*️⃣Если данные часто обновляются, то колоночные БД могут быть неэффективными, т.к. нужно обновлять каждый столбец отдельно
*️⃣Могут иметь ограничения при выполнении транзакций, что может усложнять согласование данных в случае ошибок
*️⃣При выполнении транзакций с большим объемом данных может возникнуть задержка из-за сканирования множества столбцов
Примеры использования
🟠Анализ данных продаж для определения трендов и прогнозов
🟠Хранилище данных для аналитики финансовых транзакций
🟠Мониторинг производительности серверов и сетевого трафика
Отличия колоночных SQL от NoSQL
SQL:
*️⃣Имеет более строгую схему, таблицы и типы данных фиксированы
*️⃣Стандартный язык SQL для запросов
*️⃣Для вертикального масштабирования (увеличение мощности одного сервера)
*️⃣Для аналитических запросов
NoSQL:
*️⃣Более гибкая схема, можно легко добавлять новые столбцы
*️⃣Часто собственные языки или API
*️⃣Легче масштабируется горизонтально (добавление новых серверов)
*️⃣Для больших распределенных систем
Примеры БД
*️⃣SQL: Clickhouse, Google BigQuery
*️⃣NoSQL: Apache Cassandra, Apache HBase
Когда лучше выбирать строковые БД
🟠Для транзакционных систем (OLTP): БД, такие как PostgreSQL и MySQL, оптимизированы для быстрого выполнения транзакций, включая вставку, обновление и удаление строк. Подходят для банковских систем или системы обработки заказов.
🟠Когда структура данных может часто меняться: в строковых БД каждая запись хранится в виде строки, операции обновления данных более эффективные
🟠Для частого соединения данных из разных таблиц и реляционных операций между таблицами
Сравнение Cassandra vs PostgreSQL на картинке поста 👇
⭐️ Подборки материалов по этой и другим темам доступны в базе знаний по системному анализу
#бд
Post #398
17.1K