HighLoad++ 2017. Архитектуры/масштабируемость, бекенд, enterprise-системы

ВИДЕОУРОК №9. Хочу всё сжать

Ловко придумать схему сжатия для своих данных умеют не все, а очень зря. Иногда (иногда) при помощи этой магии удается добиться как бы невозможного: одновременно и сэкономить диск или память, и при этом ускорить код. Как работает магия сжатия в целом? Как она работает более конкретно в очень разных продуктах: ""просто базах"" типа MySQL или Mongo; в поисковиках типа Lucene или Sphinx (или даже веб-поисках); в колоночных хранилищах типа Vertica или Clickhouse; в конце концов, внутри апдейтов Chrome? Обсудим это, пробежимся по всем важным ключевым словам от замшелых Huffman до моднейших Snappy - и, важнее, по ещё паре десятков других ключевых слов. Подробно разберем несколько особо интересных методов и трюков про сжатие и прочую перепаковку данных. Посмотрим пример на 100 строк кода со сжатием в 6 раз и одновременным ускорением работы в 5 раз (читерством, конечно), причем успешно написанный не специально обученным монстром, а совершенно обычными разработчиками. Посмотрим на скорость разных готовых кодеков, попытаемся понять, когда какой можно применять, а где нельзя. Бонус-трек в коридоре, если кому интересно, как устроено внутри сжатие картинок, видео и прочего такого. Условно прикинем на пальцах, как написать свой простенький игрушечный JPEG-декодер в сотню-другую строк; можно на JavaScript или Python. Или не JPEG!