0

如果可以比较存储在不同数据库中的具有相同“_id”(相同的集合名称和“_keys”)的两个文档,我很感兴趣。

我的用例是一个自定义的“地图/布局引擎”,它“主要”由来自外部地理数据系统的“自动导入/转换作业”提供。

到目前为止,效果很好。

然而,在某些情况下,有必要手动调整某些对象的“x/y”坐标,以使它们更有用。通过再次运行导入作业(例如获取最新数据),所有手动调整都会丢失,因为它们只是被“自动”数据覆盖。

因此,我想到了一个由几个结构相同的 ArangoDB 数据库组成的系统设置,用于数据生命周期的不同“阶段”,例如:

  • “staging” - 新的“自动导入”数据放置在这里。
  • “生产” - 呈现给用户的“最终数据”,包括所有最新的手动调整都存储在这里。

相应的(简化的)生命周期将是这样的:

  1. 自动导入“暂存”
  2. 比较并将所有手动调整从“生产”导入“暂​​存”
  3. 将 1. 和 2. 中的“合并”内容部署为新的“生产”版本。

所以,这个主题是关于“生产”和“暂存”数据值之间的第 2 步的“比较阶段”。

在 SQL 中,我会用 sth 来表达它。像这样:

SELECT
x, y
FROM databaseA.layout AS layoutA
JOIN databaseB.layout ON (layoutA.id = layoutB.id) AS layoutB
WHERE
...         

感谢您提供有关如何使用 AQL 查询或 FOXX 服务在 ArangoDB 中解决此问题的任何提示!

4

1 回答 1

0

假设,如果您手头有一个版本控制图形数据库,您可以执行以下操作:

  1. 在第一次导入时,插入新数据R0,为每个插入的节点创建一个新的修订。
  2. 手动更改节点的某些字段,例如N在此数据中,从而产生新的修订N,例如R1不过,您以前的版本R0并没有丢失。
  3. 根据需要多次重复步骤 1 和 2。

最后,当您需要向最终用户显示此数据时,使用自定义应用程序逻辑将尽可能多的先前版本与当前版本合并,执行n-way合并而不是2-way合并。

如果您认为这可能是一个潜在的解决方案,您可以查看CivicGraph,它是构建在 ArangoDB 之上的版本控制层。

注意:我是 CivicGraph 的创建者,这个答案可以作为产品的促销,但我也相信它可以帮助解决您的问题。

于 2019-10-09T06:43:12.547 回答