2017-05-05 1 views
1

Wir versuchen, unsere aktuelle Festplattennutzung zu reduzieren. Dabei haben wir festgestellt, dass es sich bei den meisten Informationen, die wir speichern, hauptsächlich um Metadaten handelt, die aus denselben Strings bestehen, die über mehrere Tabellen und Zeilen hinweg wiederholt werden.Optimiert Cassandra Speicher für das Wiederholen von Strings?

Da Strings oft mehr Platz beanspruchen als ganze Zahlen, dachten wir, wir könnten diese Strings durch Integer ersetzen, um unsere Festplattennutzung zu reduzieren. Wir haben das gemacht und bemerkten wenig Unterschiede beim Disk-Verbrauch.

Wir bemerkten nur einen wesentlichen Unterschied, wenn es eine größere Varianz in den Metadatenstrings gibt. I.e. die Saiten variierten mehr.

Also frage ich mich, ob Cassandra 2.1 einige clevere Mittel zur Speicherung sich wiederholender Informationen verwendet und wenn ja, kann mich jemand auf einige Quellen hinweisen, wie es das tut? Ich habe nichts in der Sache gefunden.

Danke.

Antwort

3

Cassandra mischt niemals Daten, die zu verschiedenen Tabellen gehören. Wenn sich Ihre Strings über mehrere Tabellen hinweg wiederholen, kann C * diese also nicht beliebig mischen.

Die einzige Sache ist, dass C * (wenn Sie es nicht deaktiviert haben) Komprimierung während SSTable Spülungen verwendet. Je nachdem, wie Sie Ihren Tisch entwerfen, wird das Komprimierungsverhältnis, das C * erreichen wird, sehr unterschiedlich sein. Als ein Beispiel wird der Komprimierungsalgorithmus sehr davon profitieren, dass Ihre String-Spalte ein Clustering-Schlüssel ist. Und zu viele kleine Memtables könnten das Komprimierungsverhältnis jedes SSTable beeinflussen.

+0

"der Komprimierungsalgorithmus wird sehr davon profitieren, dass Ihre String-Spalte ein Clustering-Schlüssel ist" - warum? –

+0

@ChrisLohfink Ich bin kein Kompressor-Experte, aber einige Komprimierungsalgorithmen arbeiten, indem sie Übereinstimmungen durch * Zurückschauen * bei einem bereits ausgegebenen Muster finden, und * zurück * ist normalerweise in der Entfernung begrenzt (z. B. LZ-Familien haben 64k Offset IIRC) Wenden Sie MoveToFront und/oder Deltakodierung an, um die Datenreihenfolge auszunutzen. Die Idee beider Techniken ist es, dem Kompressor zu ermöglichen, die am häufigsten verwendeten Symbole mit weniger Bytes zu codieren. Daher ist es besser, diese Strings zu verteilen zufällig (zB wenn Sie mit UUID bestellen). Und das hängt davon ab, dass die Daten komprimiert werden ... – xmas79

Verwandte Themen