我想使用Cassandra的键值对功能。到目前为止,我一直在使用Kyotocabinet,但它不支持多次写入,因此,我想使用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
作为值。
我对表的创建很熟悉,但是无法弄清楚版本控制部分。
答案 0 :(得分:2)
如果使用复合主键而不是由一个字段组成的主键,则表中将具有多个版本的数据。
因此表定义可能如下所示(如果您在插入数据之前“知道”版本号):
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(), '....');
并选择将与上述操作相同...