MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Warum werden Schlüsselnamen im Dokument in MongodDB gespeichert

Was Sie meinen, wird oft als "Schlüsselkomprimierung"* bezeichnet. Es gibt mehrere Gründe, warum es nicht implementiert wurde:

  1. Wenn Sie möchten, können Sie dies derzeit ganz einfach auf Anwendungs-/ORM-/ODM-Ebene tun.
  2. Es ist nicht unbedingt in allen Fällen ein Leistungsvorteil** – denken Sie an Sammlungen mit vielen Schlüsselnamen und/oder Schlüsselnamen, die von Dokument zu Dokument stark variieren.
  3. Es bietet möglicherweise überhaupt keinen messbaren Leistungsvorteil**, bis Sie Millionen von Dokumenten haben.
  4. Falls der Server dies tut, müssen noch die vollständigen Schlüsselnamen über das Netzwerk übertragen werden.
  5. Wenn komprimierte Schlüsselnamen über das Netzwerk übertragen werden, dann Lesbarkeit wirklich leidet unter Verwendung der Javascript-Konsole.
  6. Komprimieren des gesamten JSON-Dokuments möglicherweise bietet einen noch besseren Leistungsvorteil.

Wie bei allen Funktionen gibt es eine Kosten-Nutzen-Analyse für die Implementierung, und (zumindest bisher) haben andere Funktionen mehr "Bang fürs Geld" geboten.

Die vollständige Dokumentenkomprimierung [wird in Erwägung gezogen][1] für eine zukünftige MongoDB-Version. verfügbar ab Version 3.0 (siehe unten)

* Eine speicherinterne Nachschlagetabelle für Schlüsselnamen ist im Grunde ein Sonderfall der LZW-Komprimierung — das ist mehr oder weniger das, was die meisten Komprimierungsalgorithmen tun.

** Die Komprimierung bietet sowohl einen Platzvorteil als auch einen Leistungsvorteil. Kleinere Dokumente bedeuten, dass mehr Dokumente pro IO gelesen werden können, was bedeutet, dass in einem System mit festem IO mehr Dokumente pro Sekunde gelesen werden können.

Aktualisieren

MongoDB-Versionen 3.0 und höher verfügen jetzt über eine vollständige Dokumentkomprimierungsfunktion mit WiredTiger Speicher-Engine.

Es stehen zwei Komprimierungsalgorithmen zur Verfügung:snappy , und zlib . Die Absicht ist, dass snappy die beste Wahl für allumfassende Leistung ist und dass zlib die beste Wahl für maximale Speicherkapazität ist.

In meinen persönlichen (nicht wissenschaftlichen, aber im Zusammenhang mit einem kommerziellen Projekt) Experimenten bot die schnelle Komprimierung (wir haben zlib nicht bewertet) eine deutlich verbesserte Speicherdichte ohne merkliche Nettoleistungseinbußen. Tatsächlich gab es in einigen Fällen eine etwas bessere Leistung, was ungefähr meinen vorherigen Kommentaren/Vorhersagen entspricht.