边缘记录未显示在OrientDB中

时间:2014-04-17 14:04:06

标签: sql graph edge orientdb

我最近发现了关于OrientDB的事情,过去几周我一直在玩这个工具。但是,我今天注意到,每当我在两个顶点之间添加边时,似乎有些错误。如果我进行SELECT FROM E之类的查询,则边缘记录不存在,这只会返回一个空集。尽管如此,可以将关系视为节点中的属性,SELECT IN() FROM V之类的查询可以正常工作。

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

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

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

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社区1.7-RC2并在两台不同的机器上尝试过这种机器,一台是Windows 7,另一台是Debian Wheezy。

1 个答案:

答案 0 :(得分:1)

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

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

alter database custom useLightweightEdges=false