【发布时间】:2017-05-03 12:11:18
【问题描述】:
我想使用 TRAVERSE 找到两个顶点之间的路径。但是我只需要具有特定属性的边缘,该属性大于先前边缘的相应属性。例如,我想按时间顺序使用边。
在 gremlin 中我可以这样做:
select gremlin("current.as('x').outE('SentTo').as('c').inV.outE('SentTo').
filter{e, m -> m.get('c').getProperty('time') <= e.getProperty('time')}.
inV.loop('x'){it.object.getProperty('name') != 'John' && it.loops < 10}.
path.filter{it.last().getProperty('name') =='John'}")
FROM (SELECT FROM Person WHERE name = 'Bill')
但几乎每个 orientdb 中的 gremlin 查询都会永远持续,并且给定的查询会因 GC 开销错误而崩溃。
为了比较,下面的查询大约需要 5 秒(我的数据库大约有 1M 顶点和 2M 边):
SELECT
$path
FROM
(TRAVERSE
out('SentTo')
FROM
(SELECT FROM Person WHERE name = 'John')
WHILE
$depth < 10)
WHERE (SELECT FROM Person WHERE name = 'Bill')
所以,我想知道如何修改 TRAVERSE 查询以比较边之间的时间或(几乎不)如何优化 gremlin 查询
谢谢
【问题讨论】: