Estoy ejecutando MongoDB de escritura intensiva para una aplicación web y obtengo un rendimiento extraordinariamente bajo. Dicho esto, estoy bastante seguro de que el problema tiene más que ver con nuestro código, configuración y/o nuestro uso que con el propio mongo.Rendimiento extraordinariamente pobre de MongoDB en la aplicación de escritura intensiva
Estoy a punto de abrir la cabeza con un mazo por la desesperación, así que me preguntaba si a alguien le importaría mirar algunas de las salidas que he preparado para ver si algo parece problemático.
El código no es demasiado complicado (está en PHP, por cierto). Es mucho mucho -> find() y -> update(). Me aseguré de usar los índices para ambas llamadas y confirmé que, de hecho, estaban siendo utilizadas al explicar() en las consultas.
He intentado 1 servidor (ec2 m2.2xlarge), 4 servidores (2 fragmentos de 2 repeticiones) y 9 servidores (3 fragmentos de 3 repeticiones) y no pude obtener mucho de ellos.
En los buenos momentos, no puedo obtener nada más de 1500 escrituras por segundo (insertar + actualizar). La mayoría de las veces, tengo la suerte de alcanzar una cantidad combinada de 100 insert/update y siempre tengo un gran "% bloqueado" y muchas consultas en cola "qr | qw".
En este momento, tengo un script que se está ejecutando y está reptando. Lo peor es que cuando miro el mongostat por un tiempo, la cantidad de RAM utilizada en "res" es aproximadamente el 50% de la RAM disponible del servidor y hay suficiente RAM para ajustarse a los índices de todas las colecciones. No hay ninguna razón por la cual esto no esté escupiendo datos como loco.
Debo haber recodificado la aplicación 2-3 veces ya, tratando de encontrar mejores patrones de acceso para los datos. He leído todo lo que pude leer sobre índices, actualizaciones, claves de fragmentos y otras cosas. Todos los servidores en los que puse Mongo están usando una configuración de 8 discos EBS incursión 10 con algunos ajustes de rendimiento agregados (blockdev, noatime, etc ...).
Sé que el problema está en mi parte y no estoy culpando a mongodb. Sé que empresas más grandes que yo lo están utilizando para aplicaciones de escritura intensiva y que les encanta (foursquare, por ejemplo). Al mismo tiempo, simplemente no puedo entender lo que estoy haciendo mal y por qué estoy obteniendo un rendimiento tan pobre, sin importar lo que haga.
Información adicional:
- Todos los servidores (cliente y servidor) está ejecutando Ubuntu 10.04 LTS con MongoDB 1.8.2
- Todos los servidores están en EC2 Medio y en la misma zona
- Actualmente, Estoy de regreso en 1 m2.2xlarge servidor (4 núcleos, 34.2 GB RAM) hasta que pueda averiguar dónde está el problema.
+1 También vale la pena mencionar que si sus actualizaciones no pueden realizarse en su lugar (porque han superado el espacio libre asignado), deberán leerse en el disco, en la memoria, modificarse y escribirse hasta el final de el conjunto de datos. –