Prácticas recomendadas sobre la carga masiva

Esta página proporciona lineamientos para la carga masiva de grandes volúmenes de datos en Cloud Spanner.

Tienes varias opciones para cargar datos de forma masiva en Cloud Spanner:

Lineamientos de rendimiento para la carga masiva

Para lograr un rendimiento óptimo de carga masiva, sigue estos lineamientos:

  • Minimiza la cantidad de divisiones que están involucradas en cada transacción de escritura. Gracias a que la capacidad de procesamiento de escritura se maximiza cuando hay menos divisiones en una transacción, el rendimiento también se maximiza.

  • Maximiza el uso de particiones para distribuir la escritura de las particiones en las tareas de trabajo.

Cloud Spanner usa la división basada en la carga para distribuir de manera uniforme la carga de datos entre los nodos. Después de unos minutos de carga alta, Cloud Spanner ingresa límites divididos entre las filas de tablas no intercaladas. En general, si la carga de datos está bien distribuida y sigues las prácticas recomendadas para el diseño de esquema y la carga masiva, la capacidad de procesamiento de escritura se duplicará cada algunos minutos hasta saturar los recursos de CPU disponibles en tu instancia.

Particiona tus datos por clave primaria

A fin de obtener una capacidad de procesamiento de escritura óptima para cargas masivas, particiona tus datos por clave primaria con este patrón:

  • Cada partición contiene un rango de filas consecutivas, según lo determinan las columnas de claves.
  • Cada confirmación contiene datos para una sola partición.

Recomendamos que la cantidad de particiones sea 10 veces la cantidad de nodos en tu instancia de Cloud Spanner. Para asignar filas a las particiones, haz lo siguiente:

  • Ordena tus datos por clave primaria.
  • Divide los datos en 10 x (el número de nodos) separados, con particiones de igual tamaño.
  • Crea y asigna una tarea de trabajo independiente para cada partición. La creación de las tareas de trabajo se realiza en tu aplicación. No es una función de Cloud Spanner.

Si sigues este patrón, deberías ver una capacidad de procesamiento de escritura masiva general de una máxima de entre 10 y 20 MB por segundo por nodo para cargas grandes.

A medida que cargas datos, Cloud Spanner crea y actualiza divisiones para balancear la carga en los nodos de tu instancia. Durante este proceso, es posible que se produzcan disminuciones temporales en la capacidad de procesamiento.

Ejemplo

Tienes una configuración regional con 3 nodos. Tienes 90,000 filas en una tabla no intercalada. Las claves primarias de la tabla varían de 1 a 90,000.

  • Filas: 90,000 filas
  • Nodos: 3
  • Particiones: 10 x 3 = 30
  • Filas por partición: 90,000 / 30 = 3,000.

La primera partición incluye el rango de clave de 1 a 3,000. La segunda partición incluye el intervalo de clave de 3,001 a 6,000. La trigésima partición incluye el rango de clave de 87,001 a 90,000. (No debes usar claves secuenciales en una tabla grande. Este ejemplo es solo para demostración).

En cada tarea de trabajo se envían las escrituras para una sola partición. Dentro de cada partición, debes escribir las filas de forma secuencial por clave primaria. Escribir filas al azar, con respecto a la clave primaria, también proporciona una capacidad de procesamiento bastante alto. La medición de las ejecuciones de prueba te brindará estadísticas sobre qué enfoque proporciona el mejor rendimiento para el conjunto de datos.

Si decides no usar particiones

Escribir filas aleatorias en una confirmación en la que cada mutación inserta una sola fila puede ser más lento que escribir una fila a la vez. Es probable que haya varias divisiones, ya que cada fila aleatoria podría pertenecer a una división diferente. En el peor de los casos, cada escritura involucra cada división en tu instancia de Cloud Spanner. Como se mencionó antes, la capacidad de procesamiento de escritura disminuye cuando se usan más divisiones para una escritura.

Evita que haya rechazos

Es posible enviar más solicitudes de escritura de lo que Cloud Spanner puede manejar. Cloud Spanner maneja la sobrecarga mediante la anulación de transacciones; esto se denomina rechazo. En el caso de las transacciones de solo escritura, Cloud Spanner vuelve a intentar la transacción de forma automática. En esos casos, el rechazo se muestra como una latencia alta. Durante cargas pesadas, el rechazo puede durar hasta un minuto. Durante cargas demasiado pesadas, el rechazo puede tomar varios minutos. Si quieres evitar el rechazo, debes regular las solicitudes de escritura para mantener el uso de CPU dentro de los límites razonables.

Confirma entre 1 MB y 5 MB de mutaciones a la vez

Cada escritura en Cloud Spanner contiene una sobrecarga, sea grande o pequeña. Para maximizar la capacidad de procesamiento, maximiza la cantidad de datos almacenados por escritura. Las escrituras más grandes reducen la proporción de sobrecarga por escritura. Una buena técnica es que cada confirmación mute cientos de filas. Cuando se escriben filas relativamente grandes, un tamaño de confirmación de 1 MB a 5 MB en general proporciona el mejor rendimiento. Cuando se escriben valores pequeños o valores que se indexan, en general, es mejor escribir como máximo unos cientos de filas en una sola confirmación. Más allá del tamaño del tamaño de la confirmación y la cantidad de filas, ten en cuenta que existe una limitación de 20,000 mutaciones por confirmación. Para determinar el rendimiento óptimo, debes probar y medir la capacidad de procesamiento.

Las confirmaciones superiores a 5 MB o más que unos cientos de filas no proporcionan beneficios adicionales y corren el riesgo de exceder los límites de Cloud Spanner sobre el compromiso y las mutaciones por confirmación.

Lineamientos para índices secundarios

Si tu base de datos tiene índices secundarios, debes elegir entre agregar los índices al esquema de la base de datos antes o después de cargar los datos de la tabla.

  • Agregar el índice antes de que se carguen los datos permite que el esquema se complete de inmediato. Sin embargo, cada escritura que afecta el índice tarda más, ya que también necesita actualizar el índice. Cuando se completa la carga de datos, la base de datos se puede usar de inmediato con todos los índices establecidos. Si deseas crear una tabla y sus índices al mismo tiempo, envía a Cloud Spanner las instrucciones DDL para la tabla nueva y los nuevos índices en una sola solicitud.

  • Agregar el índice después de cargar los datos significa que cada escritura es eficiente. Sin embargo, el cambio de esquema para cada reabastecimiento de índices puede llevar mucho tiempo. La base de datos no se podrá utilizar por completo hasta que se hayan completado todos los cambios de esquema.

Como regla general, si la base de datos tiene menos de 40 índices, agrega los índices después de cargar los datos. Para las bases de datos con más de 40 índices, agrega los índices antes de cargar los datos.

Prueba y mide la capacidad de procesamiento

La predicción de la capacidad de procesamiento puede ser difícil. Recomendamos que pruebes la estrategia de carga masiva antes de ejecutar la carga final. Para obtener un ejemplo detallado sobre cómo usar el rendimiento de la partición y la supervisión, consulta la página sobre cómo maximizar la capacidad de carga de datos.

Prácticas recomendadas para la carga masiva periódica en una base de datos existente

Si actualizas una base de datos existente que contiene datos, pero no tiene ningún índice secundario, las recomendaciones sobre este tema aún son útiles.

Si tienes índices secundarios, las instrucciones podrían generar un rendimiento razonable. El rendimiento depende de la cantidad de divisiones, en promedio, que participen en las transacciones. Si la capacidad de procesamiento es demasiado baja, puedes intentar lo siguiente:

  • Incluye una cantidad menor de mutaciones en cada confirmación; esto podría aumentar el rendimiento.
  • Si tu carga es mayor que el tamaño total actual de la tabla que se está actualizando, borra los índices secundarios y vuelve a agregarlos después de subir los datos. Por lo general, este paso no es necesario, pero podría mejorar la capacidad de procesamiento.

Prácticas recomendadas para importar archivos Avro

En estas páginas, se proporciona información sobre cómo mejorar el rendimiento de importación de los archivos Avro:

Prácticas recomendadas para usar el conector de Dataflow

Para obtener sugerencias de rendimiento sobre cómo usar el conector de Dataflow, consulta la sección Escribir en Cloud Spanner y transformar datos.