我正在评估 ArangoDB 并尝试创建多个可能包含相同节点集合和相同边集合的图 - 即使每个图可能包含不同的物理文档和边。
然而,当尝试创建一个使用已在另一个图中使用的边集合的图时,我得到“[1921] ... 边缘集合已在边缘定义中使用" error.
当图可以共享相同的文档集合和文档时,为什么图不能重用现有关系?
为了解决这个问题,我必须为每个新图创建一个单独的唯一命名的边定义并单独管理它们。
E.g.我有一个通用关系,称为“next“。这种关系(边)可以在许多图中使用,因为它简单地描述了节点之间的通用链接。但是,每次我创建新图时,我还需要创建新的边定义,称为"[图表名称]-next"而不是仅仅重用退出的“next“边缘定义 - 如果我尝试这样做,我会收到 [1921] 错误。
Edit:mchacki 在下面的回复中指出应该可以在多个图中使用一种关系 - 所以问题是:如果可能的话,如何在不出现 1921 错误的情况下执行此操作?
图模块和边定义的思想如下:
您定义一次关系,例如:
isFriend: Person -> Person
owns: Person -> Item
创建两个边缘集合(isFriend 和 owns)和两个文档集合(Person 和 Item)。
现在,您可以在任意数量的图表中使用完全相同的关系。
假设你有一个social
图表仅使用isFriend
关系。
但你也有一个eCommerce
图表使用owns
关系和isFriend
同时关系。
现在eCommerce
and social
share isFriend
ArangoDB 完全支持这种关系。
不支持的是边缘定义generic
在一张图中使用如下:
generic: Person -> Person
在另一个中作为
generic: Item -> Item
这里的问题是,会有一个名为generic
两个图都可以访问它。
在查询中,第一个图现在“知道”只能有边Person
-> Person
在这个集合中,第二个“知道”只有Item
-> Item
关系。在这两个图中,另一个图的关系没有任何意义,但可能被查询捕获。
因此,这意味着,如果您除了多个图中存储的文档之外还想重用存储的边,则必须为这些情况创建一个相当通用的边定义,并自己处理意外的命中。
对于每个边定义,您可以添加任意多个顶点集合from
and to
位置,甚至在运行时修改它们。
因此,在您的情况下,每次创建新图表时,您首先使用现有图表之一(将被传播)修改关系以包含有关添加的集合的信息,然后在新图表中重用此关系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)