2017-06-05 127 views
0

我有一個user表,我想要audit。我正在使用hibernate-envers。這是我的user類的樣子:MySQL審計表:hibernate-envers vs觸發器

@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字面上不需要任何額外的努力,所以努力/發展時間明智這是一個明顯的選擇。

回答

1

如果它符合需要並完成工作,則繼續。稍後,如果您發現它沒有達到某個標準,您可以隨時更改或報告性能問題,我可以查看它。

對於你的問題,沒有這樣的基準存在。如果這樣做的話,我甚至會厭倦這樣的基準,因爲它很可能會導致誤導。

通常情況下,開發人員會設計審計觸發器,就像您描述的那樣非常簡單。換句話說,他們充當行復印機而沒有別的。在插入,更新或刪除期間,他們只需將表中數據的快照複製到另一個表中。完成。

很顯然,Envers通過支持實體之間審計關係的概念來進一步發揮作用。它還允許你向它提供一個變化中的屬性有關的環境,讓您可以跟蹤之類的東西誰改變了什麼,爲什麼它被改變等

Envers的最大優勢其實是在獲得這樣的所需的努力框架工作。正如你所說的,它毫不費力,甚至在最複雜的實體關係中,它的超級簡單管理。

我確信有數據庫觸發器的性能與任何基於客戶端軟件的解決方案相同或更好的用例。在這種情況下,您沒有網絡延遲,並且觸發器也可以使用專有數據庫選項來提高性能,因爲框架將使用更多的跨平臺數據庫不可知特徵。

最後,您顯示的實體似乎非常簡單。恩維斯處理該實體幾乎沒有任何開銷。沒有關係,因此對於每個User行更改以及一個修訂實體而言,它都是一個簡單插入。

有一些Envers的實現可以使用更復雜的實體對象圖以及繼承和複雜關聯。