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

comprender el sistema de caché de MongoDB

Nota :Esto se escribió en 2013 cuando MongoDB aún era bastante joven, no tenía las características que tiene hoy, mientras que esta respuesta sigue siendo válida para mmap, no lo es para las otras tecnologías de almacenamiento que MongoDB implementa ahora, como WiredTiger, o Percona.

Un buen lugar para comenzar a comprender exactamente qué es un índice:http://docs.mongodb.org/manual/core/indexes/

Sin embargo, una vez que hayas repasado eso, entenderás por qué son tan buenos y saltarás a algunas de las preguntas más intrincadas.

¿Cómo podemos estar seguros de que los datos que consultamos provendrán de la memoria o no?

Una forma es mirar los yields campo en cualquier consulta explain() . Esto le dirá cuántas veces el lector cedió su bloqueo porque los datos no estaban en la RAM.

Otra forma más profunda es mirar programas como mongostat y otros programas similares. Estos programas le dirán qué fallas de página (cuando los datos deben ser paginados en la RAM desde el disco) están ocurriendo en su mongod .

Entiendo que MongoDB usa la memoria libre para almacenar en caché datos sobre la memoria que está libre en este momento, pero ¿alguien podría explicar más el comportamiento global?

Esto es realmente incorrecto. Es más fácil decir simplemente que MongoDB hace esto, pero en realidad no es así. De hecho, es el sistema operativo y sus propios algoritmos de paginación, generalmente LRU, los que hacen esto para MongoDB. Sin embargo, MongoDB hace planes de índice de caché durante un cierto período de tiempo para que no tenga que seguir revisando y probando índices constantemente.

¿En qué caso sería mejor usar una variable en nuestro servidor de nodos que almacene datos que confiar en el sistema de caché MongoDB?

No estoy seguro de cómo espera que funcione... quiero decir que los dos hacen cosas bastante diferentes y si tiene la intención de leer sus datos de MongoDB en su aplicación al iniciarse en esa var, definitivamente no lo recomendaría.

Además, los algoritmos del sistema operativo para la gestión de la memoria son extremadamente maduros y rápidos, por lo que está bien.

¿Cómo recomienda globalmente usar MongoDB para un tráfico enorme?

Hmm, esta es una gran pregunta. Realmente, le recomendaría que busque un poco en Google sobre este tema, pero como dice la documentación, debe asegurarse de que su conjunto de trabajo se ajuste a la RAM para uno.

Aquí hay un buen punto de partida:¿Qué significa encajar "conjunto de trabajo" en la RAM para MongoDB?