我正在评估ArangoDB并尝试创建可能包含相同节点集合和相同边集合的多个图形 - 即使每个图形可能包含不同的物理文档和边缘。
然而,当尝试创建一个使用已经在另一个图形中使用的边集合的图形时,我得到了" [1921] ...边缘集合已经在边缘def中使用 "错误。
当图表可以共享相同的文档集和文档时,为什么无法重复使用现有关系?
要解决此问题,我必须为每个新图形创建一个单独的唯一命名边缘定义,并单独管理它们。
例如我的通用关系称为" next "。这种关系(边缘)可以在许多图中使用,因为它只是描绘了节点之间的通用链接。但是,每次创建新图形时,我还需要创建名为" [graph-name] -next" 的新边缘定义,而不是仅仅重新使用退出" 下"边缘定义 - 如果我尝试这样做,我会得到[1921]错误。
编辑: mchacki在下面的回复中表示应该可以在多个图表中使用一个关系 - 所以问题是:如果有可能怎么做而不会得到1921年错误吗
答案 0 :(得分:3)
图形模块和边缘定义的概念如下: 您可以定义一次关系,例如:
isFriend: Person -> Person
owns: Person -> Item
创建两个边集(isFriend和owns)和两个文档集(Person和Item)。
现在,您可以根据需要在尽可能多的图形中使用完全相同的关系。
假设您只使用social
关系的isFriend
图表。
但是,您同时使用eCommerce
关系和owns
关系也有isFriend
图表。
现在eCommerce
和social
共享isFriend
关系,ArangoDB完全支持。
不支持的是边缘定义说generic
,它在一个图中用作:
generic: Person -> Person
和另一个
generic: Item -> Item
这里的问题是,会有一个名为generic
的集合,两个图表都可以访问它。
在查询中,第一张图现在"知道"只有边Person
- > Person
在此集合中,第二个"知道"那只有Item
- > Item
关系。在两个图中,另一个图的关系没有任何意义,但可能被查询捕获。
所以这意味着如果你想在几个图形中重复存储的文档以外的存储边缘,你必须为这些情况创建一个相当通用的边缘定义,并自己处理意外的命中。
对于每个边缘定义,您可以在from
和to
位置添加任意多个顶点集合,甚至可以在运行时修改它们。
因此,在您的情况下,每次创建新图时,首先使用现有图之一(将进行传播)修改关系,以包含有关已添加集合的信息,并在新图中重复使用此关系。