Ci sono molti algoritmi di compressione in giro, ed bzip2
è uno di quelli più lenti. La pianura gzip
tende ad essere significativamente più veloce, di solito con una compressione non molto peggiore. Quando la velocità è la più importante, lzop
è la mia preferita. Compressione scadente, ma oh così in fretta.
Ho deciso di divertirmi e confrontare alcuni algoritmi, comprese le loro implementazioni parallele. Il file di input è l'output del pg_dumpall
comando sulla mia workstation, un file SQL di 1913 MB. L'hardware è un vecchio quad-core i5. I tempi sono tempi di orologio da parete della sola compressione. Le implementazioni parallele sono impostate per utilizzare tutti e 4 i core. Tabella ordinata per velocità di compressione.
Algorithm Compressed size Compression Decompression
lzop 398MB 20.8% 4.2s 455.6MB/s 3.1s 617.3MB/s
lz4 416MB 21.7% 4.5s 424.2MB/s 1.6s 1181.3MB/s
brotli (q0) 307MB 16.1% 7.3s 262.1MB/s 4.9s 390.5MB/s
brotli (q1) 234MB 12.2% 8.7s 220.0MB/s 4.9s 390.5MB/s
zstd 266MB 13.9% 11.9s 161.1MB/s 3.5s 539.5MB/s
pigz (x4) 232MB 12.1% 13.1s 146.1MB/s 4.2s 455.6MB/s
gzip 232MB 12.1% 39.1s 48.9MB/s 9.2s 208.0MB/s
lbzip2 (x4) 188MB 9.9% 42.0s 45.6MB/s 13.2s 144.9MB/s
pbzip2 (x4) 189MB 9.9% 117.5s 16.3MB/s 20.1s 95.2MB/s
bzip2 189MB 9.9% 273.4s 7.0MB/s 42.8s 44.7MB/s
pixz (x4) 132MB 6.9% 456.3s 4.2MB/s 7.9s 242.2MB/s
xz 132MB 6.9% 1027.8s 1.9MB/s 17.3s 110.6MB/s
brotli (q11) 141MB 7.4% 4979.2s 0.4MB/s 3.6s 531.6MB/s
Se i 16 core del tuo server sono abbastanza inattivi da poter essere utilizzati tutti per la compressione, pbzip2
probabilmente otterrai una velocità molto significativa. Ma hai ancora bisogno di più velocità e puoi tollerare file con dimensioni maggiori del 20%, gzip
è probabilmente la soluzione migliore.
Aggiornamento: ho aggiunto i risultati brotli
(vedi risposta TOOGAMs) alla tabella. brotli
impostazione s qualità di compressione ha un grande impatto sul rapporto di compressione e la velocità, così ho aggiunto tre impostazioni ( q0
, q1
e q11
). L'impostazione predefinita è q11
, ma è estremamente lenta e ancora peggio di xz
. q1
sembra molto buono però; lo stesso rapporto di compressione di gzip
, ma 4-5 volte più veloce!
Aggiornamento: aggiunto lbzip2
(vedi il commento di gmathts) e zstd
(il commento di Johnny) alla tabella e ordinato in base alla velocità di compressione. lbzip2
rimette in moto la bzip2
famiglia comprimendo tre volte più velocemente che pbzip2
con un ottimo rapporto di compressione! zstd
sembra anche ragionevole ma è battuto brotli (q1)
sia nel rapporto che nella velocità.
La mia conclusione originale che gzip
la scommessa migliore è iniziare a sembrare quasi sciocca. Anche se per l'ubiquità, non può ancora essere battuto;)