繁体   English   中英

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

[英]Documentation on Cassandra Composite Columns

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

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

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

----------------------------------------------------------------
| key | a:w | b:w | c:w | a:x | b:x | c:x | a:y | b:y | c:y | ...
----------------------------------------------------------------
|  1  | 10  |  10 |  -  | ....
|  2  |  -  |  1  |  2  | ....
|  3  | 11  |  -  |  -  | ....
|  4  | 12  |  11 |  11 | ....
-----------------------------------------------------------------

SELECT *:w AS w FROM MyTable
(10, 1, 11, 12)   // would be an acceptable answer

SELECT a:w AS w FROM MyTable
(10, 11, 12)      // would be an acceptable answer

复合列是与Thrift协议相关的词汇表。 在内部,直到卡珊德拉2.2存储引擎仍与组合柱交易,并将它们转换集群柱 ,随CQL的新词汇。

自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';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM