Mah*_*hdi 4 cql cassandra datastax
当我试图找到有关复合列的信息时,我找不到比2013更新的东西(特别是这个是Google的顶级链接,在讨论使用复合列时没有CQL代码,显然使用的是非常旧的Java驱动程序).复合列是否仍然存在于较新版本的Cassandra中?我的意思是,除了有一个复合键.
我是Cassandra的新手并且实际上想要了解它们是否适合我的用例,如下所述.考虑一个表4双值列,也就是说w,x,y,z.这些数据来自3个来源,比如说收集a,b和c.每个源可能缺少部分数据,因此表的每一行最多有12个数字.而不是创建3个包含4列的表来存储来自不同源的值,然后合并表以填充缺少的字段,我想要有一个表将4个数据列建模为4 super columns或composite columns.喜欢的东西a:w,b:w,c:w,a:x,b:x,c:x,a:y,b:y,c:y,a:z,b:z,c: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
Run Code Online (Sandbox Code Playgroud)
复合列是与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';
Run Code Online (Sandbox Code Playgroud)