LZ4

LZ4
Tip de Comprimarea datelor
Autor Yann Collet
Dezvoltator Yann Collet
Scris in C
Sistem de operare multiplatformă
Prima editie 24 aprilie 2011 ( 24.04.2011 )
Platformă hardware portabil
ultima versiune
Stat activ
Licență Licență simplificată BSD
Site-ul web lz4.github.io/lz4/ ​(  engleză)

LZ4 este un  algoritm de compresie a datelor fără pierderi axat pe compresia și decompresia de mare viteză. Aparține familiei LZ77 de metode de compresie care funcționează cu fluxuri de octeți. Dispune de un cod compact de despachetare.

Caracteristici

Algoritmul LZ4 are un raport de compresie puțin mai scăzut decât metoda anterioară de compresie LZO . LZO, la rândul său, comprimă într-o măsură mai mică decât clasicele gzip și DEFLATE . Cu toate acestea, LZ4 este aproape de LZO în ceea ce privește viteza de compresie și de câteva ori mai rapid decât gzip, iar LZ4 decomprimă mult mai rapid decât LZO. [2]

Metoda de compresie

Datele comprimate în metoda LZ4 sunt reprezentate ca o secvență de înregistrări. Fiecare intrare începe cu un simbol - un octet, împărțit în două câmpuri de 4 biți. Primul câmp specifică numărul de octeți ai secvenței literale - adică șirul care va fi copiat în fluxul de ieșire atunci când este despachetat. Al doilea câmp definește lungimea șirului copiat din buffer-ul deja dezambalat (din dicționar). O valoare de 0 în câmp corespunde unei lungimi minime de potrivire de 4 octeți. Valoarea 15 din câmp indică utilizarea unui octet suplimentar, a cărui valoare va fi adăugată la lungime. Dacă octetul de lungime suplimentară este 255, atunci valoarea unui octet suplimentar este adăugată câmpului de lungime, ceea ce permite ca lungimi arbitrare să fie specificate printr-o serie de octeți cu valoarea 255 (0xff). Șirul literal în secvența comprimată urmează simbolul și octeții suplimentari ai lungimilor literale. Apoi scrie offset-ul potrivirii în buffer-ul de ieșire și octeți suplimentari ai lungimii potrivirii. [3] [4] [5] În plus, pot fi utilizate cadre care indică dimensiunea datelor și care conțin sume de control [6] [7] . Codarea entropiei (cum ar fi codul Huffman ) nu este utilizată.

Comprimarea poate fi efectuată pe un flux de octeți sau pe o secvență de blocuri. Gradul de compresie atins depinde de cantitatea de muncă făcută pentru a găsi potriviri. Dacă petreceți mai mult timp comprimând, veți obține un fișier comprimat mai compact, iar viteza de decompresie a acestuia va crește.

Implementare

Implementarea originală a LZ4 a fost scrisă în limbajul de programare C de Yann Collet și distribuită în conformitate cu termenii licenței BSD. Există porturi și interfețe pentru multe limbi, inclusiv Java, C#, Python etc. [8] Unele baze de date, cum ar fi Hadoop , folosesc LZ4 datorită vitezei mari de compresie. LZ4 este, de asemenea, implementat ca parte a nucleului Linux începând cu versiunea 3.11 [9] și poate fi folosit pentru a accelera pornirea [10] . Sistemul de fișiere ZFS ca parte a implementărilor FreeBSD, Illumos, „ ZFS on Linux ” și ZFS-OSX acceptă metoda LZ4 pentru comprimarea datelor. [11] [12] [13] [14] Nucleul Linux acceptă LZ4 pentru imagini SquashFS comprimate începând cu versiunea 3.19. [15] LZ4 este, de asemenea, implementat ca parte a arhivatorului Zstd al lui Jan Kolle .

Note

  1. Lansarea v1.9.4
  2. Michael Larabel . Suport pentru comprimarea kernelului Linux cu LZ4 . Phoronix (28 ianuarie 2013). Preluat la 28 august 2015. Arhivat din original la 24 septembrie 2015.
  3. Yann Collet. Comprimarea datelor în timp real (26 mai 2011). Preluat la 28 august 2015. Arhivat din original la 23 septembrie 2015.
  4. ticky. Cum funcționează LZ4 (link indisponibil) (25 octombrie 2016). Consultat la 29 iunie 2017. Arhivat din original pe 27 iunie 2017. 
  5. LZ4 - Compresie extrem de rapidă (link indisponibil) . Consultat la 17 octombrie 2018. Arhivat din original la 27 septembrie 2018. 
  6. Comprimarea datelor în timp real: Format cadru LZ4: Specificații finale . Consultat la 17 octombrie 2018. Arhivat din original la 17 octombrie 2018.
  7. LZ4 - Compresie extrem de rapidă (link indisponibil) . Consultat la 17 octombrie 2018. Arhivat din original la 27 septembrie 2018. 
  8. Algoritm de compresie rapidă http://www.lz4.org Proiect LZ4 pe GitHub
  9. Jonathan Corbet. Dezvoltarea kernelului . LWN.net (19 iulie 2013). Preluat la 28 august 2015. Arhivat din original la 15 decembrie 2017.
  10. Copie arhivată . Consultat la 17 octombrie 2018. Arhivat din original la 17 octombrie 2018.
  11. Note de lansare pentru FreeBSD 9.2-RELEASE . FreeBSD (13 noiembrie 2013). Preluat la 28 august 2015. Arhivat din original la 12 noiembrie 2020.
  12. Compresia LZ4 (link indisponibil) . illumos . Preluat la 28 august 2015. Arhivat din original la 9 octombrie 2018. 
  13. #3035 Suport pentru compresie LZ4 în proiectul ZFS și GRUB LZ4 pe GitHub
  14. Caracteristici: compresie lz4 . openzfs . Preluat la 28 august 2015. Arhivat din original la 25 aprilie 2020.
  15. Phillip Lougher. Squashfs: Adăugați opțiunea de configurare a compresiei LZ4 (27 noiembrie 2014). Preluat: 28 august 2015.

Link -uri