performance - per - org bson bsonserializationexception payload document size of is larger than maximum of 16777216
Memoria lĂmite de MongoDB (3)
Hey 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 una gran cantidad de RAM. La razón de esto es simple, solo inserta o actualiza cosas recientes. Entonces, el tamaño del índice crece, pero los datos se pagarán constantemente.
Dicho de otra manera, puede desglosar el uso de la RAM en dos partes principales: índice y datos.
Si está ejecutando el registro típico, la porción de datos se está borrando constantemente, por lo que solo el índice realmente permanece en la RAM.
La segunda cosa que debe saber es que puede mitigar el problema del índice al colocar los registros en grupos más pequeños. Piénsalo de esta manera. Si recopila todos los registros en una colección con sello de fecha ( logs20101206
), también puede controlar el tamaño del índice en la RAM.
A medida que avance el número de días, el índice anterior se borrará de la memoria RAM y no se podrá acceder nuevamente, por lo que simplemente desaparecerá.
pero también estoy considerando usar un script cron que vuelque y elimine datos antiguos
Este método de registro por días también ayuda a eliminar 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 reclama espacio en disco (todo está asignado previamente), pero los nuevos datos llenarán el espacio vacío.
¿Debo considerar también usar claves más pequeñas, como se sugiere en otros foros?
Sí.
De hecho, lo tengo incorporado en mis objetos de datos. Así que logs.action
datos usando logs.action
o logs->action
, pero debajo, los datos realmente se guardan en logs.a
Es realmente fácil gastar más espacio en los "campos" que en los "valores", por lo que vale la pena reducir los "campos" y tratar de abstraerlos en otros lugares.
Estoy usando mongo para almacenar archivos de registro. Tanto mongoDB como mysql se ejecutan en la misma máquina, virtualizar mongo env no es una opción. Me temo que pronto me encontraré con problemas de rendimiento ya que la tabla de registros crece muy rápido. ¿Hay una manera de limitar la memoria residente para mongo para que no se consuma toda la memoria disponible y ralentice excesivamente el servidor mysql?
Máquina DB: Debian ''lenny'' 5
Otras soluciones (por favor comentar):
Como necesitamos todos los datos históricos, no podemos usar colecciones con límite, pero también estoy considerando usar un script cron que vuelque y elimine datos antiguos
¿Debo considerar también usar claves más pequeñas, como se sugiere en otros foros?
Para Windows parece posible controlar la cantidad de memoria que utiliza MongoDB, consulte este tutorial en Captain Codeman:
Limite el uso de memoria de MongoDB en Windows sin virtualización
Para la versión 3.2+, que utiliza el motor wiredTiger, la opción --wiredTigerCacheSizeGB
es relevante para la pregunta. Puedes configurarlo si sabes lo que estás haciendo exactamente. No sé si es la mejor práctica, solo lea el document y levántelo aquí.