sql >> Base de Datos >  >> NoSQL >> MongoDB

Compresión de prefijo de índice en MongoDB 3.0 WiredTiger

MongoDB 3.0 con WiredTiger presenta una nueva característica llamada "Compresión de prefijo de índice" que reduce en gran medida la memoria consumida por los índices. Menos memoria utilizada por los índices significa más memoria para el almacenamiento de documentos u otros índices, lo que implica un mejor rendimiento.

Para obtener el mejor rendimiento en MongoDB, es excelente mantener sus índices en la memoria. Una página perdida en un índice es un doble golpe:una falla de página para traer la página de índice real a la memoria y otra falla de página más tarde para traer la página de datos a la memoria.

Tecnología

La compresión de prefijo de índice no usa compresión de bloque (como zlib, snappy, etc.) pero es una técnica diferente para almacenar los índices en la memoria. Reduce el uso de memoria al almacenar prefijos idénticos solo una vez. La "compresión de prefijo de clave" es una forma específica de dominio de comprimir datos y se refiere al formato de almacenamiento de claves en WiredTiger. Para obtener más detalles, puede consultar la documentación de WiredTiger sobre formatos de archivo.

Pruebas de rendimiento

Para nuestras pruebas de rendimiento, utilizamos una estructura de documento como se detalla a continuación:

{
   employeeID: <long>,
   firstName: <string>,
   lastName: <string>,
   income: <long>,
   supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;}
}

Agregamos los siguientes índices en esta configuración:

Index 1: db.ensureIndex({'employeeID':1});
Index 2: db.ensureIndex({'lastName':1, 'firstName':1});
Index 3: db.ensureIndex({'income':1});
Index 4: db.ensureIndex({'supervisor.lastName':1, 'supervisor.firstName':1})

Resultados

En nuestra ejecución de prueba, insertamos datos idénticos (alrededor de 10 millones de registros) en dos clústeres:un conjunto de réplicas 2.6.x y el otro MongoDB 3.0 con WiredTiger. Luego agregamos los índices anteriores en ambas configuraciones de clúster. Los resultados son bastante asombrosos:¡en algunos casos hay una diferencia de orden de magnitud en el tamaño del índice!

 Nombre del índice Tamaño del índice MMAP (MB) Tamaño del índice WT (MB)  % de reducción de tamaño
{ID de empleado:1} 230,7 94 59 %
{apellido:1, nombre:1} 1530 36 97 %
{ingresos:1} 230 94 59 %
{‘supervisor.apellido’:1, ‘supervisor.primernombre’:1} 1530 35 97 %

Toda la memoria guardada en los índices es memoria que se puede usar para almacenar datos en caché, otros índices, etc. Su millaje puede variar; asegúrese de probar su estructura de índice particular. La reducción de los tamaños de los índices es una mejora muy subestimada en Mongo 3.0 y puede marcar una gran diferencia en su rendimiento.