我正在尝试将其插入与Traceroute相关的NEO4J数据中。我有大约55k的独特节点,示踪剂约为80k。我正在使用python和neo4jrestclient与DB进行通信。带有Traceroutes的文件具有以下语法:
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节点后,插入速度迅速减慢,我无法放置任何其他内容。
您是否有唯一的约束:ipnode7(ip)?如果您不这样做,则DB被迫在所有标签上对具有给定IP的人进行所有节点上的标签扫描。最终的行为似乎与您遇到的行为非常相似,随着该标签的节点的增加,插入速度急剧下降。