0
我試圖插入到與traceroute相關的Neo4j數據。我有大約55K獨特的節點和跟蹤路由約80K。我使用Python和neo4jrestclient與db進行通信。與路由跟蹤文件的語法如下:如何將大量數據插入Neo4j
83.212.7.42 ;; ;; 83.212.7.41 ;; 62.217.100.63 ;; 83.97.88.69 ;; 62.40.112.215 ;; 62.40.98.150
我的代碼是:
from neo4jrestclient.client import GraphDatabase
from neo4jrestclient import client
db = GraphDatabase("...")
node = db.labels.create("ipNode")
with open("traceroutes") as input:
for line in input:
l= zip(line.split(';;'))
i=len(l)
try:
prev=l[0][0]
queryProbe = 'MERGE (a:ipNode7 {ip:"' + prev + '"})'
db.query(queryProbe, returns=(client.Node, str, client.Node))
for counter in range(1,i-1):
next = l[counter][0]
queryMergeNode = 'MERGE (b:ipNode7 {ip:"' + next + '"})'
db.query(queryMergeNode, returns=(client.Node, str, client.Node))
queryUpdateRelationship= 'MATCH (a:ipNode7 {ip:"' + prev + '"}),(b:ipNode7 {ip:"' + next + '"}) WHERE NOT (a)-[:precede]-(b) WITH a,b CREATE (a)-[:precede]->(b)'
db.query(queryUpdateRelationship, returns=(client.Node, str, client.Node))
prev=next
except Exception:
print "error"
的問題是,越來越20K節點正確插入後,插入速度迅速減慢,我不能放其他東西。
喜歡的東西: UQ = '創建約束ON(A:ipNode7)ASSERT a.ip是獨一無二的' db.query(UQ,返回=(client.Node,STR,client.Node)) 這足以把前一次打開(「traceroutes」)作爲輸入:? – RamsesXVII
我認爲它應該與其他查詢分開,你只需要爲db創建一次約束,那麼它將在db的生命週期中自動使用。 – InverseFalcon