На данном физическом узле строки для данного ключа раздела хранятся в порядке, определяемом ключами кластеризации, что делает извлечение строк в этом порядке кластеризации особенно эффективным. http://cassandra.apache.org/doc/cql3/CQL.html#createTableStmt Что вид упорядочения вызван кластеризацией ключей?
Кластеризация ключей в Cassandra
Ответы:
Предположим, что ваши ключи кластеризации
k1 t1, k2 t2, ..., kn tn
где ki — имя i-го ключа, а ti — тип i-го ключа. Затем данные порядка сохраняются в лексикографическом порядке, где каждое измерение сравнивается с использованием компаратора для этого типа.
Итак, (a1, a2, ..., an) ‹ (b1, b2, ..., bn), если a1 ‹ b1 с использованием компаратора t1, или a1=b1 и a2 ‹ b2 с использованием компаратора t2, или (a1=b1 и a2=b2) и a3 ‹ b3 с использованием компаратора t3 и т. д.
Это означает, что эффективно найти все строки с определенным k1=a, так как данные хранятся вместе. Но неэффективно находить все строки с ki=x для i > 1. На самом деле такой запрос не разрешен — единственные допустимые ограничения ключа кластеризации указывают ноль или более ключей кластеризации, начиная с первого, и ни один из них не пропущен. .
Например, рассмотрим схему
create table clustering (
x text,
k1 text,
k2 int,
k3 timestamp,
y text,
primary key (x, k1, k2, k3)
);
Если вы сделали следующие вставки:
insert into clustering (x, k1, k2, k3, y) values ('x', 'a', 1, '2013-09-10 14:00+0000', '1');
insert into clustering (x, k1, k2, k3, y) values ('x', 'b', 1, '2013-09-10 13:00+0000', '1');
insert into clustering (x, k1, k2, k3, y) values ('x', 'a', 2, '2013-09-10 13:00+0000', '1');
insert into clustering (x, k1, k2, k3, y) values ('x', 'b', 1, '2013-09-10 14:00+0000', '1');
затем они сохраняются в этом порядке на диске (возвращается порядок select * from clustering where x = 'x'
):
x | k1 | k2 | k3 | y
---+----+----+--------------------------+---
x | a | 1 | 2013-09-10 14:00:00+0000 | 1
x | a | 2 | 2013-09-10 13:00:00+0000 | 1
x | b | 1 | 2013-09-10 13:00:00+0000 | 1
x | b | 1 | 2013-09-10 14:00:00+0000 | 1
Доминирует k1
порядок, затем k2
, затем k3
.