Red de conocimiento informático - Material del sitio web - Cómo convertir MongoDB a una base de datos en memoria

Cómo convertir MongoDB a una base de datos en memoria

Hace unos días, hubo un requisito de prueba para convertir MongoDB en una base de datos en memoria. Sabemos que MongoDB tiene un motor de almacenamiento en memoria, pero no está disponible en la Community Edition. Por lo tanto, nos encargamos de descubrir cómo convertir MongoDB en una base de datos en memoria y, después de la exploración, había tres formas de hacerlo.

Versión de investigación: mongo-3.4

Método 1: usar tmpfs como sistema de archivos

Método 2: usar ramfs como sistema de archivos

Las ideas de estos dos métodos son similares. Ambos usan memoria para simular el sistema de archivos. Dado que se reemplaza el sistema de archivos del disco, los datos se retienen en la memoria.

Método 3: modificar el código fuente para configurar el parámetro in_memory

De hecho, wiredtiger admite mantener datos en la memoria sin vaciarlos en el disco, y se espera que el motor de memoria de MongoDB también lo haga. Aproveche esta característica del peso. en el archivo, la función wiredtiger_open() pasará la información de configuración config. El comentario antes de la función explica en detalle qué elementos de configuración están disponibles y se enumera la configuración in_memory, como se muestra en la siguiente figura.

Si modifica el código fuente para pasar in_memory=true, el compilador seguirá informando un error indicando que el parámetro en memoria es incompatible.

El error anterior se informa porque la versión de código abierto verificará este parámetro. Si se establece este parámetro, se devolverá un código de error. Modificar este parámetro es muy simple, por lo que no se devolverá ningún código de error. .

Esto se debe a que la versión de código abierto verifica este parámetro y devuelve un código de error si está configurado.

Así es como cambiamos MongoDB a una base de datos en memoria.

De arriba a abajo, los archivos son los siguientes:

src/third_party/wiredtiger/src/include/wiredtiger.in

src/mongo/db /storage/ wiredtiger/wiredtiger_kv_engine.cpp.kv_engine.cpp

src/third_party/wiredtiger/src/conn/conn_ckpt.c

Recientemente, reutilicé esta base de datos en memoria y encontré que aparece un nuevo error que indica que in_memory y log no se pueden configurar al mismo tiempo. Esta configuración de registro está establecida en verdadero de forma predeterminada; si no se especifica ningún diario, la configuración de registro se establecerá en falso. Sin embargo, la configuración del registro se verifica y luego se restablece, por lo que se informa el error.

La solución es agregar log=(enabled=false)

Luego inicie ./mongod -dbpath {path} -nojournal