使用Python将数据导入Neo4j需要花费时间

时间:2018-06-21 06:36:00

标签: neo4j py2neo

任何人都经历过使用py2neo和Python进行数据解析并将其导入Neo4j吗?我目前正在尝试解析一个相对较大的(18700r x 17c).csv文件,并将其创建的节点和关系存储到Neo中。通过使用py2neo,必须首先创建一个从py2neo.data.Node继承的模型,然后使用

for n in nodes:
    tx = graph.begin()
    tx.create(node)

for r in relations:
    tx = graph.begin()
    tx.create(r)

存储所有数据。使用time python ...运行时,解析和存储数据大约需要2.5分钟(实时),而解析和存储大约需要一半的时间。

另一种方法是创建一个很大的查询字符串,这是我设法做到的。完成后,可以运行graph.run(big_query_string)来完成相同的工作。现在解析大约需要3秒钟,存储需要2.5分钟。当我直接在浏览器中运行相同的查询字符串时,花了3分钟以上。

我们是同一项目的2个人。我在Neo4j上,另一个在DGraph上。它的核心是相同的解析代码,但是存储在DGraph上最多需要5秒钟...

有人对此有经验吗?

更新 查询中完全有115139个“ CREATE”语句。

2 个答案:

答案 0 :(得分:1)

Py2neo并未针对此类大型进口进行优化。最好使用Neo4j专用的导入工具之一。

答案 1 :(得分:0)

看起来您的代码正在逐节点迭代。如果要导入大量数据,则使用CSV文件将更加高效。也许您当前的CSV可以直接使用?

我使用python代码创建,修改或直接使用CSV文件,然后将其导入。我不是python专家,但这将为您提供一种方法的示例:

首先,建立与Neo4j的连接

import Neo4jLib
from neo4j.v1 import GraphDatabase
from py2neo import Graph, Path, Node, Relationship  #http://py2neo.org/v3/
import re

importDir="C:\\Users\\david\\.Neo4jDesktop\\neo4jDatabases\\database-49f9269f-5936-4b08-96b7-c2b3fa3006fa\\installation-3.3.5\\import\\"

def Neo4jConnectionSetup( ):
    uri = "bolt://localhost:7687"
    driver = GraphDatabase.driver(uri, auth=("neo4j", "your password"))

上传:

def UploadWithPeriodicCommit(Q):
    try:
        uri = "bolt://localhost:7687"
        driver = GraphDatabase.driver(uri, auth=("neo4j", "your password"))
        with driver.session() as session:
            session.run(Q)

其中q是cyper查询,例如:

Neo4jLib.UploadWithPeriodicCommit("USING PERIODIC COMMIT 10000 
LOAD CSV WITH HEADERS FROM 'file:///vcf.csv' AS line FIELDTERMINATOR '|' 
merge (p:PosNode{Pos:toInteger(line.Pos)})")

您的CSV应该进入正在使用的数据库的Import目录中。您仅指定其名称,而不指定完整路径。

这些上载和更新运行速度很快。