MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Perché i nomi delle chiavi sono memorizzati nel documento in MongodDB

Ciò a cui ti riferisci è spesso chiamato "compressione chiave"*. Ci sono diversi motivi per cui non è stato implementato:

  1. Se vuoi che sia fatto, al momento puoi farlo a livello di applicazione/ORM/ODM abbastanza facilmente.
  2. Non è necessariamente un vantaggio in termini di prestazioni** in tutti i casi:pensa a raccolte con molti nomi di chiavi e/o nomi di chiavi che variano notevolmente tra i documenti.
  3. Potrebbe non fornire affatto un vantaggio misurabile in termini di prestazioni** finché non avrai milioni di documenti.
  4. Se lo fa il server, i nomi completi delle chiavi devono comunque essere trasmessi sulla rete.
  5. Se i nomi delle chiavi compressi vengono trasmessi sulla rete, la leggibilità veramente soffre usando la console javascript.
  6. La compressione dell'intero documento JSON potrebbe offrire offre un vantaggio in termini di prestazioni ancora migliore.

Come tutte le funzionalità, esiste un'analisi costi-benefici per l'implementazione e (almeno finora) altre funzionalità hanno offerto più "bang for the buck".

La compressione completa del documento è [considerata][1] per una futura versione di MongoDB. disponibile a partire dalla versione 3.0 (vedi sotto)

* Una tabella di ricerca in memoria per i nomi delle chiavi è fondamentalmente un caso speciale di compressione in stile LZW, più o meno ciò che fa la maggior parte degli algoritmi di compressione.

** La compressione offre sia un vantaggio di spazio che di prestazioni. Documenti più piccoli significano che è possibile leggere più documenti per IO, il che significa che in un sistema con IO fisso, è possibile leggere più documenti al secondo.

Aggiorna

MongoDB versioni 3.0 e successive ora hanno capacità di compressione completa dei documenti con WiredTiger motore di archiviazione.

Sono disponibili due algoritmi di compressione:snappy e zlib . L'intento è che snappy sia la scelta migliore per prestazioni a 360 gradi e che zlib sia la scelta migliore per la massima capacità di archiviazione.

Nella mia sperimentazione personale (non scientifica, ma relativa a un progetto commerciale), la compressione scattante (non abbiamo valutato zlib) ha offerto una densità di archiviazione significativamente migliorata senza costi netti evidenti. In effetti, in alcuni casi si sono registrate prestazioni leggermente migliori, più o meno in linea con i miei precedenti commenti/previsioni.