Visión de conjunto:
Estamos comparando el rendimiento de crear/leer/escribir/rw en dos arquitecturas diferentes: base de datos única frente a bases de datos múltiples (15k-25k).
Preferimos usar la arquitectura Multi-DB porque facilita la separación de clientes (cliente = 1 empresa). Sin embargo, debido a la degradación del rendimiento, tememos que esta no sea una buena solución.
Especificación del servidor:
Servidor MongoDB de instancia única; RAM de 64 GB; 16 núcleos; disco duro SSD
Resultados de la prueba:
Ambos escenarios de prueba tienen el mismo número total de documentos (y los documentos tienen aproximadamente el mismo tamaño). Las variables son número de bases de datos, colecciones por base de datos y documentos por colección.
Todas las pruebas se realizan en paralelo utilizando 50 subprocesos de cliente (máquina separada), con la excepción de lectura/escritura, que utiliza 100 (50R/50W). 'directorioPerDB' está habilitado. (Todos los tiempos están en milisegundos por operación de documento)
Test Creation Read Write Read/Write Notes 25000 DB 4 Coll 250 Doc 23ms 1-10ms 1-4ms 2-10ms Max 1400% CPU, noticeable "pauses" (CPU drops to 100%) 15000 DB 4 Coll 420 Doc 23ms 0.7-4ms 0.9-4ms 2-9ms Max 1400% CPU, noticeable "pauses" (CPU drops to 100%) 1 DB 4 Coll 125000 Doc 0.8ms 0.6ms 0.8ms 1.2-1.6ms Max 600% CPU, no pausesConclusión:
Parece haber una degradación notable del rendimiento en un intervalo regular cuando el recuento de DB es muy alto. Puede deberse a la gran cantidad de archivos (25000 DB * 4 Colls * 2 archivos = 200k archivos) o algún otro cuello de botella.
En la prueba Single-DB, la CPU se mantiene alrededor del 600 % y lo mantiene hasta su finalización. En las pruebas de bases de datos múltiples, la CPU (en su máximo rendimiento) está entre 800 y 1400 %, pero cada cierto tiempo la CPU cae al 100 % y todas las operaciones se pausan. Esto se puede verificar observando el registro de mongo, así como los registros de los clientes de prueba que emiten comandos R/W.
Si no fuera por estas pausas, la arquitectura Multi-DB sería aproximadamente 2 veces más rápida que Single-DB, sin embargo, parece que hay cierta contención global que no se puede evitar.
Espero que alguien sepa qué es esta disputa global y (si es posible) cómo resolverla.