Lendületes | |
---|---|
Típusú | függvénykönyvtár és program kombinálható [d] |
Fejlesztő | |
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 .
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).
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édiaAz 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.?.proje0x09 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.