我有一张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还是切换回触发器?
我想要一个基于性能的比较。因为使用envers实际上不需要任何额外的努力,所以就工作/开发时间而言,这是显而易见的选择。
发布于 2017-06-05 13:30:28
如果它符合需要并做好工作,那么就继续。稍后,如果您发现它的性能没有达到某些标准,您可以随时更改它或报告性能问题,我可以查看它。
对于你的问题,不存在这样的基准。如果是这样的话,我甚至会厌倦这样的基准,因为它最有可能误导人。
通常,开发人员设计像您这样的审计触发器非常简单。换句话说,它们就像一台行复印机,什么也不做.在插入、更新或删除期间,它们只是将数据的快照从表复制到另一个表中。好了。
显然,Envers通过支持实体间经过审计的关系的概念,进一步推进了这一点。它还允许您在更改期间提供有关环境的属性,以便跟踪更改的对象、更改的原因等。
Envers最大的优势实际上是要让这样一个框架发挥作用所需的努力。正如您已经指出的,它毫不费力,甚至在最复杂的实体关系中,管理这些关系也非常简单。
我确信,在某些用例中,数据库触发器的性能将与任何基于客户端软件的解决方案相同或更好。在这种情况下,您没有网络延迟,触发器也可以使用专有的数据库选项来提高性能,其中-作为框架将使用更多的跨平台数据库不可知论的功能。
最后,你展示的实体似乎非常简单。实际上,Envers处理该实体的开销很小,甚至没有。没有关系,因此对于每个User行更改都是一个简单的插入,对于修订实体则是一个简单的插入。
有些Envers的实现使用了具有继承和复杂关联的更复杂的实体对象图。
https://stackoverflow.com/questions/44366990
复制相似问题