Snappy (könyvtár)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2020. augusztus 16-án felülvizsgált verziótól ; az ellenőrzéshez 1 szerkesztés szükséges .
Lendületes
Típusú függvénykönyvtár és program kombinálható [d]
Fejlesztő Google
Beírva C++
Operációs rendszer platformközi
Első kiadás 2011. március 18. [1] [2]
legújabb verzió
Olvasható fájlformátumok csípős
Generált fájlformátumok csípős
Engedély módosított BSD licenc [d] [4]
Weboldal github.com/google/snappy

A Snappy (korábban Zippy ) [5]  egy gyors adattömörítési és -kicsomagolási könyvtár, amelyet C++ nyelven írt a Google-nál az LZ77 alapján ; 2011-ben nyitották meg [6] [7] [8] . A fő cél a nagy tömörítési sebesség elérése volt, miközben a legmagasabb tömörítést vagy más könyvtárakkal való kompatibilitást nem állítottuk be. 2011-ben a tömörítési arány egyetlen Core i7 magon (2,26 GHz, 64 bit) elérte a 250 MB/s-ot és a kitömörítésnél az 500 MB/s-ot [8] , de a tömörítési arány 20-100%-nak bizonyult. alacsonyabb, mint a gzip [9] .

Olyan Google-projektekben használatos, mint a BigTable , a MapReduce és a belső RPC rendszer , a MariaDB [10] oszlopmotorjában , a Cassandra [11] , a Hadoop ökoszisztéma [12] fájlformátumai , a LevelDB [13] . MongoDB [14] , RocksDB [15] . Nagyon hordozható, nem használ assembler betéteket .

C és C++ felett burkolóként terjesztve ; Számos más nyelvhez is létezik interfész, köztük a C# , Lisp , Erlang , Go , Haskell , Haxe , Java , Lua , Node.js , Perl , PHP , Python , R , Ruby , Rust , Smalltalk .

Adatfolyam formátum

A Snappy kódolása bájtonként történik, az adatfolyamban csak bájtok lehetnek. A formátum elkerüli az entrópia kódolást , a megfelelő Huffman algoritmus vagy aritmetikai kódolás használatával .

Az adatfolyam első bájtja határozza meg a tömörítetlen adatok méretét, amelyeket kis endian "varint"-ként, azaz változó hosszúságú kódként tárolt egész számként tárolnak . Minden bájt első hét bitje az adatokhoz használatos, a nyolcadik bit pedig az adott méretet leíró mező végjelzője.

Az adatfolyam fennmaradó bájtjai a négy elemtípus egyikeként vannak kódolva. Az elem típusa az elem első bájtjának (tag byte) első két bitjébe van kódolva. [16]

Jelölés: kód  - hivatkozás a szótárhoz; shift  - váltás az aktuális pozícióból vissza a már kicsomagolt adatfolyamba; hossz  - a szótár kódjának bájtjainak száma.

A szótár mérete bájtra korlátozódik ( 1.0-s verzió esetén).

Flow példa

Eredeti szöveg:

A Wikipédia egy ingyenes, webalapú, együttműködésen alapuló, többnyelvű enciklopédiás projekt.

Tömörített adatfolyam:

0000000: ca02 f042 5769 6b69 7065 6469 6120 6973 ...BWikipédia

Az első 2 bájt 0xCA02 a hossz, egy kis-végi varintban kifejezve (lásd még a Protokollpuffereket a varint - változó hosszúságú egész számok leírásához), tehát a legjelentősebb bájt itt a 02. 0x02CA(LE nézet) = 0x014A= 330 bájt. A következő két bájt 0xF042azt jelzi, hogy ugyanaz a literál fog következni a 66+1

0000010: 2061 2066 7265 652c 2077 6562 2d62 6173 ingyenes, webes 0000020: 6564 2c20 636f 6c6c 6162 6f72 6174 6976ed, kollaboratív 0000030: 652c 206d 756c 7469 6c69 6e67 7561 6c20 e, többnyelvű 0000040: 656e 6379 636c 6f 09 3f f0 14 70 726f 6a65 encyclo.?.proje

0x09 egy típusú címkebyte 01, amelynek hossza 4 bit és eltolás 0x3F== 63 10 vagy "pedia"; 0xf014 egy 20+1 bájt hosszúságú literál

0000050: 6374 2e00 0000 0000 0000 0000 0000 0000 ct.

A példában egy négy vagy több karakterből álló részstring minden ismétlődését kiküszöbölte a tömörítési eljárás. A legtöbb más könyvtár jobban tömörítheti ezt a példát. A klasszikus gzip vagy bzip2 archiválókkal ellentétben a Snappy nem használ entrópiakódolást (például a Huffman-kódot ), és nem csomagolja át az alfabetikus karaktereket kompaktabb bitsorozatokba az előfordulásuk gyakorisága szerint.

Jegyzetek

  1. https://www.theregister.co.uk/2011/03/24/google_open_sources_snappy/
  2. http://www.infoq.com/news/2011/04/Snappy
  3. Kiadás 1.1.9 – 2021.
  4. https://github.com/google/snappy/blob/master/NEWS
  5. README.md  #Bevezetés . Google adattár a GitHubon . Letöltve: 2018. október 16. Az eredetiből archiválva : 2018. október 16..
  6. Avram, Ábel . Google Snappy-A Fast Compressing Library  (angol) , InfoQ  (2011. április 6.). Archiválva az eredetiből 2018. július 4-én. Letöltve: 2018. október 16.
  7. Metz, Cade . A Google nyílt forráskódú MapReduce tömörítése  (angolul) , The Register  (2011. március 24.). Archiválva az eredetiből 2018. július 3-án. Letöltve: 2018. október 16.
  8. 12 Ximen . _ Adattömörítési könyvtár a Google -tól , linux.org.ru  (2011. április 23.). Archiválva az eredetiből 2015. július 3-án. Letöltve: 2018. október 16.
  9. Erdem Agaoglu. LZO vs Snappy vs LZF vs ZLIB, A zsírsejtek tömörítési algoritmusainak összehasonlítása a  HBase -ben . Blog (2011. április 14.). Letöltve: 2018. október 16. Az eredetiből archiválva : 2018. július 3.
  10. ColumnStore Storage Architecture # Tömörítés valós idejű kibontással  . MariaDB Tudásbázis . Letöltve: 2018. október 16. Az eredetiből archiválva : 2017. október 16..
  11. Tárolómotor #CommitLog  . Apache Cassandra dokumentáció . Letöltve: 2018. október 16. Az eredetiből archiválva : 2018. március 17.
  12. ↑ Native Libraries Guide # Components  . Apache Hadoop dokumentáció . Letöltve: 2018. október 16. Az eredetiből archiválva : 2018. április 5..
  13. README.md  #Features . Google adattár a GitHubon . Letöltve: 2018. október 16. Az eredetiből archiválva : 2017. október 18..
  14. ↑ Szószedet MongoDB dokumentáció  . MongoDB dokumentáció . Letöltve: 2018. október 16. Az eredetiből archiválva : 2018. szeptember 9..
  15. Tömörítés #Konfiguráció  . Facebook adattár a GitHubon . Letöltve: 2018. október 16. Az eredetiből archiválva : 2017. december 28..
  16. format_description.txt  . _ Google adattár a GitHubon . Letöltve: 2018. október 16. Az eredetiből archiválva : 2017. április 30.