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.

Cluster de fragmentación de MongoDB está escribiendo más registros de los que se insertan.

Tengo un dataframe de Spark con alrededor de 43 millones de registros, que estoy intentando escribir en una colección de Mongo.
Cuando lo escribo en una colección no fragmentada, los registros de salida son los mismos que intento insertar. Pero cuando escribo los mismos datos en una colección fragmentada (por hash), el número de registros aumenta en 3 millones.

Lo interesante es que el número de registros sigue fluctuando incluso después de que mi trabajo de Spark haya terminado. (no hay otras conexiones a él)

Cuando hice lo mismo con una colección fragmentada por rango, el número de registros fue consistente.
(edit: incluso con un clúster fragmentado por rango, comenzó a fluctuar después de un tiempo)

¿Alguien puede ayudarme a entender por qué está sucediendo esto? Y además, estoy fragmentando mi colección porque tengo que escribir alrededor de 300 mil millones de registros todos los días, y quiero aumentar mis velocidades de escritura; por lo que cualquier otra sugerencia sería muy apreciada.

Tengo 3 fragmentos, cada uno replicado en 3 instancias.

No estoy utilizando ninguna otra opción en el conector de Mongo de Spark, solo estoy usando ordered=False

Editar:
La cuenta de registros parece estabilizarse después de unas horas con el número correcto de registros, aún así sería genial si alguien pudiera ayudarme a entender por qué Mongo exhibe este comportamiento.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnologías de la información especializado en MongoDB, rendimiento, PySpark y consistencia, puedo sugerir algunas posibles razones para la fluctuación en el número de registros al escribir un dataframe de Spark en una colección fragmentada.

    En primer lugar, es importante entender cómo funciona la fragmentación en MongoDB. La fragmentación es una técnica que distribuye los datos en múltiples servidores físicos o virtuales para aumentar el rendimiento de datos y permitir la escalabilidad horizontal. En MongoDB, la fragmentación se puede implementar de dos formas: fragmentación basada en rangos y fragmentación basada en hash.

    En la fragmentación basada en rangos, los datos se dividen en función de un rango de valores en un campo específico, como fecha, marca de tiempo o cualquier otro campo que tenga un orden lógico. Por otro lado, en la fragmentación basada en hash, los datos se dividen en función del valor hash de un campo o de una combinación de campos.

    Volviendo al problema en cuestión, el aumento en el número de registros al escribir en una colección fragmentada basada en hash puede deberse a un fenómeno llamado “desbalance de datos”. El desbalance de datos se refiere a una distribución desigual de los datos entre los fragmentos, lo que lleva a que algunos fragmentos tengan más datos que otros. En el caso de la fragmentación basada en hash, los datos se distribuyen en función de los valores hash, y es posible que algunos valores hash sean más comunes que otros, lo que da lugar al desbalance de datos.

    Otra razón para la fluctuación en el número de registros podría ser la ausencia de una clave de fragmentación. Una clave de fragmentación es un campo o conjunto de campos que determinan cómo se distribuyen los datos entre los fragmentos. Si no se elige una clave de fragmentación adecuada, los datos pueden no distribuirse de manera uniforme, lo que resulta en desbalance de datos y fluctuaciones en el número de registros.

    También es posible que la fluctuación en el número de registros se deba a un rendimiento deficiente en la escritura debido a los excesivos viajes de red entre los clústeres de Spark y MongoDB. En sistemas distribuidos como MongoDB, la latencia de red puede causar retrasos que pueden disminuir el rendimiento de escritura y afectar la consistencia de los datos.

    Para mejorar el rendimiento de escritura, puede considerar el uso de una estrategia de escritura más eficiente, como escrituras por lotes o escrituras masivas en lugar de escribir un registro a la vez. También puede ser útil elegir una clave de fragmentación adecuada que distribuya las datos de manera uniforme entre los fragmentos y evitar desbalances de datos.

    En general, aunque la fragmentación puede ayudar a mejorar el rendimiento de datos y la escalabilidad, es importante elegir la estrategia de fragmentación adecuada según la naturaleza de sus datos y los patrones de carga de trabajo. También es crucial monitorear el rendimiento y la consistencia del sistema para asegurarse de que los datos se almacenen y recuperen correctamente.

Comments are closed.