¿La forma más rápida de realizar / agregar / insertar de forma masiva en Neo4j con Python?

Estoy encontrando Neo4j lento para agregar nodos y relaciones / arcos / bordes cuando uso la API REST a través de py2neo para Python. Entiendo que esto se debe a que cada llamada a la API REST se ejecuta como una sola transacción independiente.

Específicamente, agregar algunos cientos de pares de nodos con relaciones entre ellos lleva varios segundos, ejecutándose en localhost.

¿Cuál es el mejor enfoque para mejorar significativamente el rendimiento mientras se mantiene con Python?

¿Utilizando bulbflow y Gremlin sería una forma de construir una transacción de inserción masiva?

¡Gracias!

    Hay varias formas de realizar una creación masiva con py2neo , cada una de las cuales realiza solo una llamada al servidor.

    1. Utilice el método de create para crear una serie de nodos y relaciones en un solo lote.
    2. Utilice una sentencia CREATE encriptada.
    3. Use la nueva clase WriteBatch (recién lanzada esta semana) para hacer manualmente un lote de nodos y relaciones (esto es realmente solo una versión manual de 1).

    Si tiene algún código, me complace verlo y hacer sugerencias sobre ajustes de rendimiento. También hay bastantes pruebas de las que puedes inspirarte.

    Saludos, Nige

    El rendimiento de escritura de Neo4j es lento a menos que esté haciendo una inserción por lotes.

    El importador por lotes de Neo4j ( https://github.com/jexp/batch-import ) es la forma más rápida de cargar datos en Neo4j. Es una utilidad de Java, pero no necesita saber nada de Java porque solo está ejecutando el ejecutable. Maneja datos e índices escritos, e importa desde un archivo CSV.

    Para usarlo con Bulbos ( http://bulbflow.com/ ) Modelos, use el get_bundle() modelo get_bundle() para obtener los datos, el nombre del índice y las claves de índice, que están preparadas para la inserción, y luego envíe los datos a un CSV expediente. O si no desea modelar sus datos, simplemente envíe sus datos desde Python al archivo CSV.

    ¿Funcionará para ti?

    Hay tantas respuestas antiguas a esta pregunta en línea, que me tomó una eternidad darme cuenta de que hay una herramienta de importación que viene con neo4j. Es muy rápido y la mejor herramienta que pude encontrar.

    Aquí hay un ejemplo simple si queremos importar nodos de estudiantes:

     bin/neo4j-import --into [path-to-your-neo4j-directory]/data/graph.db --nodes students 

    El archivo de los alumnos contiene datos que se ven así, por ejemplo:

    ID del alumno: Id (alumno), nombre, año: int,: ETIQUETA

    1111, Amy, 2000, estudiante

    2222, Jane, 2012, Estudiante

    3333, juan, 2013, estudiante

    Explicación:

    • El encabezado explica cómo deben interpretarse los datos a continuación.
    • studentID es una propiedad con tipo Id (Student).
    • nombre es de tipo cadena que es el predeterminado.
    • año es un número entero
    • : LABEL es la etiqueta que desea para estos nodos, en este caso es “Estudiante”

    Aquí está la documentación para ello: http://neo4j.com/docs/stable/import-tool-usage.html

    Nota: Me doy cuenta de que la pregunta menciona específicamente python, pero otra respuesta útil menciona una solución que no es python.

    Bueno, yo mismo necesitaba un rendimiento masivo de neo4j. Termino haciendo cosas para mejorar el rendimiento del gráfico.

    1. Se deshicieron de py2neo, ya que había muchos problemas con él. Además, es muy conveniente utilizar el punto final REST proporcionado por neo4j, solo asegúrese de usar las sesiones de solicitud.
    2. Utilice consultas crudas sin cifrar para inserciones masivas, en lugar de cualquier OGM (Object-Graph Mapper). Eso es muy importante si necesita un sistema de alto rendimiento.
    3. El rendimiento no era suficiente para mis necesidades, por lo que terminé de escribir un sistema personalizado que combina 6-10 consultas usando las cláusulas WITH * AND UNION. Eso mejoró el rendimiento por un factor de 3 a 5 veces.
    4. Utilice el tamaño de transacción más grande con al menos 1000 consultas.

    Para insertar una gran cantidad de nodos en muy alta velocidad a Neo4K

    Insertador de lotes

    http://neo4j.com/docs/stable/batchinsert-examples.html

    En mi caso estoy trabajando en Java.