В данном физическом node строки для данного ключа раздела сохраняются в порядке, вызванном ключами кластеризации, что делает поиск строк в этом порядке кластеризации особенно эффективным. http://cassandra.apache.org/doc/cql3/CQL.html#createTableStmt Какое упорядочение вызвано кластеризацией ключей?
Кластерные ключи в Кассандре
Ответ 1
Предположим, что ваши ключи кластеризации
k1 t1, k2 t2, ..., kn tn
где ki - это i-е имя ключа, а ti - i-ый тип ключа. Затем данные заказа хранятся в лексикографическом порядке, где каждый размер сравнивается с использованием компаратора для этого типа.
So (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
.