如何使用cassandra对数据进行版本设置?

ycl3bljg  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(339)

我想使用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 作为价值。我熟悉表的创建,但无法理解版本控制部分。

gupuwyp2

gupuwyp21#

如果使用复合主键而不是由一个字段组成的主键,则表中有多个数据版本。
因此,表定义可以如下所示(如果在插入数据之前“知道”版本号):

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(), '....');

和选择将工作与上述相同。。。

相关问题