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

Hvorfor er nøglenavne gemt i dokumentet i MongodDB

Det du henviser til kaldes ofte "nøglekomprimering"*. Der er flere grunde til, at det ikke er blevet implementeret:

  1. Hvis du vil have det gjort, kan du i øjeblikket gøre det på applikations-/ORM-/ODM-niveau ret nemt.
  2. Det er ikke nødvendigvis en præstationsfordel** i alle tilfælde – tænk på samlinger med mange nøglenavne og/eller nøglenavne, der varierer meget mellem dokumenter.
  3. Det giver måske slet ikke en målbar ydeevne**fordel, før du har millioner af dokumenter.
  4. Hvis serveren gør det, skal de fulde nøglenavne stadig overføres over netværket.
  5. Hvis komprimerede nøglenavne overføres over netværket, er læsbarheden virkelig lider ved at bruge javascript-konsollen.
  6. Komprimering af hele JSON-dokumentet kan tilbyde giver en endnu bedre ydeevnefordel.

Som alle funktioner er der en cost-benefit-analyse for at implementere den, og (i hvert fald indtil videre) har andre funktioner tilbudt mere "bang for the buck".

Fuld dokumentkomprimering [overvejes][1] for en fremtidig MongoDB-version. tilgængelig fra version 3.0 (se nedenfor)

* En opslagstabel i hukommelsen for nøglenavne er dybest set et specialtilfælde af komprimering i LZW-stil — det er mere eller mindre, hvad de fleste komprimeringsalgoritmer gør.

** Kompression giver både en pladsfordel og en ydeevnefordel. Mindre dokumenter betyder, at flere dokumenter kan læses pr. IO, hvilket betyder, at der i et system med fast IO kan læses flere dokumenter pr. sekund.

Opdater

MongoDB versioner 3.0 og nyere har nu fuld dokumentkomprimeringsfunktion med WiredTiger lagermotor.

To komprimeringsalgoritmer er tilgængelige:snappy , og zlib . Hensigten er, at snappy skal være det bedste valg til all-around ydeevne, og at zlib skal være det bedste valg for maksimal lagerkapacitet.

I mit personlige (ikke-videnskabelige, men relateret til et kommercielt projekt) eksperimenter tilbød hurtig komprimering (vi evaluerede ikke zlib) væsentligt forbedret lagertæthed uden mærkbare nettoydelsesomkostninger. Faktisk var der lidt bedre ydeevne i nogle tilfælde, nogenlunde på linje med mine tidligere kommentarer/forudsigelser.



  1. Hvordan kan jeg i MongoDB sortere dokumenter baseret på en egenskab i et indlejret objekt?

  2. Manglende felt i Mongo/Mongoose-forespørgselsresultater

  3. MongoDB sum arrays fra flere dokumenter på en per-element basis

  4. Hvordan laver man indre deltagelse i MongoDB?