Вы никогда не должны генерировать длинный запрос Cypher, который содержит N небольших вариаций по существу того же самого кода Cypher.Это очень медленно и занимает много памяти.
Вместо этого вы должны передавать параметры в гораздо более простой запрос Cypher.
Например, при созданииузлы, вы можете передать параметр data
следующему коду шифра:
UNWIND $data AS d
CREATE (user:user {task_id: d.taskId, id: d.id, root: 1, private: 0})
Значение параметра data
, которое вы передадите, будет списком карт, и каждая карта будет содержать taskId
и id
.Предложение UNWIND
"раскручивает" список data
в отдельные d
карты.Это было бы намного быстрее.
Нечто подобное необходимо сделать с вашим кодом создания отношений.
Кроме того, чтобы использовать любой из ваших :user
индексов, ваш MATCH
предложение ДОЛЖНО указывать метку :user
в соответствующих шаблонах узлов.В противном случае вы просите Cypher сканировать все узлы независимо от метки, и такой тип обработки не сможет использовать преимущества индексов.Например, соответствующий запрос должен начинаться с:
MATCH (root_user:user), (friend_user:user)
...