MongoDB 3.0 mit der WiredTiger-Speicher-Engine ermöglicht es Ihnen, die in Ihrer Datenbank gespeicherten Daten transparent zu komprimieren. Dies ist eine ziemlich aufregende und nützliche Funktion, mit der Sie den Speicherplatzverbrauch Ihrer schnell wachsenden Daten reduzieren können. Standardmäßig verwendet wired tiger die Blockkomprimierungs-Engine „Snappy“ für alle Sammlungen. Sie können die Komprimierung standardmäßig mit den folgenden Optionen in der Konfigurationsdatei des MongoDB-Servers deaktivieren.
storage: engine: wiredTiger wiredTiger: collectionConfig: blockCompressor: none
Der Komprimierungsalgorithmus kann während der Clustererstellung auf Sammlungsebene angegeben werden. Hier ist ein Beispiel für das Erstellen einer Sammlung mit „zlib“-Komprimierung:
db.createCollection( "test", {storageEngine:{wiredTiger:{configString:'block_compressor=zlib'}}} );
Die Speicher-Engine MongoDB WiredTiger bietet zwei Komprimierungsoptionen – snappy und zlib. Es gibt im Wesentlichen einen Kompromiss zwischen dem Ausmaß der Komprimierung und der Menge der zu dekomprimierenden CPU-Last. „Zlib“ erreicht deutlich mehr Komprimierung und ist entsprechend weniger performant. „Snappy“ zielt auf „strebt nach sehr hohen Geschwindigkeiten und angemessener Komprimierung“.
Wir haben einige einfache unwissenschaftliche Tests durchgeführt, um die Komprimierungsleistung zu messen. Wir haben einen der Datensätze verwendet, in denen Zeichenfolgen gespeichert sind, die sich unserer Meinung nach gut komprimieren lassen. Hier ist die Grundstruktur jedes Dokuments:
{ '_id': <ObjectID>, 'name': <Five character string>, 'value': <Random 1MB string> }
Wir haben ungefähr 5000 dieser Dokumente (ungefähr 5 GB Daten) eingefügt, und die Ergebnisse waren ziemlich beeindruckend. Zlib erreicht eine beträchtliche Komprimierung. Snappy erreicht auch bei geringer oder gar keiner Belastung des Systems eine beachtliche Komprimierung:
Zlib | Bissig | unkomprimiert | |
Datengröße (MB) | 5000,5 | 5000,5 | 5000,5 |
Speichergröße (MB) | 19.62 | 254.37 | 5019 |
Wie immer müssen Sie einige Tests durchführen, um die Leistungssteigerungen für Ihren Datensatz zu verstehen. Hier sind einige detailliertere Benchmark-Studien zur Komprimierungsleistung und zu Kompromissen:
http://www.mongodb.com/blog/post/new-compression-options-mongodb-30
http://www.acmebenchmarking.com/2015/02/mongodb-v30-compression-benchmarks.html
https://comerford.cc/2015/02/04/mongodb-3-0-testing-compression/