Я выполняю пакетную вставку для вставки данных в neo4j , но моя транзакция занимает очень много времени, поскольку моя база данных также постоянно увеличивается.
В моем проекте Только для одного случая у меня есть более 18 000 записей , которые предназначены для хранения в db и будут иметь отношения с целевым узлом. Каждая запись будет сохранена как Узел друга
Отношения похожи на
Target_Node- [r: followed_by] -> Friend_Node
Target_Node- [r: Friends_with] -> Friend_Nod e
Target_Node- [r: Performs_Activity] -> Friend_Node
Мой запрос выполняется для все случаи по отдельности, и весьма вероятно, что между целевым и дружественным узлом могут быть все три отношения.
Я отправляю 20 записей на поток для одной вставки, которая раскручивается по массиву записей и проверяет, запись уже существует в Friend_Node или Target_Node, в противном случае создайте ее как Friend_Node и затем назначьте ей отношение; Если у узла уже есть связь и в запрос передано новое отношение, то между двумя узлами также будет добавлено новое отношение.
Также я проверяю в своем запросе, есть ли у записи Location , затем я создаю узел Location и также назначаю ему связь.
Примечание : переменная create_rel может быть Friends_with, Followed_by или Activity_p
My запрос выглядит следующим образом:
"""UNWIND [{id: "1235" , uid : "0"}] as user
UNWIND """+ l +""" as c
OPTIONAL MATCH (n:Target {id : c.id , uid : "0"})
OPTIONAL MATCH (m:Friend {id : c.id , screen_name:c.screen_name, uid : "0"})
WITH coalesce(n, m) as node,user,c // returns first non-null value
CALL apoc.do.when(node is null, "MERGE (n:Friend {id:c.id, name:c.name, profile: c.profile, location:c.location, uid : user.uid}) RETURN n", '', {c:c,user:user}) YIELD value
with coalesce(node, value.n) as y,user,c
MERGE (u:Target {id: user.id , uid : user.uid})
"""+create_rel+"""
foreach (sc in c.cityn | merge(cn:Location {location:sc.location, loc_lower : sc.loc_lower}) merge (y)-[:`located_at`]-(cn))
"""
Db также иногда выдает ошибку TransientError.
Обратная связь приветствуется, так как я обучаюсь и буду благодарен за ценные предложения.
Заранее спасибо