我正在使用 Spring Data REST 开发一个 RESTful API。现在对于审计,Spring 确实可以选择审计元数据created_date
,modified_date
但它们不提供实体版本控制。
目前有两个流行的实体版本库,即 Envers 和 Javers。我已经查看了两者的比较,但没有关于这个问题的任何文章。
那么使用 Javers 而不是 Envers 的优缺点是什么?
我正在使用 Spring Data REST 开发一个 RESTful API。现在对于审计,Spring 确实可以选择审计元数据created_date
,modified_date
但它们不提供实体版本控制。
目前有两个流行的实体版本库,即 Envers 和 Javers。我已经查看了两者的比较,但没有关于这个问题的任何文章。
那么使用 Javers 而不是 Envers 的优缺点是什么?
Envers 是 Hibernate 插件。它与 Hibernate 有很好的集成,但您只能将它与传统的 SQL 数据库一起使用。如果您选择了 NoSQL 数据库或 SQL,但使用了其他持久性框架(如 JOOQ)——Envers 不是一个选项。
相反,JaVers 可以与任何类型的数据库和任何类型的持久性框架一起使用。目前,JaVers 为 MongoDB 和流行的 SQL 数据库提供了存储库实现。将来可能会添加其他数据库(如 Cassandra、Elastic)。
Envers 的审计数据模型是应用程序数据模型的副本。正如文档所说:
对于每个被审计的实体,都会创建一个审计表。默认情况下,审计表名称是通过_AUD
在原始名称中添加后缀来创建的。
这可能是一个优势,您拥有接近实时数据的审计数据。Envers 的桌子看起来很熟悉。使用 SQL 很容易查询它们。
JaVers 使用自己的 Snapshot 模型来处理审计数据。快照与实时数据分离,JaVers 将它们jv_snapshots
作为具有统一结构的 JSON 文档保存到单个表 ( ) 中。优点?您可以选择存储审计数据的位置。默认情况下,JaVers 使用与应用程序相同的数据库,但您可以指向另一个数据库。例如,用于应用程序的 SQL 和用于 JaVers 的 MongoDB 或为您公司中的所有应用程序共享的集中式 JaVers 数据库)。
阅读这篇博文,其中包含完整的 JaVers 与 Envers 比较: https ://javers.org/blog/2017/12/javers-vs-envers-comparision.html
我不知道 Javers,但完整的 Envers 数据绑定具有以下优点:
这使 Enver 可以在此卷影副本中记录过去所做的更改。您可以将该影子表移动到不同的数据库中。