This is an Erlang NIF for Google's snappy fast compressor and decompressor.
Google snappy's official repository and bug tracking system is at:
Its source is included in this project.
https://github.com/fdmanana/snappy-erlang-nif
Snappy is much faster than zlib's deflate compression, specially for reasonably large amounts of data. Here follow a few basic tests.
Erlang/OTP 26 [erts-14.2.5.10] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1]
Eshell V14.2.5.10 (press Ctrl+G to abort, type help(). for help)
1> code:add_path("ebin").
true
2> {ok, J} = file:read_file("doc_11k.json").
{ok,<<"{\n \"data3\": \"vh3w3TyPAxe01SOJhOgTMzOI8vO6tUZv0h36XVdRvECcDBJW5VAeLOJC1u9NRumMg5BcDp932M41Plr1Rg0sekoUawsGZL"...>>}
3> timer:tc(snappy, compress, [J]).
{251616,
{ok,<<"øUô÷*{\n \"data3\": \"vh3w3TyPAxe01SOJhOgTMzOI8vO6tUZv0h36XVdRvECcDBJW5VAeLOJC1u9NRumMg5BcDp932M41Plr1R"...>>}}
4> timer:tc(snappy, compress, [J]).
{59,
{ok,<<"øUô÷*{\n \"data3\": \"vh3w3TyPAxe01SOJhOgTMzOI8vO6tUZv0h36XVdRvECcDBJW5VAeLOJC1u9NRumMg5BcDp932M41Plr1R"...>>}}
5> timer:tc(snappy, compress, [J]).
{36,
{ok,<<"øUô÷*{\n \"data3\": \"vh3w3TyPAxe01SOJhOgTMzOI8vO6tUZv0h36XVdRvECcDBJW5VAeLOJC1u9NRumMg5BcDp932M41Plr1R"...>>}}
6> timer:tc(snappy, compress, [J]).
{57,
{ok,<<"øUô÷*{\n \"data3\": \"vh3w3TyPAxe01SOJhOgTMzOI8vO6tUZv0h36XVdRvECcDBJW5VAeLOJC1u9NRumMg5BcDp932M41Plr1R"...>>}}
7> timer:tc(snappy, compress, [J]).
{34,
{ok,<<"øUô÷*{\n \"data3\": \"vh3w3TyPAxe01SOJhOgTMzOI8vO6tUZv0h36XVdRvECcDBJW5VAeLOJC1u9NRumMg5BcDp932M41Plr1R"...>>}}
8> timer:tc(snappy, compress, [J]).
{53,
{ok,<<"øUô÷*{\n \"data3\": \"vh3w3TyPAxe01SOJhOgTMzOI8vO6tUZv0h36XVdRvECcDBJW5VAeLOJC1u9NRumMg5BcDp932M41Plr1R"...>>}}
9>
timer:tc(zlib, zip, [J]).
{461,
<<21,154,71,14,165,74,18,69,231,127,21,95,181,2,188,233,
25,222,123,207,12,239,125,98,91,189,247,...>>}
10> timer:tc(zlib, zip, [J]).
{431,
<<21,154,71,14,165,74,18,69,231,127,21,95,181,2,188,233,
25,222,123,207,12,239,125,98,91,189,247,...>>}
11> timer:tc(zlib, zip, [J]).
{440,
<<21,154,71,14,165,74,18,69,231,127,21,95,181,2,188,233,
25,222,123,207,12,239,125,98,91,189,247,...>>}
12> timer:tc(zlib, zip, [J]).
{332,
<<21,154,71,14,165,74,18,69,231,127,21,95,181,2,188,233,
25,222,123,207,12,239,125,98,91,189,247,...>>}
13> timer:tc(zlib, zip, [J]).
{303,
<<21,154,71,14,165,74,18,69,231,127,21,95,181,2,188,233,
25,222,123,207,12,239,125,98,91,189,247,...>>}
14> timer:tc(zlib, zip, [J]).
{406,
<<21,154,71,14,165,74,18,69,231,127,21,95,181,2,188,233,
25,222,123,207,12,239,125,98,91,189,247,...>>}
15>
byte_size(element(2, snappy:compress(J))).
11005
16> byte_size(zlib:zip(J)).
828417> crypto:start().
ok
18> Large = base64:encode(crypto:strong_rand_bytes(100 * 1024)).
<<"E8CcPijHF6N2/WMTvRkLr7FdkCWlndHx8iVh3n7ZPHD3khPnzPefazjDk7Ox2B1zIxA2TVB+4RDBSk2DmDXQM4sasup06Y2uZrsWgnUF9DBTkJVxuB3L"...>>
19> timer:tc(snappy, compress, [Large]).
{201,
{ok,<<"ت\bôÿÿE8CcPijHF6N2/WMTvRkLr7FdkCWlndHx8iVh3n7ZPHD3khPnzPefazjDk7Ox2B1zIxA2TVB+4RDBSk2DmDXQM4sasup06Y"...>>}}
20> timer:tc(snappy, compress, [Large]).
{204,
{ok,<<"ت\bôÿÿE8CcPijHF6N2/WMTvRkLr7FdkCWlndHx8iVh3n7ZPHD3khPnzPefazjDk7Ox2B1zIxA2TVB+4RDBSk2DmDXQM4sasup06Y"...>>}}
21> timer:tc(snappy, compress, [Large]).
{179,
{ok,<<"ت\bôÿÿE8CcPijHF6N2/WMTvRkLr7FdkCWlndHx8iVh3n7ZPHD3khPnzPefazjDk7Ox2B1zIxA2TVB+4RDBSk2DmDXQM4sasup06Y"...>>}}
22> timer:tc(snappy, compress, [Large]).
{312,
{ok,<<"ت\bôÿÿE8CcPijHF6N2/WMTvRkLr7FdkCWlndHx8iVh3n7ZPHD3khPnzPefazjDk7Ox2B1zIxA2TVB+4RDBSk2DmDXQM4sasup06Y"...>>}}
23>
timer:tc(zlib, zip, [Large]).
{7116,
<<20,155,197,114,227,64,20,69,63,72,11,49,45,197,44,89,
12,59,49,51,235,235,39,179,74,57,113,...>>}
24> timer:tc(zlib, zip, [Large]).
{7254,
<<20,155,197,114,227,64,20,69,63,72,11,49,45,197,44,89,
12,59,49,51,235,235,39,179,74,57,113,...>>}
25> timer:tc(zlib, zip, [Large]).
{7136,
<<20,155,197,114,227,64,20,69,63,72,11,49,45,197,44,89,
12,59,49,51,235,235,39,179,74,57,113,...>>}
26> timer:tc(zlib, zip, [Large]).
{6760,
<<20,155,197,114,227,64,20,69,63,72,11,49,45,197,44,89,
12,59,49,51,235,235,39,179,74,57,113,...>>}
27> timer:tc(zlib, zip, [Large]).
{7349,
<<20,155,197,114,227,64,20,69,63,72,11,49,45,197,44,89,
12,59,49,51,235,235,39,179,74,57,113,...>>}
28>
byte_size(element(2, snappy:compress(Large))).
136548
29> byte_size(zlib:zip(Large)).
103438