7

我正在使用 Spring Data REST 开发一个 RESTful API。现在对于审计,Spring 确实可以选择审计元数据created_datemodified_date但它们不提供实体版本控制。

目前有两个流行的实体版本库,即 Envers 和 Javers。我已经查看了两者的比较,但没有关于这个问题的任何文章。

那么使用 Javers 而不是 Envers 的优缺点是什么?

4

2 回答 2

13

JaVers 和 Envers 之间有两个很大的区别:

  1. Envers 是 Hibernate 插件。它与 Hibernate 有很好的集成,但您只能将它与传统的 SQL 数据库一起使用。如果您选择了 NoSQL 数据库或 SQL,但使用了其他持久性框架(如 JOOQ)——Envers 不是一个选项。

    相反,JaVers 可以与任何类型的数据库和任何类型的持久性框架一起使用。目前,JaVers 为 MongoDB 和流行的 SQL 数据库提供了存储库实现。将来可能会添加其他数据库(如 Cassandra、Elastic)。

  2. 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

于 2017-09-07T07:00:57.983 回答
-2

Enver 就像数据库的 git。

我不知道 Javers,但完整的 Envers 数据绑定具有以下优点:

  1. 在名为 REVINFO 的数据库中创建了一个表,该表具有时间戳和 PK。
  2. 对于每个被审计的实体,都会创建一个卷影副本。这些影子副本的每个字段都可以为空,并且 PK 不是 PK。这些影子副本有一个新字段,即对 REVINFO 表的引用。

这使 Enver 可以在此卷影副本中记录过去所做的更改。您可以将该影子表移动到不同的数据库中。

于 2017-09-06T14:46:10.640 回答