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

RavenDB Revision management on application level

不幸的是,这是一个非常普遍的问题...

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

此时将启动 "Revision"(比如修订版“#1”)。从此改版全部data/documents不能再改了。它是只读的。

随着时间的推移,工程师们灵机一动,开始根据 Revision #1 更新现有原理图。他们添加新功能、删除功能、将某些组件替换为较新版本等,直到他们获得修订 #2。

这是一个常见的要求:Rev.1 和 Rev.2 之间有什么变化?需要一些增量报告。

would/could 这对 RavenDB 意味着什么?

  1. 如果工程师开始新的改版,是否意味着 复制所有文档并使用新的 Id 插入它们 “/proj-1/rev-2/component-1000”?我将如何更新文档之间的关系 然后?调整所有关系"manually"?

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

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

任何有关如何为此类系统建模的提示都将不胜感激。

RavenDB 有文档修订的概念,它创建文档的只读快照。每当您修改文档时都会创建它们。

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

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