应用层的RavenDB版本管理

应用层的RavenDB版本管理,ravendb,data-modeling,Ravendb,Data Modeling,不幸的是,这是一个非常普遍的问题 想象一个创作应用程序来创建例如电气原理图。工程师绘制示意图,直到他们对产品感到满意并准备好生产为止 此时将启动“修订”(如修订“#1”)。从现在起,此版本的所有数据/文件都不能再更改。它是只读的 随着时间的推移,工程师们有了聪明的想法,并开始根据修订版1更新现有的示意图。他们添加新功能、删除功能、用新版本替换某些组件等,直到有修订版2 那么,一个共同的要求是:Rev.1和Rev.2之间发生了什么变化?需要一些增量报告 这对RavenDB意味着什么 如果工程师们开

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

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

此时将启动“修订”(如修订“#1”)。从现在起,此版本的所有数据/文件都不能再更改。它是只读的

随着时间的推移,工程师们有了聪明的想法,并开始根据修订版1更新现有的示意图。他们添加新功能、删除功能、用新版本替换某些组件等,直到有修订版2

那么,一个共同的要求是:Rev.1和Rev.2之间发生了什么变化?需要一些增量报告

这对RavenDB意味着什么

  • 如果工程师们开始新的修订,这是否意味着 复制所有文档并使用新Id插入它们,如 “/proj-1/rev-2/component-1000”?如何更新文档之间的关系 那么?“手动”调整所有关系

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

  • 我如何找到这些修订之间的所有增量
  • 如果我没有复制所有文档或对其进行快照,我是否需要在单独的文档(事件日志样式)中保留所有更改,即DocX已被删除,DocY已用值1更新,DocZ已添加等
  • 我知道RavenDb有自己的修订系统。它基于文档的单个更改。这能在这里占便宜吗

  • 任何关于如何为这样一个系统建模的提示都将受到高度赞赏。

    RavenDB有文档修订的概念,这将创建文档的只读快照。无论何时修改文档,都会创建它们

    根据您的需要,我建议创建:
    plans/1238-A
    作为文档本身。 每当您需要在只读修订版上盖章时,请使用:
    plans/1238-a/revisions/1
    或类似内容


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

    不太确定我是否理解您的建议。1.启用内置修订。2.如果需要在应用程序级别进行修订,并且文档得到更新,请使用新ID存储文档(换句话说:复制它)。添加的文档也会获得新Id。如何处理Rev.2中的已删除?如果启用了修订功能,则当您删除包含修订的文档时,您仍然可以通过“修订箱”访问其修订。看。我想我应该用新的Id存储它,然后立即删除它。否则,我无法区分Rev1开发时的删除和Rev2中的删除。另一个问题是如何质疑这一切?我会收到带有“旧”ID的文档和带有新ID的文档。如何仅获取属于Rev2(最新修改日期)的内容?无法查询Id(或部分Id),对吗?要加载包含公共前缀的多个实体,请使用LoadStartingWith方法。看@Danielle不知道这件事!令人惊叹的!