【问题标题】:Auditing using Data tables vs Separate Audit tables使用数据表审计与单独审计表
【发布时间】:2015-02-15 04:27:05
【问题描述】:

我正在设计一个新的 Java 应用程序,它对审计有非常严格的要求。这里有一个简短的上下文:

我有一个具有多个一对多嵌套关系的复杂实体。如果任何字段发生更改,我需要将其视为对象的新版本,并且所有这些都需要进行审核。现在我有两个选择:

1.) 不要做任何更新操作,只要有任何变化就插入一个新实体。这将要求我创建所有关系对象(即使它们尚未更改),因为我不想保留对任何先前版本对象的引用。我的数据表也成为我的审计表。

2.) 始终执行更新操作并在单独的表中维护审计信息。这会在实施方面增加一些复杂性。

我想知道这两种方法中的任何一种是否有好的做法和坏的做法。

谢谢, -csn

【问题讨论】:

  • 您可以使用 Hibernate Envers 自动执行第二个选项。

标签: java jpa database-design entity audit


【解决方案1】:

应该定义您的选择是您对“实时”数据和审计的插入/更新/读取模式。

最常见的是,这两种模式都非常不同。
- 考虑“实时”这在很大程度上取决于您的应用程序,但我可以想象您有重要的插入;重大更新;很多阅读。实时数据还需要事务性,并且需要保持一致性的表之间有很多关系。他们可能需要快速而复杂的搜索。许多列上的索引
- 审计有很多插入;几乎没有更新;很少读。阅读、搜索不需要复杂的搜索(例如,您只需查阅审计并按日期对其进行排序)和许多列上的索引。

因此,随着负载和数据大小的增加,您可能需要拆分数据并针对您的用例优化表。

【讨论】:

  • 是的,这是有道理的。可扩展性是我担心的一个问题,因为这些数据会快速增长。
猜你喜欢
  • 2010-12-14
  • 1970-01-01
  • 2011-03-17
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
相关资源
最近更新 更多