sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Debe habilitar el registro en diario de MongoDB?

MongoDB utiliza un diario en disco para garantizar las operaciones de escritura y proporcionar resistencia a fallas. MongoDB también crea un diario para cada escritura que incluye la ubicación exacta del disco y los bytes que cambiaron en la escritura. Por lo tanto, si tiene un bloqueo en el servidor, el diario se puede usar para reproducir cualquier escritura que aún no se haya escrito en los archivos de datos.

MongoDB usa archivos mapeados en memoria para escribir sus datos en el disco. De forma predeterminada, los archivos de datos de MongoDB se descargan en el disco cada 60 segundos. También utilizan archivos asignados a la memoria para el diario y, de forma predeterminada, el diario se descarga en el disco cada 100 ms. Dado que los archivos de datos finales se descargan en el disco cada 60 segundos, el diario no necesita realizar un seguimiento de las escrituras durante más de un minuto. Para obtener más detalles sobre la mecánica del registro en diario, consulte la documentación oficial. Para comprender con más detalle cómo funciona el mapeo de vistas, puede consultar el blog de Kristina.

Preocupación por escribir en diario

>db.data.insert({"name":"testentry"});
>db.runCommand({"getLastError":1, "j":true});

Cuando activa el registro en diario de MongoDB, también tiene la capacidad de especificar un problema de escritura en MongoDB de 'Registrado en diario' para sus operaciones de MongoDB. Esto implica que MongoDB confirma la operación de escritura solo después de comprometerse con el diario. Sin embargo, esto tiene un inconveniente:cuando especifica “j”:true con getLastError, MongoDB esperará aproximadamente 1/3 de la confirmación interna del diario antes de confirmar los datos del diario. El intervalo predeterminado de confirmación del diario es de 100 ms, por lo que MongoDB esperará 30 ms y confirmará los datos. Básicamente, esto significa que en un solo subproceso, solo puede obtener alrededor de 33,3 escrituras por segundo, y la mejor práctica recomendada es agrupar sus escrituras por lotes. Por ejemplo, si tiene 50 escrituras, use la configuración "j":true solo en la última escritura; esto reconocerá que se realizaron todas las 50 escrituras anteriores.

Resumen

Todas las instancias de producción de MongoDB deben ejecutarse con el registro en diario habilitado. Si no tiene habilitado el registro en diario y su servidor o el proceso de MongoDB se bloquea, MongoDB no podrá garantizar la integridad de los datos. Deberá ejecutar una operación de "reparación" en la base de datos que, dependiendo de la cantidad de datos, podría tardar algunas horas en completarse. Apágalo solo si realmente sabes lo que estás haciendo. En ScaleGrid, todas nuestras instancias siguen la configuración de mejores prácticas de MongoDB y tienen el registro en diario activado de forma predeterminada.