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.
"der Komprimierungsalgorithmus wird sehr davon profitieren, dass Ihre String-Spalte ein Clustering-Schlüssel ist" - warum? –
@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