我想使用 Cassandra 的键值对特性。到目前为止,我一直在使用京都内阁,但它不支持多次写入,因此,我想使用 Cassandra 对我的表格数据进行版本控制。
Roll No, Name, Age, Sex
14BCE1008, Aviral, 22, Male
14BCE1007, Shantanu, 22, Male
以上数据为表格(csv)。它是版本 1。接下来是版本 2:
Roll No, Name, Age, Sex
14BCE1008, Aviral, 22, Male
14BCE1007, Shantanu, 22, Male
14BCE1209, Piyush, 22, Male
因此,我将上述版本称为具有以下差异的版本 2: insert_patch
:14BCE1209
为键(PK),14BCE1209, Piyush, 22, Male
为值。我熟悉表的创建,但无法弄清楚版本控制部分。
如果使用复合主键而不是由一个字段组成的主键,则表中具有多个数据版本。
因此,表定义可能如下所示(如果您在插入数据之前"知道"版本号):
create table test(
id text,
version int,
payload text,
primary key (id, version)
) with clustering order by (version desc);
并将数据插入为:
insert into test (id, version, payload) values ('14BCE1209', 1, '....');
insert into test (id, version, payload) values ('14BCE1209', 2, '....');
要为给定键选择最新值,您可以使用LIMIT 1
:
SELECT * from test where id = '14BCE1209' LIMIT 1;
并为所有分区选择最新版本(不推荐,例如 - 需要一种特殊的方法来有效处理):
SELECT * from test PER PARTITION LIMIT 1;
但这仅适用于您提前知道版本的情况。如果您不知道,则可以使用timeuuid
类型而不是int
create table test(
id text,
version timeuuid,
payload text,
primary key (id, version)
) with clustering order by (version desc);
并将数据插入为(而不是now()
您可以使用从代码生成的当前时间戳):
insert into test (id, version, payload) values ('14BCE1209', now(), '....');
insert into test (id, version, payload) values ('14BCE1209', now(), '....');
并选择将工作与上述相同...