[LUGA] Mit freundlicher Unterstützung von:
init.at

Mail Thread Index


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[luga] Vom Einfluss der Sortierreihenfolge auf das Komprimierungsverhältnis



Ich habe zwei Datenbanken auf zwei Maschinen, die im Wesentlichen die
gleichen Daten enthalten sollten. Von beiden wird täglich mittels
pg_dump ein Backup gemacht. pg_dump -Fd schreibt den Inhalt jeder
Tabelle in ein tab-separiertes, gzippetes File. Also sollte das Backup
der gleichen Tabelle auf beiden Maschinen ungefähr gleich groß sein,
oder?

% ls -lh /home/postgres-backup/wds.2015W43/8996.dat.gz 
-rw-r--r-- 1 postgres postgres 64M Oct 24 06:14 /home/postgres-backup/wds.2015W43/8996.dat.gz

% ls -lh /home/postgres-backup/wds.2015W43/10374.dat.gz 
-rw-r--r-- 1 postgres postgres 149M Oct 24 10:48 /home/postgres-backup/wds.2015W43/10374.dat.gz

Ups. Das Backup auf der einen Maschine ist mehr als doppelt so groß wie
auf der anderen (die Filenamen sind unterschiedlich, das ist ok). Ist da
was schiefgegangen?

% zcat /home/postgres-backup/wds.2015W43/8996.dat.gz | wc
7019548 271645197 2257381219

% zcat /home/postgres-backup/wds.2015W43/10374.dat.gz | wc
7019548 271645197 2256602063

Nope. Unkomprimiert sind beide Backups gleich groß: Gleiche Anzahl an
Zeilen, an Wörtern, und fast gleiche Anzahl an Bytes (die Differenz von
0.03% kommt wahrscheinlich daher, dass die Timestamps unterschiedlich
sind - die eigentlichen Daten müssten gleich sein). Das sind
offensichtlich die gleichen Daten.

Es sind unterschiedliche Versionen von pg_dump, vielleicht komprimiert
eines von beiden besser?

% zcat /home/postgres-backup/wds.2015W43/8996.dat.gz | gzip | wc -c | awk '{ print $1 / 1024 / 1024 }'
62.6028

% zcat /home/postgres-backup/wds.2015W43/10374.dat.gz | gzip | wc -c | awk '{ print $1 / 1024 / 1024 }'
145.535

Auch nicht. gzip zeigt genau den gleichen Effekt. 

Hmm. Es sind Backups von Datenbanktabellen. Die Reihenfolge, in der
Daten in Tabellen gespeichert werden, ist nicht garantiert und hängt von
allerlei Zufällen[1] ab. Sollte die Reihenfolge der Zeilen einen so
großen Effekt haben?

Sortieren wir mal:

% zcat /home/postgres-backup/wds.2015W43/8996.dat.gz | sort | gzip | wc -c | awk '{ print $1 / 1024 / 1024 }'
54.1734

% zcat /home/postgres-backup/wds.2015W43/10374.dat.gz | sort | gzip | wc -c | awk '{ print $1 / 1024 / 1024 }'
53.229

Tatsächlich. Wenn man beide Files sortiert, lassen sie sich fast gleich
gut komprimieren.

	hp

[1] Im Allgemeinen und bei Postgres im Speziellen. Es gibt auch
    Datenbanken, die Tabellen in definierter Reihenfolge speichern, z.B.
    die InnoDb-Engine von MySQL.

-- 
   _  | Peter J. Holzer     | You can do reverse engineering,
|_|_) | Schriftführer LUGA  | but you can't do reverse hacking.
| |   | hjp@luga.at         |
__/   | http://www.luga.at/ | -- Vilayanur S. Ramachandran

Attachment: signature.asc
Description: Digital signature



powered by LINUX the choice of a gnu generation
linux user group austria;
Suche
Suche
Letzte Änderung:
webmaster@luga.at
Oktober 2015