Компания Google открыла под лицензией Apache код библиотеки Snappy, в которую включен набор высокопроизводительных функций для сжатия и распаковки данных. Библиотека не поддерживает совместимость с существующими методами сжатия и не предназначена для обеспечения максимальной степени сжатия. Вместо этого все усилия разработчиков были направлены на создание экстремально быстрого способа сжатия и распаковки, при умеренном уровне сжатия.

Код Snappy можно считать стабильным, так как он давно и активно используется в первичных проектах Google, от BigTable и MapReduce до внутренних RPC-систем. По заявлению Google, формат кодирования Snappy зафиксирован и не будет меняться в будущих версиях библиотеки. Отдельно отмечается высокая стойкость декодировщика к нарушению целости обрабатываемого потока, который разработан специально с оглядкой на исключение крахов при обработке любых входных данных.

Скорость работы Snappy значительно опережает такие реализации, как LZO, LZF, FastLZ и QuickLZ, при отстающем, но сопоставимом уровне сжатия. На одноядерном CPU Core i7 64-разрядная сборка Snappy продемонстрировала способность сжимать потоки данных со скоростью 250 Мб/сек и разжимать со скоростью 500 Мб/сек. Примечательно, что добиться столь высокого уровня производительности удалось без использования ассемблерных вставок, что позволяет использовать Snappy для различных архитектур и платформ.

При сравнении с наиболее быстрым режимом сжатия библиотеки zlib, Snappy продемонстрировала десятикратный выигрыш в скорости при тестировании наборов данных различного характера (от текстов до бинарных объектов), но при этом размер сжатых данных получался на 20-100% больше. Для обычного текста уровень обеспечиваемого в Snappy сжатия составляет 1.5-1.7 раз, для HTML-файлов - 2-4 раза. Zlib в быстром режиме обеспечивает сжатие в текста в 2.6-2.8 раз, а HTML-файлов в 3-7 раз.

Источник: http://www.opennet.ru/opennews/art.shtml?num=30003