在 ArangoDB 中使用相同边定义的多个图

Multiple graphs using same edge definitions in ArangoDB

我正在评估 ArangoDB 并尝试创建可能包含相同节点集合和相同边集合的多个图 - 即使每个图可能包含不同的物理文档和边。

但是,当我尝试创建一个使用已在另一个图中使用的边集合的图时,我得到“[1921] ...边集合已在边 def[=31 中使用=]”错误。

当图形可以共享相同的文档集合和文档时,为什么图形不能重用现有关系?

要解决此问题,我必须为每个新图形创建一个单独的唯一命名边定义并单独管理它们。

例如 我有一个名为“next”的通用关系。这种关系(边)可以用在许多图中,因为它简单地描述了节点之间的通用 link。但是,每次我创建一个新图形时,我还需要创建名为 "[graph-name]-next" 的新边缘定义,而不仅仅是重复使用退出“next”边缘定义 - 如果我尝试这样做,我会收到 [1921] 错误。

编辑: mchacki 在下面的回复中指出应该可以在多个图中使用一个关系 - 所以问题是:如果可能如何在不出现 1921 错误的情况下执行此操作?

图模块和边定义的思路如下: 您定义一次关系,例如:

isFriend: Person -> Person
owns: Person -> Item

创建两个边缘集合(isFriend 和 owns)和两个文档集合(Person 和 Item)。 现在您可以根据需要在任意数量的图形中使用完全相同的关系。 假设您有一个仅使用 isFriend 关系的 social 图。 但是您也有一个同时使用 owns 关系和 isFriend 关系的 eCommerce 图。 现在 eCommercesocial 共享 isFriend 关系,ArangoDB 完全支持。

不支持的是边定义generic,它在一个图中用作:

generic: Person -> Person

在另一个中是

generic: Item -> Item

这里的问题是,会有一个名为 generic 的集合,并且两个图都访问它。 在查询中,第一个图现在 "knows" 只能有边 Person -> Person 在这个集合中第二个 "knows" 只有 Item -> Item 关系。在两个图中,另一个图的关系没有任何意义,但可能会被查询捕获。

因此,这意味着如果除了存储的文档之外,还想在多个图中重用存储的边,则必须为这些情况创建一个相当通用的边定义,并自己处理意外的命中。 对于每个边定义,您可以在 fromto 位置添加任意多个顶点集合,甚至可以在运行时修改它们。

因此,在您的情况下,每次创建新图形时,您首先使用现有图形之一(将传播)修改关系以包含有关添加的集合的信息,然后在新图形中重用此关系。