如何使用 Cassandra 对我的数据进行版本控制



我想使用 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_patch14BCE1209为键(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(), '....');

并选择将工作与上述相同...

最新更新