我们目前正试图为我们的系统设计一个简单的模块,以使其可审计,但我们不确定最佳的策略是什么。我们希望尽可能早地修复它,因为在应用程序运行后,将所有数据迁移到不同的策略可能会成为一种标记。
策略1-我们目前的选择
我们目前正在试验的系统包括每次更新时创建一个新记录,在查询时,只需获得具有最新created_on时间戳的记录即可。如果我们有父子关系,而孩子要被更新,我们只会更新孩子,而不是父母。在查询这些信息时,我们会对每个受抚养人关系使用相同的策略。
策略2-不太喜欢它
我们考虑过的另一种策略是在每个表中有两个列,一个valid_from和一个valid_to时间戳。每次更新记录时,我们都会将valid_to填充到先前有效的记录,并将当前的记录保留一个空值。我们将遵循与前一种情况类似的抓取策略。
最后,我想强调,我们不坚持策略1的主要原因是,为了保存数据,要求我们经历一个相当复杂的差异过程,而我们不喜欢。每次前端使用新的有效负载调用我们的API时,我们都会获取最新的聚合(父级+子代+孙辈等),做一个完全不同的操作,并确定要更新什么。
所以我想问你们的问题是,你们有没有使用过其他你引以为豪的审计策略,并愿意分享?
发布于 2019-09-27 15:22:03
我建议你考虑下一种方法,除此之外,你已经有:
审计结构
对于每个要审计的表,创建另一个用于审计记录的表,其中包含要审计的字段加上字段revision (以及您想要的其他字段)。例如,如果您有表"Order",则创建"Order_aud“。
Revision字段应该是递增计数器,它会使您的审核记录有序。此外,如果希望能够识别保存在同一事务中的一组对象,则可以使其对每个事务都是唯一的。
更新数据
每次更新可审计表中的记录时,只需使用相同的数据在相应的审计表中创建新记录即可。
取取数据
一切都将与现在一样,因为您根本不更改原始表。
在冬眠寄主中使用了非常类似的方法。它将允许您独立于实际数据处理您的审计,您可以删除它,您可以对它进行分区,您可以对它进行切分,您可以将它存档,并且可以很容易地禁用它,使您的应用程序像以前一样工作。
https://stackoverflow.com/questions/58132491
复制相似问题