如何将大量数据插入NEO4J



我正在尝试将其插入与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的人进行所有节点上的标签扫描。最终的行为似乎与您遇到的行为非常相似,随着该标签的节点的增加,插入速度急剧下降。

最新更新