Im mit versuchen, Daten zu laden db aus XML-Datei Neo4j py2neo mitLäden von Daten aus XML Neo4j py2neo
der Python-Skript funktioniert gut, aber es ist zu langsam, da Im Knoten zuerst, dann die Beziehungen mit zwei Ausnahmen-Handler hinzugefügt . Außerdem beträgt die Größe der XML-Datei ungefähr 200 MB.
Ich frage mich, ob es eine schnellere Möglichkeit gibt, diese Aufgabe zu erfüllen?
XML-Datei:
<Persons>
<person>
<id>XA123</id>
<first_name>Adam</first_name>
<last_name>John</last_name>
<phone>01-12322222</phone>
</person>
<person>
<id>XA7777</id>
<first_name>Anna</first_name>
<last_name>Watson</last_name>
<relationship>
<type>Friends</type>
<to>XA123</to>
</relationship>
</person>
</Persons>
Python-Skript:
#!/usr/bin/python3
from xml.dom import minidom
from py2neo import Graph, Node, Relationship, authenticate
graph = Graph("http://localhost:7474/db/data/")
authenticate("localhost:7474", "neo4j", "admin")
xml_file = open("data.xml")
xml_doc = minidom.parse(xml_file)
persons = xml_doc.getElementsByTagName('person')
# Adding Nodes
for person in persons:
ID_ = person.getElementsByTagName('id')[0].firstChild.data
fName = person.getElementsByTagName('first_name')[0].firstChild.data
lName = person.getElementsByTagName('last_name')[0].firstChild.data
# not every person has phone number
try:
phone = person.getElementsByTagName('phone')[0].firstChild.data
except IndexError:
phone = "None"
label = "Person"
node = Node(label, ID=ID_, LastName=fName, FirstName=lName, Phone=phone)
graph.create(node)
# Adding Relationships
for person in persons:
ID_ = person.getElementsByTagName('id')[0].firstChild.data
label = "Person"
node1 = graph.find_one(label, property_key="ID", property_value=ID_)
# relationships
try:
has_relations = person.getElementsByTagName('relationship')
for relation in has_relations:
node2 = graph.find_one(label,
property_key="ID",
property_value=relation.getElementsByTagName('to')[0].firstChild.data)
relationship = Relationship(node1,
relation.getElementsByTagName('type')[0].firstChild.data, node2)
graph.create(relationship)
except IndexError:
continue