Javers - 使用Javers而不是Envers有什么好处?

时间:2017-09-06 13:51:45

标签: spring spring-data-rest hibernate-envers auditing javers

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

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

那么使用Javers而不是Envers有什么好处和缺点?

2 个答案:

答案 0 :(得分:4)

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

  1. Envers是Hibernate插件。 它与Hibernate有很好的集成,但你只能在传统的SQL数据库中使用它。 如果您选择NoSQL数据库或SQL,但使用其他持久性框架 JOOQ - Envers不是一种选择。

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

  2. Envers的审计数据模型是应用程序数据模型的副本。正如文件所说: 对于每个经审计的实体,都会创建一个审计表。 默认情况下,通过在原始名称中添加_AUD后缀来创建审计表名称。 有利的是,您的审计数据接近您的实时数据。 Envers的桌子看起来很熟悉。 使用SQL查询它们很容易。

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

  3. 阅读此博客文章,其中包含完整的JaVers vs Envers比较: https://javers.org/blog/2017/12/javers-vs-envers-comparision.html

答案 1 :(得分:-1)

Enver就像是数据库的git。

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

  1. 在名为REVINFO的数据库中创建一个具有时间戳和PK的表。
  2. 对于每个被审核的实体,都会创建一个卷影副本。 Theese shadow-copies让每个字段都可以为空,PK不是PK。 Theese shadow-copies有一个新字段,表REVINFO表。
  3. 这使得Enver可以记录过去在此影子副本中所做的更改。您可以将影子表移动到其他数据库中。