应用程序级别的RavenDB修订版管理

时间:2019-01-10 22:49:39

标签: ravendb data-modeling

不幸的是,这是一个非常笼统的问题...

想象一个创作应用程序来创建例如电气原理图。工程师绘制原理图,直到对他们的产品满意为止,并准备好进行生产。

这时将启动“修订”(例如,修订“#1”)。从现在开始,此修订版本的所有数据/文档都无法更改。它是只读的。

随着时间的流逝,工程师们有了聪明的主意,并开始根据修订版1更新现有的原理图。他们添加了新功能,删除了功能,用较新的版本替换了一些组件等,直到获得修订版#2。

这是一个共同的要求:在修订版1和2之间发生了什么变化?需要一些增量报告。

RavenDB意味着什么/将意味着什么?

  1. 如果工程师开始进行新的修订,是否意味着 复制所有文档并使用新的ID将其插入 “ / proj-1 / rev-2 / component-1000”?我将如何更新文档之间的关系 然后?可以“手动”调整所有关系吗?

  2. 快照数据库?我可以将快照数据库与当前数据库进行比较吗?

  3. 我如何找到这些修订之间的所有差异?
  4. 如果我不复制所有文档或不对它们进行快照,是否需要将所有更改保留在单独的文档中(事件日志样式),即DocX已删除,DocY已用Value1更新,DocZ已添加等?
  5. 我知道RavenDb有其自己的修订系统。它基于文档的单个更改。可以在这里利用这个优势吗?

任何暗示如何为这样的系统建模的方法都将受到高度赞赏。

1 个答案:

答案 0 :(得分:3)

RavenDB具有文档修订版本的概念,该版本创建文档的只读快照。它们是在您每次修改文档时创建的。

根据您的需要,我建议创建:plans/1238-A作为文档本身。 每当您需要标记只读修订时,请使用:plans/1238-A/revisions/1或类似的东西。

我建议不要修改任何引用,指向同一位置,但是在阅读修订时,请询问引用的修订