保存和管理数据历史

Keeping and managing a history on data

我正在考虑在 OrientDB 数据库中保留所有数据更改历史记录的可能性。这段历史应该像普通数据一样是可探索的。比如:我将能够查询用户对其个人资料所做的所有更改。

我考虑了一些建议 here 的解决方案,为每个顶点 class 创建历史记录 class 并为每个更新(顶点版本增加)创建历史记录 class 每当顶点改变时。

这可以直接在 DB 内部使用某种类似 Oracle 的触发器来完成吗?

即使它用于顶点的法线数据,边又如何呢?我怎样才能将它们保存在历史中?和顶点之间?

在 OrientDB 中有更直接的方法吗?

我建议将更改和历史记录保存在某种事件存储中。这可以是一系列事件,每个事件都是 immutable,记录只会被附加。

这看起来像

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

这使得您可以从任意点重播历史记录,您可以跳过条目以抑制发生的错误等等。

如果您将此类记录存储在 table 或图表中则无关紧要。在图中,这可能是节点,其中每个节点都与自身前后的事件相关联,就像链表一样。在 table 中,这只是行。

如果您想了解有关此方法的更多信息,我可以建议您Event Sourcing by Martin Fowler