Кластерные ключи в Кассандре

В данном физическом 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.