查询的Cosmos Greemlin性能问题

时间:2020-03-24 07:22:04

标签: gremlin azure-cosmosdb-gremlinapi

我正在尝试在下面运行此查询,但是出现超时问题。低效率在哪里?

   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())

1 个答案:

答案 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”边,这可能是一个昂贵的遍历。