任何人都经历过使用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”语句。
答案 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目录中。您仅指定其名称,而不指定完整路径。
这些上载和更新运行速度很快。