我正在尝试在下面运行此查询,但是出现超时问题。低效率在哪里?
g.V().hasLabel('RiskLibrary','name','General
Business','active','1').as('lib').select('lib').
outE('CONTAINS_RISK').select('lib').project('Risk
Library','Risks').by('name').by(out('CONTAINS_RISK').project('Name',
'Description','Impacts','Causes').by('name').by('description').
by(both('IMPACTS').project('name').by('name').fold()).
by(both('CAUSES').project('name').by('name').fold()).fold())
答案 0 :(得分:0)
关于遍历的事情似乎不正确。对于初学者来说,hasLabel()
似乎是用不是标签的参数来调用的。我认为遍历应该是:
g.V().has('RiskLibrary', 'name', 'General Business').has('active', '1').as('lib').
select('lib').
outE('CONTAINS_RISK').
select('lib').
project('Risk Library', 'Risks').
by('name').
by(out('CONTAINS_RISK').
project('Name', 'Description', 'Impacts', 'Causes').
by('name').
by('description').
by(both('IMPACTS').
project('name').by('name').
fold()).
by(both('CAUSES').
project('name').by('name').
fold()).
fold())
如果这是正确的,那么我想知道遍历的目的到底是什么。从目前的情况来看,我希望每个project('Risk Library', 'Risks')
都能够outE('CONTAINS_RISK')
。对于select('lib')
,每个边缘都将获得相同的输出,而Vertex
将从中获取原始project('Risk Library', 'Risks')
。如果您不打算这样做,可以想像一次又一次地执行笨重的as('lib')
会花费大量的查询费用。
假设其余遍历都是正确的,我认为您只需要除去project('Risk Library', 'Risks')
的步骤标签和直至g.V().has('RiskLibrary', 'name', 'General Business').has('active', '1').
project('Risk Library', 'Risks').
by('name').
by(out('CONTAINS_RISK').
project('Name', 'Description', 'Impacts', 'Causes').
by('name').
by('description').
by(both('IMPACTS').
project('name').by('name').
fold()).
by(both('CAUSES').
project('name').by('name').
fold()).
fold())
的行,因此:
{{1}}
也就是说,根据“ CONTAINS_RISK”边的每个相对顶点存在多少“ IMPACTS”和“ CAUSES”边,这可能是一个昂贵的遍历。