如何使用 Cassandra 对我的数据进行版本控制?
How can I version my data with Cassandra?
我想使用 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
作为值。
我熟悉 table 的创建,但无法弄清楚版本控制部分。
如果您使用复合主键而不是包含一个字段的主键,则 table 中有多个版本的数据。
因此 table 定义可能如下所示(如果您 "know" 插入数据之前的版本号):
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, '....');
到 select 给定键的最新值,您可以使用 LIMIT 1
:
SELECT * from test where id = '14BCE1209' LIMIT 1;
所有分区的 select 最新版本(不推荐,仅作为示例 - 需要一种特殊的方法来进行有效处理):
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(), '....');
和 select 将与上述相同...
我想使用 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
作为值。
我熟悉 table 的创建,但无法弄清楚版本控制部分。
如果您使用复合主键而不是包含一个字段的主键,则 table 中有多个版本的数据。
因此 table 定义可能如下所示(如果您 "know" 插入数据之前的版本号):
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, '....');
到 select 给定键的最新值,您可以使用 LIMIT 1
:
SELECT * from test where id = '14BCE1209' LIMIT 1;
所有分区的 select 最新版本(不推荐,仅作为示例 - 需要一种特殊的方法来进行有效处理):
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(), '....');
和 select 将与上述相同...