插入 table 变异到不同的 Cassandra table

Insert table Mutation to different Cassandra table

我需要在历史记录中保留行的旧值 table 以便在我们进行行更新时进行审计。 Apache Cassandra 中是否有可用的解决方案来实现这一目标? 我查看了 Trigger,但文档中并未提及太多。如果我们使用触发器,则不确定性能问题。另外,如果我们使用触发器,它会在我们更新时为列提供旧值吗?

Cassandra 是保存行历史记录的最佳工具。我将尝试用一个例子来解释它。考虑下面的 table 设计 -

CREATE TABLE user_by_id (
userId text,
timestamp timestamp,
name text,
fullname text,
email text,
PRIMARY KEY (userId,timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC);

通过这种table设计,您可以保留历史记录。 这里,userid 是行分区键,时间戳是聚类键。同一用户的每次插入都将记录为不同的行。例如 -

insert into user_by_id (userId,timestamp ,name, fullname, email ) values ('1',<newTimeStamp>,'x',xyz,'x@xyz.com');
insert into user_by_id (userId,timestamp ,name, fullname, email ) values ('1',<newTimeStamp>,'y',xyz,'y@xyz.com');
insert into user_by_id (userId,timestamp ,name, fullname, email ) values ('1',<newTimeStamp>,'z',xyz,'z@xyz.com');

以上插入语句实际上是在更新姓名和电子邮件列的值。但是,由于时间戳作为聚类键,这将保存在三个不同的行中,每一行的时间戳将不同。如果您想获取最新值,只需在 select 查询中使用 LIMIT。

此设计保留了可用于审计目的的行的历史记录。