0

我正在尝试在下面运行此查询,但遇到超时问题。这里的低效率在哪里?

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

1 回答 1

1

关于您的遍历的某些内容似乎不正确。对于初学者来说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')从中获取原始数据相同的输出Vertexproject('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())

也就是说,根据“CONTAINS_RISK”边的每个相对顶点存在多少“IMPACTS”和“CAUSES”边,这可能仍然是一个昂贵的遍历。

于 2020-03-24T10:55:30.813 回答