Sobes.tech
Назад к вопросам
Senior
3

Как устроены 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.