OrientDB中未显示边缘记录



我最近发现了OrientDB,过去几周我一直在玩这个工具。然而,我今天注意到,每当我在两个顶点之间添加边时,似乎都会出现问题。如果我进行诸如SELECT FROM E之类的查询,则边缘记录不存在,这只是返回一个空集。尽管如此,还是可以将关系视为节点中的一个属性,并且像SELECT IN() FROM V这样的查询确实有效。

这就提出了一个问题;如果我不能直接访问边缘记录,我就不能用更多的属性修改它,或者即使可以,我也无法看到所做的更改。出于某种原因,我认为这可能是一个设计决定,但GratefulDeadConcerts示例数据库似乎没有这个问题。

我将用一个例子来说明我的问题:

让我们在OrientDB中从头开始创建一个图形数据库,并将其命名为"Test"。我们将创建几个顶点:

CREATE VERTEX SET TEST=123
CREATE VERTEX SET TEST=456

让我们假设@rid的这些节点分别是#9:0和#9:1,因为我们没有更改默认设置的任何内容。让我们在它们之间创建一个优势:

CREATE EDGE FROM #9:0 TO #9:1

现在,让我们来看看查询SELECT FROM V:的输出

orientdb {Test}> SELECT FROM V
----+----+----+----+----
#   |@RID|TEST|out_|in_
----+----+----+----+----
0   |#9:0|123 |#9:1|null
1   |#9:1|456 |null|#9:0
----+----+----+----+----
2 item(s) found. Query executed in 0.005 sec(s).

到目前为止一切看起来都很好。然而,查询SELECT FROM E的输出仅仅是0 item(s) found. Query executed in 0.016 sec(s).。如果我们执行SELECT IN() FROM V,我们会得到以下结果:

orientdb {Test}> SELECT IN() FROM V
----+-----+----
#   |@RID |IN
----+-----+----
0   |#-2:1|[0]
1   |#-2:2|[1]
----+-----+----
2 item(s) found. Query executed in 0.005 sec(s).

由此,我假设边是在集群编号-2中创建的,即使E类的默认集群是10,并且我没有添加任何其他集群。我怀疑这与问题有关,但我不确定如何解决它。我曾尝试向类E添加新的集群,并在这个新集群中创建边缘,但没有成功,我一直得到完全相同的结果。

所以我的问题是,如何使边缘记录显示在OrientDB中?

我使用OrientDB Community 1.7-RC2,并在两台不同的机器上尝试过,一台是Windows 7,另一台是Debian Wheezy。

提取自https://github.com/orientechnologies/orientdb/wiki/Troubleshooting#why-i-cant-see-all--the-edges:

默认情况下,如果边没有属性,OrientDB会将其作为"轻量级"边进行管理。这意味着,如果边没有属性,则不会将其存储为物理记录。但别担心,您的边缘仍然存在,但编码在一个单独的数据结构中。因此,如果从Eno边执行选择,则返回的边数或少于预期的边数。需要边缘列表是极为罕见的,但如果是这种情况,您可以通过发出一次命令来禁用此功能(速度较慢,数据库大小较大):

alter database custom useLightweightEdges=false

最新更新