Утро: Основа основ — архитектура и модель данных. Забудьте на день о реляционных базах. Cassandra построена на логике распределенной хэш-таблицы (Dynamo) с моделью данных, похожей на Google Bigtable. Ключевые концепции:
- Кластер (Cluster): Кольцо (ring) узлов (nodes). Данные распределены между ними.
- Узел (Node): Отдельный экземпляр Cassandra.
- Ключ партицирования (Partition Key): Определяет, на каком узле будут храниться данные. Хэш-функция от этого ключа определяет положение в кольце.
- Ключ кластеризации (Clustering Key): Определяет порядок сортировки данных внутри партиции.
- Репликация (Replication): Данные копируются на несколько узлов (коэффициент репликации RF) для отказоустойчивости.
День: Установка и первый кластер. Лучший способ учиться — делать. Установите Cassandra локально (используя Docker — самый быстрый способ: `docker run --name cassandra -d cassandra:latest`). Подключитесь с помощью CQLSH (интерактивная оболочка) или используйте инструмент вроде DataStax DevCenter/IDE.
Создайте свой keyspace (аналог базы данных):
CREATE KEYSPACE my_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
И простую таблицу для блога:
CREATE TABLE posts_by_user (
user_id uuid,
post_id timeuuid,
title text,
content text,
PRIMARY KEY ((user_id), post_id)
) WITH CLUSTERING ORDER BY (post_id DESC);
Здесь `user_id` — partition key (все посты пользователя хранятся вместе), `post_id` — clustering key с сортировкой по убыванию (новые посты сверху).
Послеобеденное время: Чтение и запись. Освойте основные операции CQL (Cassandra Query Language), похожей на SQL, но с ограничениями.
Вставка: INSERT INTO posts_by_user (user_id, post_id, title, content) VALUES (uuid(), now(), 'Мой первый пост', 'Содержание...');
Выборка: SELECT * FROM posts_by_user WHERE user_id = ?; — это эффективный запрос, т.к. он обращается к одной партиции.
Поймите важность согласованности (Consistency Levels): ONE, QUORUM, ALL. В распределенной системе это компромисс между доступностью и консистентностью.
Вечер: Глубокое понимание и анти-паттерны. Разберитесь, почему `WHERE` по неключевым полям без `ALLOW FILTERING` запрещено — это ведет к full scan кластера. Узнайте про TTL (Time To Live) для автоматического удаления данных. Изучите основные инструменты: `nodetool` для мониторинга и управления кластером.
Главные анти-паттерны:
- Использовать Cassandra как реляционную БД с джойнами.
- Не учитывать кардинальность partition key (слишком большие или маленькие партиции).
- Игнорировать compaction и garbage collection.
Комментарии (14)