Cargando datos a neo4j desde XML usando py2neo

Estoy tratando de cargar datos a neo4j db desde un archivo xml usando py2neo

esta secuencia de comandos de Python funciona bien, pero es demasiado lenta ya que primero agrego los nodos y luego las relaciones con dos controladores de excepciones. además de que el tamaño del archivo XML es de alrededor de 200 MB.

Me pregunto si hay una forma más rápida de realizar esta tarea?

Archivo XML:

  XA123 Adam John 01-12322222   XA7777 Anna Watson  Friends XA123    

script de python:

 #!/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 

el tiempo necesario para cargar los datos en neo4j se ha reducido significativamente mediante el uso de restricciones de propiedades únicas para una etiqueta específica.

 graph.cypher.execute("CREATE CONSTRAINT ON (n:Person) ASSERT n.ID IS UNIQUE")