关于 Cassandra 复合列的文档

Documentation on Cassandra Composite Columns

当我尝试查找有关复合列的信息时,我找不到比 2013 年更新的任何内容(具体来说 this one 是 Google 的顶部 link,当谈论使用复合列,显然使用了一个非常旧的 Java 驱动程序)。复合列是否仍然存在于较新版本的 Cassandra 中?我的意思是,除了有一个复合键。

我是 Cassandra 的新手,实际上想了解它们是否适合我的用例table,如下所述。考虑具有 4 个双值列的 table,比如 wxyz。这些数据是从 3 个来源收集的,例如 abc。每个来源可能会丢失部分数据,因此 table 每行最多有 12 个数字。 与其创建 3 个具有 4 列的 tables 来存储来自不同来源的值,然后合并 tables 以填充缺失的字段,我正在考虑有一个 table将 4 个数据列建模为 4 super columnscomposite columns。像 a:wb:wc:wa:xb:xc:xa:yb:y 之类的东西c: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

Composite栏目是与Thrift协议相关的词汇。在内部,在 Cassandra 2.2 之前,存储引擎仍然处理复合列并将它们 翻译 聚类列 ,[=19= 附带的新词汇表]CQL.

自从 Cassandra 3.x 以来,存储引擎已被重写,因此我们不再使用复合列存储数据。我们将存储引擎与新的 CQL 语义对齐,例如分区 key/clustering 列。为了向后兼容,在处理遗留 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';