2010-12-10 14 views
16

Actualmente estoy evaluando MongoDB para nuestra aplicación pesada de escritura ...MongoDB - La utilización del servidor de múltiples CPU para una escritura pesada aplicación

Actualmente mongodb utiliza un solo hilo para la operación de escritura y también utiliza bloqueo global siempre que está haciendo la escritura ... ¿Es posible explotar múltiples CPU en un servidor de múltiples CPU para obtener un mejor rendimiento de escritura? ¿Cuál es su solución para el bloqueo de escritura global?

+1

check http://stackoverflow.com/questions/2954957/mongodb-vs-couchdb-speed-optimization. –

Respuesta

15

Así que en este momento, la solución más fácil es shard.

Sí, normalmente la fragmentación se realiza en todos los servidores. Sin embargo, es completamente posible fragmentar en una sola caja. Simplemente enciende los fragmentos en diferentes puertos y les proporciona diferentes carpetas. Here's a sample configuration de 2 fragmentos en una caja.

El equipo de MongoDB reconoce que esto es un poco insignificante, y sé por hablar con ellos que están buscando mejores formas de hacerlo.

Obviamente, una vez que obtiene varios fragmentos en una casilla y aumenta sus hilos de escritura, tendrá que tener cuidado con el disco IO. En mi experiencia, he podido saturar discos con un solo hilo de escritura. Si sus inserciones/actualizaciones son relativamente simples, puede encontrar que los hilos de escritura extra no hacen nada. (Las reducciones de mapa son la excepción aquí, la fragmentación definitivamente ayuda allí)

+0

Gracias ... Lo probaré ... Tenemos que hacer un análisis a gran escala y esto podría ser realmente útil en un servidor potente. ¿Conocen algún efecto negativo de dicha configuración? – StackUnderflow

+0

Efectos negativos: la complejidad adicional de configurar un clúster en un solo nodo y, por supuesto, el único punto de falla. Obviamente, probaría esa solución primero para ver si satisface sus necesidades, y creo que es justo comenzar ejecutando un solo nodo para ver cuál es el rendimiento :) –

+0

¿Cuántas inserciones/seg estaba haciendo para saturar su E/S de disco? No puedo acercarme a la saturación de escritura secuencial con un solo hilo. – EhevuTov

16

No, aún se recomienda utilizar fragmentación para utilizar múltiples núcleos de CPU. Como se indica en la Sharding FAQ

mejora la concurrencia mediante la distribución de colecciones más de varias instancias mongod, permitiendo a los servidores de fragmento (es decir Mongos procesos) para realizar cualquier número de operaciones simultáneamente a los diversos aguas abajo instancias mongod.

Cada instancia de mongod es independiente de las demás en el clúster de fragmentos y utiliza el bloqueo de lectura y escritura MongoDB). Las operaciones en una instancia mongod no bloquean las operaciones en ninguna otra.

Sharding en una sola caja tiene sus problemas, ya que un usuario se indica en la lista mongodb-user correo

Después de algunos experimentos significativa, he encontrado un solo demonio fragmento MongoDB no puede utilizar más de una CPU . En una caja de 24 CPU, el rendimiento aumenta hasta alcanzar aproximadamente 8 fragmentos, luego entra otro límite.

+1

Muchas gracias por esta respuesta. Por lo tanto, nuestros servidores de bases de datos obtendrán dos CPU de cuatro núcleos. – Philipp

Cuestiones relacionadas