es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es la mejor manera de importar datos que tienen diferentes tipos de nodos y relaciones entre ellos?

Tengo un requisito en el que debo importar al menos 8000 nodos y 19000 relaciones en total. Hay diferentes tipos de relaciones con diferentes propiedades y lo mismo sucede con los nodos.

El problema es el tiempo que se tarda en ejecutar la consulta. He dividido la consulta en pequeñas consultas diferentes. Les proporciono diferentes parámetros y uso UNWIND para procesar los datos en lotes en todas las subconsultas. Sin embargo, esto lleva mucho tiempo. Se tarda alrededor de 7 segundos cada vez en mi máquina local.

Otro enfoque que probé para reducir este tiempo fue crear una consulta que consistiera solo en CREATE y OPTIONAL MATCHes. Entonces, analizaría un BATCH y crearía una consulta como la siguiente:

OPTIONAL MATCH (target1 { id: target1Id })
OPTIONAL MATCH (target2 { id: target2Id })
….
CREATE (n1:n1Label { …n1Properties })
CREATE (n1)-[:r1 {…properties}]->(target1)
CREATE (n2:n2Label { …n2Properties })
CREATE (n2)-[:r2 {…properties}]->(target7)

Sin embargo, fue mucho más lento, ya que llevó alrededor de 5 segundos al sistema de base de datos procesar cada lote.

Estoy completamente perdido acerca de cómo mejorar el rendimiento. He implementado la creación de índices. Sin embargo, no producen mucho efecto.

Agradecería mucho sus sugerencias sobre este problema.

Gracias.

ACTUALIZACIÓN

Así es como se ve el JSON de entrada:

[
{
p1: {
x: “”,
y: “”,
z: [{…}, {…}, {…}],
a: [{…}, {…}, {…}]
},
p2: {
x1: “”,
x2: “”,
},
p3: {
x: “”,
y1: “”,
z: [{…}, {…}, {…}]
},
p4: {
x1: “”,
y: “”,
a: [{…}, {…}, {…}]
}
},

]

Las propiedades son solo claves de prueba. No estoy seguro si se me permite revelar las claves, así que lo estoy haciendo de esta manera.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Tienes el requisito de importar alrededor de 8000 nodos y 19000 relaciones en total, con diferentes tipos de relaciones y propiedades tanto para los nodos como para las relaciones. Has desglosado la consulta en consultas más pequeñas y has utilizado UNWIND para procesar los datos por lotes, pero está llevando mucho tiempo (7 segundos por lote). También has probado un enfoque con CREATE y OPTIONAL MATCH, pero fue aún más lento (5 segundos por lote). Has implementado la creación de índices, pero no pueden producir mucho efecto.

    Dado el JSON de entrada que proporcionaste, es difícil proporcionar una respuesta definitiva sin más información. Sin embargo, algunas posibles soluciones podrían incluir:

    • Optimizar la consulta utilizando MERGE en lugar de CREATE y OPTIONAL MATCH
    • Utilizar LOAD CSV para importar los datos por lotes
    • Utilizar apoc.periodic.iterate para procesar los datos por lotes
    • Utilizar apoc.periodic.commit para confirmar los datos por lotes
    • Utilizar apoc.import.graph para importar los datos de una sola vez
    • Utilizar apoc.export.graph para exportar los datos de una sola vez

    También es posible que el problema esté relacionado con el hardware o la configuración de la base de datos. Puede ser conveniente considerar la optimización de la configuración de la base de datos o la actualización del hardware para mejorar el rendimiento.

    Esperamos que esta información ayude.

Comments are closed.