Запрос AWS Neptune Gremlin выдает MemoryLimitExceededException
У нас 3,7 млн узлов и 11,2 млн связей в AWS Neptune. Здесь нам понадобятся эти узлы:
Organization
,
Member
,
Proposal
,
Vote
и отношения: ,
Vote-[:BELONGS_TO]->Proposal
,
Vote-[:VOTED_BY]->Member
,
Member-[:IN]->Organization
.
Цель состоит в том, чтобы построить запрос, который находит пары участников в организации и подсчитывает предложения, за которые они проголосовали.
vote.choice
. Вот запрос:
g.V().has('Organization','id','${address}').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(20)
Проблема в том, что запрос возвращает эту ошибку для организаций с большим количеством участников и голосов:
{"code":"MemoryLimitExceededException","detailedMessage":"Query cannot be completed due to memory limitations.","requestId":"e8f8a361-40c4-4db9-8da4-a618d0e20d92"}
Можно ли настроить конфигурацию памяти на AWS Neptune? Или нужно оптимизировать запрос и как его оптимизировать?