MongoDB 3.0 con WiredTiger introduce una nuova funzionalità chiamata "Compressione del prefisso dell'indice" che riduce notevolmente la memoria consumata dagli indici. Meno memoria utilizzata dagli indici significa più memoria per l'archiviazione di documenti o altri indici, il che implica prestazioni migliori.
Per le migliori prestazioni in MongoDB è fantastico mantenere i tuoi indici in memoria. Un errore di pagina su un indice è un doppio smacco:un errore di pagina per portare in memoria la pagina dell'indice effettiva e un altro errore di pagina in seguito per portare la pagina di dati in memoria.
Tecnologia
La compressione del prefisso dell'indice non utilizza la compressione a blocchi (come zlib, snappy ecc.) ma è una tecnica diversa per archiviare gli indici in memoria. Riduce l'utilizzo della memoria memorizzando prefissi identici solo una volta. La "compressione del prefisso chiave" è un modo specifico per il dominio di comprimere i dati e si riferisce al formato di archiviazione delle chiavi in WiredTiger. Per maggiori dettagli, puoi fare riferimento alla documentazione WiredTiger dei formati di file.
Test delle prestazioni
Per i nostri test delle prestazioni, utilizziamo una struttura di documenti come descritto di seguito:
{ employeeID: <long>, firstName: <string>, lastName: <string>, income: <long>, supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;} }
Abbiamo aggiunto i seguenti indici a questa configurazione:
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})
Risultati
Nel nostro test abbiamo inserito dati identici (circa 10 milioni di record) in due cluster:un set di repliche 2.6.x e l'altro un MongoDB 3.0 con WiredTiger. Quindi abbiamo aggiunto gli indici precedenti su entrambe le configurazioni del cluster. I risultati sono piuttosto sbalorditivi:in alcuni casi c'è una differenza di ordine di grandezza nella dimensione dell'indice!
Nome indice | Dimensione indice MMAP (MB) | Dimensione indice WT (MB) | % di riduzione delle dimensioni |
{employeeID:1} | 230,7 | 94 | 59% |
{lastName:1, firstName:1} | 1530 | 36 | 97% |
{reddito:1} | 230 | 94 | 59% |
{'supervisor.lastName':1, 'supervisor.firstName':1} | 1530 | 35 | 97% |
Tutta la memoria salvata sugli indici è memoria che può essere utilizzata per la memorizzazione nella cache di dati, altri indici, ecc. Il tuo chilometraggio potrebbe variare:assicurati di testare la tua particolare struttura dell'indice. La riduzione delle dimensioni degli indici è un miglioramento molto poco venduto in Mongo 3.0 e può fare un'enorme differenza per le tue prestazioni!