2015-10-12 146 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