Я пытаюсь создать огромную базу данных в neo4j, которая будет иметь около 2 миллионов узлов и около 4 миллионов ребер. Я смог ускорить процесс создания узла, создав узел в партиях по 1000 узлов каждый. Однако, когда я пытаюсь создать ребра между этими узлами, процесс замедляется, а затем истекает время. Первоначально я, хотя это могло быть медленным, поскольку я сливался по имени узла, но его медленнее, даже если я использую идентификаторы - я вручную создаю эти идентификаторы. Ниже я дал отрезал для данных и коды, для лучшего понимания проблемы -Ускорение создания ребер между узлом в Neo4j с использованием Py2Neo
Node.csv - этот файл содержит информацию о узле
NodeName NodeType NodeId Sachin Person 1 UNO Organisation 2 Obama Person 3 Cricket Sports 4 Tennis Sports 5 USA Place 6 India Place 7
Edges.csv - это файл содержит только узловые идентификаторы и их отношения
Node1Id Relationship Node2Id 1 Plays 4 3 PresidentOf 6 1 CitizenOf 7
код для создания узла приводится ниже -
from py2neo import Graph
graph = Graph()
statement =""
tx = graph.cypher.begin()
for i in range(len(Node)):
statement = "Create(n{name:{A} ,label:{C}, id:{B}})"
tx.append(statement,{"A": Node[i][0],"C":str(Node[i][1]), "B":str(Node[i][2])})
if i % 1000 == 0:
print str(i) + "Node Created"
tx.commit()
tx = self.graph.cypher.begin()
statement =""
Над кодом работает как чудо и закончил создание 2 млн узлов в течение 5 минут. кода для создания ребер приводятся ниже -
tx = graph.cypher.begin()
statement = ""
for i in range(len(Edges)):
statement = "MATCH (a {id:{A}}), (b {id:{B}}) CREATE (a)-[:"+ Edges[i][1]+"]->(b)"
tx.append(statement, {"A": Edges[i][0], "B": Edges[i][2]})
if i % 1000 == 0:
print str(i) + " Relationship Created"
tx.commit()
tx = graph.cypher.begin()
statement = ""
Выше код работает хорошо для создания первых 1000 отношений, но после того, что она занимает много времени, и соединение получает тайм-аут.
Мне срочно нужно исправить это, и любая помощь, которая может закрепить процесс создания отношений, была бы действительно полезна.
Обратите внимание: я не использую импорт csv из импорта оболочки Neo4j или Neo4j, поскольку они предполагают связь между узлами, которые должны быть исправлены. Принимая во внимание, что для меня отношения меняются, и его невозможно импортировать за одну взаимосвязь за раз, потому что это будет означать импорт почти в 2000 раз вручную.
У вас есть указатель (желательно ограничение уникальности) на свойство 'id'? –
Майкл предложил то же самое в нижнем ответе, и он работает как волшебство. Благодаря! – Pawan