2015-10-12 186 views
1

我正在考慮在OrientDB數據庫中保留所有數據更改的歷史記錄的可能性。這個歷史應該像普通數據一樣可以被發現。就像:我將能夠查詢用戶對他的個人資料所做的所有更改。保存和管理數據的歷史記錄

我認爲像建議here一樣的解決方案爲每個頂點類創建歷史類,併爲每個頂點更改時每個更新(頂點版本增加)創建一個歷史記錄。

這可以直接在數據庫內使用Oracle的某種觸發器來完成嗎?

即使那服務於頂點的正常數據邊緣呢?我怎麼能在歷史上保存它們?和頂點之間?

我有一個更直接的方法來做到這一點OrientDB?

回答

1

我會建議在某種事件存儲中保留更改和歷史記錄。這可以是一系列事件,每個事件都是不可變的,只有追加記錄。

這可能看起來像

VERTEX_CREATED(id: 1337, time: 1336624823) 
VERTEX_CHANGED(field: foo, before: A, after: B, time: 133676328) 
... 

這使得可以重播你想要的任何一點歷史,你可以跳過條目剿其中發生等錯誤。

如果您將這些記錄存儲在表格或圖表中並不相關。在圖形內部,這可能是節點,其中每個節點都與事件之前和之後的事件相連,如鏈接列表。在表格中,這隻會是行。

如果你想了解更多關於這種方法,我可以建議你Event Sourcing by Martin Fowler

+0

過去我曾嘗試過類似的方式來記錄事件日誌,但這可能意味着只能在過去的特定時間獲取一條記錄的狀態,我必須重播一系列事件。它看起來不像很多處理? – mohamnag

+0

您也可以通過節點標識過濾您的事件,並僅恢復或重新應用此子集。 –

+1

我不得不圍繞這一點做一些研究,並且每一步都變得更加清楚,這實際上是一種非常好的做法。我在這裏找到一個非常鼓舞人心的演講:https://www.youtube.com/watch?v = jO7ZVnsrPEk – mohamnag