【发布时间】:2014-06-10 02:20:31
【问题描述】:
如下所示,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 条记录。
哪种表设计更好?
哪种设计的读/写性能更好?
【问题讨论】:
-
Tab3 是阅读的最佳设计。您的写入性能没有太大变化。写入很大程度上取决于您使用的一致性。找出这一点的最佳方法是加载样本数据并针对您的用例进行测试。数据大小对任何类型的性能都很重要。