【问题标题】:Insert table Mutation to different Cassandra table将表 Mutation 插入到不同的 Cassandra 表
【发布时间】:2021-12-30 18:18:28
【问题描述】:

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

【问题讨论】:

  • 将您的问题更改为 - 如何使用 Cassandra 表进行审计?

标签: cassandra cassandra-3.0


【解决方案1】:

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

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);

通过这种表格设计,您可以保留历史记录。 这里,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');

上面的插入语句实际上是在更新 name 和 email 列的值。但是,由于时间戳作为聚类键,这将保存在三个不同的行中,每行的时间戳都是不同的。如果要获取最新值,只需在选择查询中使用 LIMIT。

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

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 2020-10-22
    • 2018-02-27
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多