Как устроены partition key, clustering key и secondary index в Cassandra?
Ответ от нейросети
sobes.tech AI
В Cassandra данные организованы с учётом распределённого характера базы и высокой скорости чтения/записи.
Partition Key — это ключ, который определяет, на каком узле кластера будут храниться данные. Он используется для хэширования и распределения данных по партициям. Все строки с одинаковым partition key попадают в одну партицию, что обеспечивает локальность данных и эффективность запросов по этому ключу.
Clustering Key — это дополнительный ключ, который определяет порядок сортировки строк внутри партиции. Он позволяет эффективно выполнять запросы с сортировкой и диапазонными фильтрами внутри одной партиции.
Например, если у вас таблица с partition key = user_id, а clustering key = timestamp, то все данные одного пользователя будут храниться вместе и отсортированы по времени.
Secondary Index — это индекс, который создаётся на колонках, не входящих в состав partition или clustering key. Он позволяет выполнять запросы по этим колонкам, но с ограничениями по производительности и масштабируемости. Secondary index в Cassandra не всегда эффективен при больших объёмах данных и часто рекомендуется использовать материализованные представления или денормализацию.
Пример определения таблицы:
CREATE TABLE events (
user_id uuid,
event_time timestamp,
event_type text,
details text,
PRIMARY KEY (user_id, event_time)
) WITH CLUSTERING ORDER BY (event_time DESC);
CREATE INDEX ON events(event_type);
Здесь user_id — partition key, event_time — clustering key, а индекс создан по колонке event_type.