关于Cassandra复合材料色谱柱的文档

时间:2016-05-30 16:16:35

标签: cassandra datastax cql

当我尝试查找有关复合列的信息时,我找不到比2013更新的内容(特别是this one是Google的顶级链接,在讨论使用复合列时没有CQL代码,显然使用了非常好的旧的Java驱动程序)。复合列是否仍然存在于较新版本的Cassandra中?我的意思是,除了有一个复合键。

我是Cassandra的新手并且实际上想要了解它们是否适合我的用例,如下所述。考虑一个包含4个双值列的表,例如wxyz。这些数据来自3个来源,例如abc。每个源可能缺少部分数据,因此表的每一行最多有12个数字。 我不打算创建3个包含4列的表来存储来自不同来源的值,然后合并表以填充缺少的字段,而是考虑使用一个表格将4个数据列建模为4 super columns或{ {1}}。类似于composite columnsa:wb:wc:wa:xb:xc:xa:yb:yc:ya:zb:z。此外,每一行都有一个时间戳作为主键。

我想知道的是,我是否可以使用c:z之类的查询,以便每行都可以从任何可用的来源返回SELECT *:w AS w FROM MyTable的一个值(无关紧要)哪个来源)。虽然我还希望保留从特定来源检索数据的功能,例如x

SELECT a:w FROM MyTable

1 个答案:

答案 0 :(得分:7)

复合列是与Thrift协议相关的词汇表。在内部,直到Cassandra 2.2,存储引擎仍然处理复合列,转换为聚类列 CQL 附带的新词汇。< / p>

自Cassandra 3.x以来,存储引擎已被重写,因此我们不再使用复合列存储数据。我们将存储引擎与新的CQL语义对齐,例如分区键/聚类列。为了向后兼容,我们在处理遗留Thrift协议时仍将集群列转换回复合列语义。

如果你刚开始使用Cassandra,请忘记旧的Thrift协议并使用正确的CQL语义。

根据您的需要,以下架构应该完成这项工作:

CREATE TABLE my_data(
   data text,
   source text,
   PRIMARY KEY ((data), source)
);

INSERT INTO my_data(data, source) VALUES('data1','src1');
INSERT INTO my_data(data, source) VALUES('data1','src2');
...
INSERT INTO my_data(data, source) VALUES('dataN','src1');
...
INSERT INTO my_data(data, source) VALUES('dataN','srcN');

//Select all sources for data1
SELECT source FROM my_data WHERE data='data1';

//Select data and source
SELECT * FROM my_data WHERE data='data1' AND source='src1';