在给定的物理节点上,给定分区键的行按照聚类键引起的顺序存储,使得在该聚类顺序中检索行特别有效。 http://cassandra.apache.org/doc/cql3/CQL.html#createTableStmt群集密钥会导致什么样的排序?
答案 0 :(得分:35)
假设您的群集密钥是
k1 t1, k2 t2, ..., kn tn
其中ki是第i个键名,ti是第i个键类型。然后,订单数据以字典顺序存储,其中每个维度使用该类型的比较器进行比较。
所以(a1,a2,...,an)&lt; (b1,b2,...,bn)如果a1&lt; b1使用t1比较器,或a1 = b1和a2 <1。 b2使用t2比较器,或(a1 = b1和a2 = b2)和a3 这意味着找到具有特定k1 = a的所有行是有效的,因为数据一起存储。但是对于i&gt;找到ki = x的所有行是低效的。 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
。