Javers - 使用 Javers 而不是 Envers 有什么优势?

Javers - What are advantages of using Javers instead of Envers?

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

目前流行的实体版库有两个,分别是Envers和Javers。我已经查看了两者的比较,但没有关于此事的任何文章。

那么使用 Javers 相对于 Envers 的优缺点是什么?

Enver 就像 git 的数据库。

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

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

这让 Enver 可以在这个卷影副本中记录过去所做的更改。您可以将该阴影-table 移动到不同的数据库中。

JaVers 和 Envers 有两大不同:

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

    相反,JaVers 可以与任何类型的数据库和任何类型的应用程序一起使用 持久性框架。目前,JaVers 带有 MongoDB 和 流行 SQL 数据库。将来可能会添加其他数据库(如 Cassandra、Elastic)。

  2. Envers 的审计数据模型是应用程序数据模型的副本。正如文档所说: 对于每个被审计的实体,都会创建一个审计 table。 默认情况下,审核 table 名称是通过向原始名称添加 _AUD 后缀创建的。 这可能是一个优势,您的审计数据接近您的实时数据。 Envers 的 table 看起来很眼熟。 使用 SQL.

    查询它们很容易

    JaVers 使用自己的快照模型来处理审计数据。 快照与实时数据分离, JaVers 将它们保存到单个 table (jv_snapshots) 作为具有统一结构的 JSON 文档。 优点?您可以选择存储审计数据的位置。 默认情况下,JaVers 使用与应用程序相同的数据库, 但是你可以指向另一个数据库。例如,SQL 用于应用程序,MongoDB 用于 JaVers 或为贵公司的所有应用程序共享的集中式 JaVers 数据库)。

阅读这篇包含完整的 JaVers 与 Envers 比较的博文: https://javers.org/blog/2017/12/javers-vs-envers-comparision.html