【发布时间】:2015-08-04 06:54:05
【问题描述】:
我们正在构建一个联系人管理应用程序。每个联系人都是一个节点。如果发现 2 个或更多联系人是重复的,我们希望提供将它们合并到单个节点的能力。此外,我们希望维护合并前的节点状态,以便我们可以在需要时撤消合并 (*)。
我们建议通过创建一个新节点并使用“merged_into”边缘将旧节点链接到它,并将状态属性设置为“已移除”来对此进行建模。
现在我们有两个选择:
我们将两个合并节点的所有现有边复制到新节点
我们没有。
选项 2 提供了一个更简单的数据结构,但是它使我们所有的查询变得更加复杂。因为我们必须通过潜在的多级合并节点返回来获取所有边
选项 1 会保持查询不变,但会引入很多额外的边。
我们还在考虑第三种选择,即创建一个完整数据库的副本,其中所有合并的节点都已折叠。即只是当前联系人的视图。这需要与主数据库保持同步。
对于处理此问题的最佳方式的任何建议/建议,我们将不胜感激。
我还想建议一个新的“折叠”查询功能,它可以让选项 2 更轻松地工作......像这样:
select out("attended_class") collapse("merged_into") from 10#12
这将折叠指定的边,直到没有进一步的出站“merged_into”边,从而检索附加到先前(预合并)节点的所有边
- 为了保持简单,我们不允许在新节点上定义任何边后进行取消合并操作
亲切的问候
斯瓦米·凯瓦拉
【问题讨论】:
标签: arangodb