Det du syftar på kallas ofta för "nyckelkomprimering"*. Det finns flera anledningar till att det inte har implementerats:
- Om du vill att det ska göras kan du för närvarande göra det på applikations-/ORM-/ODM-nivå ganska enkelt.
- Det är inte nödvändigtvis en prestanda** fördel i alla fall – tänk på samlingar med många nyckelnamn och/eller nyckelnamn som varierar kraftigt mellan dokument.
- Det kanske inte ger en mätbar prestanda** alls förrän du har miljontals dokument.
- Om servern gör det måste de fullständiga nyckelnamnen fortfarande överföras över nätverket.
- Om komprimerade nyckelnamn sänds över nätverket är läsbarheten verkligen lider av att använda javascript-konsolen.
- Komprimering av hela JSON-dokumentet
kan erbjudager en ännu bättre prestandafördel.
Liksom alla funktioner finns det en kostnads-nyttoanalys för att implementera den, och (åtminstone hittills) har andra funktioner erbjudit mer "bang for the buck".
Full dokumentkomprimering [övervägs][1] för en framtida MongoDB-version. tillgänglig från och med version 3.0 (se nedan)
* En uppslagstabell i minnet för nyckelnamn är i grunden ett specialfall av komprimering av LZW-stil — det är mer eller mindre vad de flesta komprimeringsalgoritmer gör.
** Kompression ger både en utrymmesfördel och en prestandafördel. Mindre dokument gör att fler dokument kan läsas per IO, vilket innebär att i ett system med fast IO kan fler dokument per sekund läsas.
Uppdatera
MongoDB version 3.0 och uppåt har nu full dokumentkomprimeringskapacitet med WiredTiger lagringsmotor.
Två komprimeringsalgoritmer är tillgängliga:snappy , och zlib . Avsikten är att snappy ska vara det bästa valet för allsidig prestanda, och att zlib ska vara det bästa valet för maximal lagringskapacitet.
I mitt personliga (icke-vetenskapliga, men relaterat till ett kommersiellt projekt) experiment erbjöd snabb komprimering (vi utvärderade inte zlib) avsevärt förbättrad lagringstäthet utan märkbar nettoprestandakostnad. Faktum är att det var något bättre prestanda i vissa fall, ungefär i linje med mina tidigare kommentarer/förutsägelser.