【问题标题】:MySQL audit table: hibernate-envers vs TriggersMySQL 审计表:hibernate-envers vs Triggers
【发布时间】:2017-06-05 10:31:04
【问题描述】:

我有一个user 表,我想audit。我也在使用 hibernate-envers 。这就是我的user 类的样子:

@Audited
@Entity
@Table(name = "user")
public class User {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "phone_number")
    private String phoneNumber;

    @Column(name = "profile_pic")
    private String profilePic;
}

我不确定 hibernate-enver 的性能。在 hibernate-envers 之前,我使用触发器来保持审计跟踪。我应该继续使用 envers 还是切换回触发器?

PS:我想根据性能进行比较。因为使用 envers 从字面上看不需要任何额外的努力,所以努力/开发时间明智的选择是显而易见的。

【问题讨论】:

    标签: java mysql hibernate triggers hibernate-envers


    【解决方案1】:

    如果它符合需要并完成了工作,则继续。稍后,如果您发现它的性能未达到某个标准,您可以随时更改它或报告性能问题,我可以查看它。

    对于您的问题,不存在这样的基准。如果确实如此,我什至会厌倦这样的基准,因为它很可能会产生误导。

    通常,开发人员设计的审核触发器就像您描述的那样非常简单。换句话说,它们充当行复制器,仅此而已。在插入、更新或删除期间,他们只需将数据的快照从表复制到另一个。完成。

    显然,Envers 通过支持实体之间已审计关系的概念更进一步。它还允许您在更改期间为其提供有关环境的属性,以便您可以跟踪诸如谁更改了什么、更改原因等。

    Envers 的最大优势实际上是让这样的框架工作所需的努力。正如您所指出的,它毫不费力,即使在最复杂的实体关系中,管理这些关系也超级简单。

    我确信在某些用例中,数据库触发器的性能与任何基于客户端软件的解决方案相同或更好。在这种情况下,您没有网络延迟,并且触发器还可以使用专有数据库选项来提高性能,因为框架将使用更多跨平台数据库无关功能。

    最后,您展示的实体似乎超级简单。 Envers 处理该实体几乎没有开销。没有任何关系,因此对于每个User 行更改和修订实体都将是一个简单的插入。

    Envers 的一些实现使用了具有继承和复杂关联的更复杂的实体对象图。

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 2018-09-19
      • 2015-08-20
      • 2015-12-14
      • 2016-03-19
      • 2022-12-14
      • 2015-02-22
      • 2016-11-15
      相关资源
      最近更新 更多