Optimización de una carga masiva de Amazon Neptune - Amazon Neptune

Optimización de una carga masiva de Amazon Neptune

Utilice las siguientes estrategias para reducir al mínimo el tiempo de carga de una carga masiva de Neptune:

  • Limpie sus datos:

    • Asegúrese de convertir los datos a un formato de datos compatible antes de cargarlos.

    • Elimine cualquier duplicado o error conocido.

    • Reduzca el número de predicados únicos (por ejemplo, propiedades de bordes y vértices) en la medida de lo posible.

  • Optimice sus archivos:

    • Si carga archivos grandes, como archivos CSV, desde un bucket de Amazon S3, el programa de carga administra automáticamente la simultaneidad analizándolos en fragmentos que puede cargar en paralelo. El uso de una gran cantidad de archivos pequeños puede ralentizar este proceso.

    • Si carga varios archivos desde un prefijo de Amazon S3, el cargador carga automáticamente primero los archivos de vértices y, después, los archivos de bordes. Sin embargo, si sabe que solo va a cargar archivos de borde, puede establecer edgeOnlyLoad en TRUE para omitir la primera trasmisión en la que se analizan todos los archivos para determinar su contenido (vértices o bordes), de modo que los archivos de vértices encontrados se carguen antes que los archivos de borde. Esto puede acelerar considerablemente el tiempo de carga, especialmente cuando hay muchos archivos de borde. En caso de que también haya algunos archivos de vértices en el mismo prefijo (parámetro source) de Amazon S3, se cargarán, pero sin ninguna garantía de orden en relación con otros archivos. Además, si algunos vértices from o to no se incluyen en la base de datos, la inserción de bordes puede informar de errores con el mensaje FROM_OR_TO_VERTEX_ARE_MISSING. Como práctica recomendada, coloque los nodos y los bordes en prefijos de Amazon S3 independientes.

  • Compruebe la configuración del programa de carga:

    • Si no necesita realizar ninguna otra operación durante la carga, utilice el parámetro OVERSUBSCRIBEparallelism. Esta configuración de parámetros hace que el programa de carga masiva utilice todos los recursos de CPU disponibles cuando se ejecuta. Por lo general, se necesita entre un 60 % y un 70 % de la capacidad de la CPU para que la operación se ejecute tan rápido como lo permitan las restricciones de E/S.

      nota

      Cuando parallelism se establece en OVERSUBSCRIBE o HIGH (configuración predeterminada), al cargar datos de openCypher, existe el riesgo de que los subprocesos se encuentren en una condición de carrera y se bloqueen, lo que provoque un error LOAD_DATA_DEADLOCK. En este caso, ajuste parallelism a un valor inferior y vuelva a intentar realizar la carga.

    • Si su trabajo de carga incluye varias solicitudes de carga, utilice el parámetro queueRequest. Si configura queueRequest en TRUE, Neptune pone en cola sus solicitudes para que no tenga que esperar a que termine una para emitir otra.

    • Si las solicitudes de carga están en cola, puede configurar niveles de dependencia mediante el parámetro dependencies, de modo que si falla un trabajo, los trabajos dependientes también fallan. Esto puede evitar incoherencias en los datos cargados.

    • Si un trabajo de carga va a implicar la actualización de valores cargados anteriormente, asegúrese de establecer el parámetro updateSingleCardinalityProperties en TRUE. Si no lo hace, el programa de carga considerará un error el intento de actualizar un valor de cardinalidad única existente. En el caso de los datos de Gremlin, la cardinalidad también se especifica en los encabezados de las columnas de propiedades (consulte Encabezados de columnas de propiedades).

      nota

      El parámetro updateSingleCardinalityProperties no está disponible para los datos del marco de descripción de recursos (RDF).

    • Puede usar el parámetro failOnError para determinar si las operaciones de carga masiva deben fallar o continuar cuando se detecta un error. Además, puede usar el parámetro mode para asegurarse de que un trabajo de carga reanude la carga desde el punto en el que falló un trabajo anterior, en lugar de volver a cargar los datos que ya se habían cargado.

  • Escalamiento vertical: defina la instancia del escritor del clúster de base de datos en el tamaño máximo antes de cargarla de forma masiva. Tenga en cuenta que, si lo hace, también debe escalar verticalmente las instancias de réplica y lectura del clúster de base de datos o eliminarlas hasta que haya terminado de cargar los datos.

    Cuando se complete la carga masiva, asegúrese de volver a reducir verticalmente la instancia del escritor.

importante

Si experimenta un ciclo de reinicios repetidos de réplicas de lectura debido a un retardo en la replicación durante una carga masiva, es probable que sus réplicas no puedan mantener el ritmo del escritor en el clúster de base de datos. Escale los lectores a un tamaño superior al del escritor o quítelos temporalmente durante la carga masiva y vuelva a crearlos una vez finalizada la operación.

Consulte Parámetros de la solicitud para obtener más información sobre cómo configurar los parámetros de las solicitudes de carga.