sql >> Databasteknik >  >> NoSQL >> MongoDB

Varför lagras nyckelnamn i dokumentet i MongodDB

Det du syftar på kallas ofta för "nyckelkomprimering"*. Det finns flera anledningar till att det inte har implementerats:

  1. Om du vill att det ska göras kan du för närvarande göra det på applikations-/ORM-/ODM-nivå ganska enkelt.
  2. 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.
  3. Det kanske inte ger en mätbar prestanda** alls förrän du har miljontals dokument.
  4. Om servern gör det måste de fullständiga nyckelnamnen fortfarande överföras över nätverket.
  5. Om komprimerade nyckelnamn sänds över nätverket är läsbarheten verkligen lider av att använda javascript-konsolen.
  6. Komprimering av hela JSON-dokumentet kan erbjuda ger 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.



  1. globalt auto-inkrementerande fält i MongoDb

  2. hur gör man en variabel till en unik nyckel i mongoose?

  3. Att använda $ finns i ett MongoDB-uttryck

  4. MongoDB med Mongoid in Rails - Geospatial Indexing