1

我们在 AWS Neptune 中有 370 万个节点和 1120 万个关系。这里我们需要这些节点:OrganizationMember、和关系 :、Proposal、、。VoteMember-[:IN]->OrganizationVote-[:BELONGS_TO]->ProposalVote-[:VOTED_BY]->MemberMember-[:IN]->Organization

目标是构建查询,查找组织中的成对成员以及他们投票的提案数量vote.choice。这是查询:

g.V().has('Organization','id','${id}').as('d').
match(
 as('d').in('IN').hasLabel('Vote').as('v1').out('BELONGS_TO').hasLabel('Proposal').as('p'),
 as('d').in('IN').hasLabel('Vote').as('v2').out('BELONGS_TO').hasLabel('Proposal').as('p1').
  select('p1','p').where('p1',eq('p')
 ),
 as('v1').out('VOTED_BY').hasLabel('Member').as('m1'),
 as('v2').out('VOTED_BY').hasLabel('Member').as('m2').
  select('v1','v2').by('choice').where('v1',eq('v2'))).
  select('m1','m2').by('address').where('m1',lt('m2')).
   group().by(
    select('m1','m2')).by(select('p').count()
   ).
   order(local).by(values, desc).
   limit(local, 20)

问题是查询为具有大量成员和投票的组织返回此错误:

{"code":"MemoryLimitExceededException","detailedMessage":"Query cannot be completed due to memory limitations.","requestId":"e8f8a361-40c4-4db9-8da4-a618d0e20d92"}

可以在 AWS Neptune 上调整内存配置吗?或者应该优化查询以及优化它的方法是什么?

更新:

没有的查询match

g.V().has('Dao','organizationId','${id}').as('d').in('IN').hasLabel('Vote').as('v1').out('BELONGS_TO').hasLabel('Proposal').as('p'). 
 select('d').in('IN').hasLabel('Vote').as('v2').out('BELONGS_TO').hasLabel('Proposal').as('p1').where(eq('p')).select('v1').out('VOTED_BY').hasLabel('Member').as('m1'). 
 select('v2').out('VOTED_BY').hasLabel('Member').as('m2').where('v1',eq('v2')).by('choice').
 select('m1','m2').by('address').where('m1',lt('m2')).
   group().by( 
     select('m1','m2') 
   ).by(
     select('p').count()
   ).
 order(local).by(values, desc).
 limit(local,20)

原始密码查询:

CALL {
    MATCH (o:Organization { id: '${id}' })<-[:IN]-(p:Proposal)
    RETURN COUNT(p) AS total_proposals_count
}
WITH total_proposals_count
MATCH (o:Organization { id: '${id}' })<-[:IN]-(v1:Vote)-[:BELONGS_TO]->(p:Proposal)
MATCH (o)<-[:IN]-(v2:Vote)-[:BELONGS_TO]->(p)
MATCH (v1)-[:VOTED_BY]->(m1:Member)
MATCH (v2)-[:VOTED_BY]->(m2:Member)
WHERE m1.address < m2.address AND v1.choice = v2.choice
RETURN [m1, m2] AS members, COUNT(p) AS voted_together, total_proposals_count
ORDER BY voted_together DESC
LIMIT 20
4

0 回答 0