Prácticas recomendadas para la carga masiva de datos

En esta página, se describen las prácticas recomendadas para cargar datos de forma masiva en Firestore con compatibilidad con MongoDB con herramientas como mongoimport.

Firestore es un sistema altamente distribuido que ofrece un ajuste de escala automático para satisfacer las necesidades de tu empresa. Firestore divide y combina tus datos de forma dinámica según la carga que recibe el sistema.

La división basada en la carga se realiza automáticamente sin necesidad de ninguna configuración previa. El sistema de división basado en la carga de Firestore tiene algunas características importantes y únicas en comparación con otras bases de datos de documentos que es importante tener en cuenta a medida que modelas tus datos.

La naturaleza distribuida de Firestore puede requerir que se cambien algunas decisiones de diseño, en especial para las cargas de trabajo que se optimizaron para bases de datos en las que la réplica principal es el cuello de botella para el rendimiento de escritura.

Prácticas recomendadas

Las cargas de trabajo que procesan grandes cantidades de datos en un cliente de un solo subproceso pueden crear un cuello de botella. Es posible que los clientes puedan usar un solo subproceso para cargar datos de forma masiva, ya que el rendimiento del cliente y del servidor coinciden de manera similar. Una base de datos de Firestore puede controlar mucho más paralelismo, pero esto requiere que configures los clientes para que envíen solicitudes en paralelo.

mongoimport

Cuando se usa la herramienta mongoimport, las solicitudes se realizan de forma secuencial de forma predeterminada. Para mejorar el tiempo de carga en Firestore, establece la cantidad de trabajadores con la marca --numInsertionWorkers. Es posible que el parámetro de configuración correcto requiera ajustes según el tamaño de tu cliente, pero, en general, recomendamos comenzar con, al menos, 32.

Programación asíncrona

Cuando desarrollas tu propio software con APIs compatibles con MongoDB, puedes mejorar el paralelismo de las siguientes maneras:

  • Frameworks asíncronos: El uso de frameworks asíncronos te permite procesar solicitudes y responderlas en paralelo. No es necesario desarrollar ningún sistema complejo de agrupación o filas cuando se realizan llamadas a tu base de datos. Cada flujo de solicitudes puede usar conexiones independientes y realizar sus llamadas a la base de datos en paralelo.
  • Usa ofertas de procesamiento paralelo: Con servicios como Cloud Run, tu sistema puede ajustar la cantidad de trabajadores de procesamiento necesarios para procesar datos.

Fallas transitorias

Cuando trabajes con un sistema distribuido grande como Firestore, es posible que encuentres fallas transitorias, como interrupciones de red o contención en un documento.

Cuando se cargan grandes cantidades de información de forma masiva, es importante mantener una estrategia de reintentos para las escrituras fallidas sin que falle la operación de carga masiva más grande.