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.

Ejecuta un script de Cypher gigantesco con CREATE (nodos y relaciones).

Tengo una pregunta sobre la configuración (configuración de Neo4j). Tengo un script Cypher de 15GB con solo palabras clave CREATE (sin carga de CSV), que tiene un patrón repetitivo en su interior: crea algunos nodos (generalmente de 10 a 30) y crea algunas relaciones que utilizan nodos anteriores en la sentencia de los IDs (una secuencia de relaciones en una palabra clave CREATE).

No necesito ninguna optimización (puedo esperar mucho tiempo para la carga), no necesito transacciones y las relaciones y nodos no están dispersos en el archivo.

Por supuesto, el navegador de Neo4j no es adecuado para esto, así que elegí cypher-shell. Intento cargar esos datos mediante cypher-shell, pero sigo recibiendo mensajes que indican que la carga falló debido al montón. El mismo mensaje en Bash y dentro de cypher-shell.

Creo que cypher-shell está intentando analizar todo el archivo (tal vez para encontrar identificadores dispersos en el archivo). No tiene sentido, por supuesto, porque no están allí.

Uso diferentes versiones de Neo4j (por ejemplo, 3.3.9), Linux Mint 20.2. Tengo 16GB de RAM.

¿Puede aconsejarme qué líneas debo cambiar en la configuración para que el proceso de carga sea exitoso? He probado con dbms.memory.heap.initial_size, dbms.memory.heap.max_size, dbms.memory.pagecache.size y dbms.tx_state.memory_allocation, pero sin éxito.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la información que proporcionaste, parece que el problema está relacionado con la memoria heap. Al cargar un script Cypher grande con un patrón repetitivo, Cypher-shell intenta analizar todo el archivo para encontrar identificadores dispersos en el script. Esto causa un error de memoria heap, lo cual impide que el proceso de carga se complete exitosamente.

    Para resolver este problema, debes intentar aumentar la asignación de memoria heap para Cypher-shell. Ya mencionaste que has probado con diferentes configuraciones, pero no has tenido éxito. Aquí hay algunos consejos que pueden ayudarte:

    • Asegúrate de estar cambiando las configuraciones correctas: dbms.memory.heap.initial_size y dbms.memory.heap.max_size son las dos configuraciones que controlan la asignación de memoria heap. dbms.memory.pagecache.size y dbms.tx_state.memory_allocation están relacionadas con otras funciones en Neo4j, como la memoria caché de página y las transacciones. Por lo tanto, concéntrate en las configuraciones de memoria heap primero.
    • Intenta aumentar el tamaño inicial de la memoria heap: Esta configuración determina la cantidad inicial de memoria heap que Cypher-shell obtiene al iniciarse. Si aumentas esta configuración, Cypher-shell tendrá más memoria disponible para analizar el script Cypher. Intenta establecerlo en 4GB o 8GB y ve si obtienes un resultado diferente.
    • Intenta aumentar el tamaño máximo de la memoria heap: Esta configuración determina la cantidad máxima de memoria heap que Cypher-shell puede utilizar. Si aumentas esta configuración, Cypher-shell podrá asignar más memoria cuando la necesite. Intenta establecerlo en 12GB o 14GB y ve si marca alguna diferencia.

    Ten en cuenta que aumentar la asignación de memoria heap solo puede hacer tanto. Cargar un script Cypher grande con un patrón repetitivo aún puede llevar mucho tiempo y puede haber otros factores que afecten el rendimiento de Cypher-shell. Si aún tienes problemas después de ajustar las configuraciones de memoria heap, considera dividir el script en trozos más pequeños y cargarlos por separado. Esta puede ser un enfoque más eficiente, especialmente si tu script es realmente grande.

Comments are closed.