Hola, Vlad, tienes un par de estrategias simples aquí con respecto a los registros.
Lo primero que debe saber es que Mongo generalmente puede manejar muchas inserciones sucesivas sin mucha RAM. La razón de esto es simple, solo insertas o actualizas cosas recientes. Por lo tanto, el tamaño del índice crece, pero los datos serán paginados constantemente.
Dicho de otra manera, puede dividir el uso de RAM en dos partes principales: índice & de datos.
Si está ejecutando el registro típico, la porción de datos se vacía constantemente, por lo que solo el índice permanece realmente en la RAM.
Lo segundo que debe saber es que puede mitigar el problema del índice colocando los registros en grupos más pequeños. Piénsalo de esta manera. Si reúne todos los registros en una colección con la fecha (llámelo logs20101206
), también puede controlar el tamaño del índice en la RAM.
A medida que transcurren los días, el índice anterior se vacía de la RAM y no se volverá a acceder, por lo que simplemente desaparecerá.
pero también estoy pensando en utilizar un script cron que vuelca y borra los datos antiguos
Este método de registro por día también ayuda a borrar los datos antiguos. En tres meses, cuando haya terminado con los datos, simplemente haga db.logs20101206.drop()
y la colección desaparecerá instantáneamente. Tenga en cuenta que no recupera espacio en disco (todo está preasignado), pero los nuevos datos llenarán el espacio vacío.
¿Debo considerar también el uso de teclas más pequeñas, como se sugiere en otros foros?
Sí.
De hecho, lo tengo integrado en mis objetos de datos. Así que accedo a los datos usando logs.action
o logs->action
, pero debajo, los datos se guardan realmente en logs.a
. Es realmente fácil gastar más espacio en "campos" que en "valores", por lo que vale la pena reducir los "campos" y tratar de abstraerlo en otro lugar.
Gracias por su minuciosa respuesta :) –
Sin embargo, ¿no hay alguna forma de especificar al sistema operativo que la memoria residente para mongo no debe ser mayor que XXX MB? –
Probablemente, pero no será una respuesta genérica. Probablemente incluso variará entre las versiones de Linux y su kilometraje definitivamente variará. La solución más sencilla es simplemente construir el sistema para que siga funcionando en condiciones de poca memoria. Estamos ejecutando un sistema de registro similar en producción y está haciendo varios millones de escrituras por día en aproximadamente 1 GB de RAM. (RAM compartida y CPU con otros procesos, pero tiene su propio disco) –