sql >> Database >  >> NoSQL >> MongoDB

Waarom worden sleutelnamen opgeslagen in het document in MongodDB

Waar u naar verwijst, wordt vaak "sleutelcompressie"* genoemd. Er zijn verschillende redenen waarom het niet is geïmplementeerd:

  1. Als je het gedaan wilt hebben, kun je het momenteel vrij eenvoudig doen op het Application/ORM/ODM-niveau.
  2. Het is niet per se een prestatievoordeel** in alle gevallen — denk aan collecties met veel sleutelnamen en/of sleutelnamen die enorm variëren tussen documenten.
  3. Het levert misschien helemaal geen meetbaar prestatievoordeel** op totdat u miljoenen documenten heeft.
  4. Als de server het doet, moeten de volledige sleutelnamen nog steeds via het netwerk worden verzonden.
  5. Als gecomprimeerde sleutelnamen via het netwerk worden verzonden, is de leesbaarheid echt lijdt aan het gebruik van de javascript-console.
  6. Het comprimeren van het volledige JSON-document kan bieden biedt een nog beter prestatievoordeel.

Zoals alle functies, is er een kosten-batenanalyse voor de implementatie ervan, en (tenminste tot nu toe) hebben andere functies meer "waar voor je geld" geboden.

Volledige documentcompressie is [wordt overwogen][1] voor een toekomstige MongoDB-versie. beschikbaar vanaf versie 3.0 (zie hieronder)

* Een opzoektabel in het geheugen voor sleutelnamen is in feite een speciaal geval van compressie in LZW-stijl — dat is min of meer wat de meeste compressie-algoritmen doen.

** Compressie biedt zowel een ruimtevoordeel als een prestatievoordeel. Kleinere documenten betekent dat er meer documenten per IO kunnen worden gelezen, wat betekent dat in een systeem met vaste IO meer documenten per seconde kunnen worden gelezen.

Bijwerken

MongoDB-versies 3.0 en hoger hebben nu volledige documentcompressiemogelijkheden met de WiredTiger opslag-engine.

Er zijn twee compressie-algoritmen beschikbaar:snappy , en zlib . Het is de bedoeling dat snappy de beste keuze is voor allround prestaties en dat zlib de beste keuze is voor maximale opslagcapaciteit.

In mijn persoonlijke (niet-wetenschappelijke, maar gerelateerd aan een commercieel project) experiment, bood pittige compressie (we hebben zlib niet geëvalueerd) een aanzienlijk verbeterde opslagdichtheid zonder merkbare netto prestatiekosten. In sommige gevallen waren de prestaties zelfs iets beter, ongeveer in lijn met mijn eerdere opmerkingen/voorspellingen.



  1. Gegevens lezen van Redis naar Flink

  2. pymongo- Hoe kan ik verschillende waarden voor een veld hebben samen met andere queryparameters?

  3. Mongoose-schema's maken met of zonder 'nieuw' trefwoord?

  4. Selecteer laatste waarde van array in subdocument