将复合分区&复合关键影响cassandra的性能?

时间:2014-04-24 16:44:47

标签: cassandra cql3

下面给出了3个表的CQL。 两者都具有相同的列结构,但设置PRIMARY KEY的区别。

tab1:无复合主键

CREATE TABLE tab1
(
key1 text,
key2 text,
key3 text,
key4 text,
data1 text,
data2 text,
data3 int,
PRIMARY KEY(key1,key2,key3,key4));

tab2:(key1,key2)形成复合主键

CREATE TABLE tab2
(
key1 text,
key2 text,
key3 text,
key4 int,
data1 text,
data2 text,
data3 text,
PRIMARY KEY((key1,key2),key3,key4));

tab3:(key1,key2,key3)形成复合主键

 CREATE TABLE tab3
    (
    key1 text,
    key2 text,
    key3 text,
    key4 int,
    data1 text,
    data2 text,
    data3 text,
    PRIMARY KEY((key1,key2,key3),key4));

在查询value1,value2时,value3已知,key4被指定为范围。 示例CQL查询,

select data1,data2,data3 from tab3 where key1='value1' and key2='value2' and key3='value3' and key4 > 1000 and key4 < 1000000 ;

key4可能有大约50,000条记录。

哪种TABLE设计更好?

哪种设计具有更好的读/写性能?

1 个答案:

答案 0 :(得分:1)

如果您需要通过key4支持范围查询,那么它需要是一个聚类列,以便排除tab1。由于您始终为key3指定了确切的值,因此无需将其设置为群集列,因此tab3是比tab2更好的选择。保留分区键中的key3将使数据在集群中更均匀地分区。