【发布时间】:2019-01-03 21:25:32
【问题描述】:
是否可以在 CQL3 中定义地图集合,然后在 Thrift 中作为列组读取?
基于https://www.datastax.com/dev/blog/thrift-to-cql3 混合静态和动态列时,动态列在 CQL3 中不可见。推荐的方法是使用集合。但是,在非紧凑存储表中定义集合时,它在 Thrift 中根本不可见。当将其定义为冻结和紧凑存储时,它显示为单列。
create table main.exp2 (
article_id blob primary key,
text text,
scantime int,
info text,
rest frozen<map<text, blob>>) WITH COMPACT STORAGE;
我是否错过了一些可能未记录的选项?我的库版本是否太旧?
或者,在哪里可以要求将此作为新功能?显然,随着 thrift 被弃用,我不能指望存储本身有任何变化,但是根据 thrift-to-cql3 页面上的解释,我希望有一些方法可以通过复合列名来提供数据到 thrift。
Motivation 是一种前向兼容性 - 准备表,以便当前具有 thrift 的应用程序可以使用它,也可以由 CQL3 的新应用程序使用。目前看来,这种组合只有在完全动态的表中才有可能。
虽然如https://docs.datastax.com/en/cql/3.3/cql/cql_reference/refLimits.html 中提到的,map 集合中的值长度有 64KB 的限制,但我们无论如何都不能使用它。
所以也许要求从 CQL3 读取混合表的动态列的功能更有意义......
编辑:请注意,我知道我可以在没有任何静态列的情况下定义表,如下所示:
create table main.exp1 (
article_id blob,
column_key text,
value blob,
PRIMARY KEY (article_id, column_key)
) WITH COMPACT STORAGE AND CLUSTERING ORDER BY (column_key ASC);
但这意味着我所有的价值观都是一团糟,包括我事先知道的那些。
【问题讨论】:
标签: cassandra cql thrift cassandra-3.0 cql3