Как стать автором
Обновить

Комментарии 10

На больших объёмах важен не столько алгоритм сжатия, сколько подход к дедупликации. Особенно дедупликации скрытых повторений, когда данные вроде разные, но можно подобрать такую обратимую трансформацию, что они станут одинаковыми.

Существуют различные уровни сжатия, от базового быстрого сжатия до высокого сжатия, которое требует больше времени на CPU, но обеспечивает лучшее сжатие. Например, стандартный уровень сжатия LZ4 может достигать скорости сжатия до 780 МБ/с и скорости декомпрессии до 4970 МБ/с

вместо 780 и 4970 вы могли написать абсолютно любые числа, так как они не имеют никакой привязки или сравнения, то и числа не имею смысла.

А для самого обычно zip нет нормальной pure Rust либы, чтобы можно было спокойно в Wasm скомпилить :(

Мне кажется, этот я тоже пробовал, и он у меня не захотел в wasm32-wasi компилиться, но я еще раз попробую. В любом случае спасибо

Таки это, именно в этом и было дело

Круто, с defaut-features = false компилится в Wasm и даже работает, спасибо!

Один из примеров таких алгоритмов - DCT.

DCT - это не алгоритм сжатия. Дискретное косинусное преобразование (DCT) - это один из способов представления данных (с потерями) в более сжимаемом виде, поверх него всё равно используются финальные кодеки типа арифметического кодирования или алгоритма Хаффмана.

brotli была разработана самой Dropbox.

Brotli - это разработка Google. https://github.com/google/brotli. Dropbox просто портировали его на rust

Реализуем простой алгоритм сжатия Run-Length Encoding.

Это не каноничная реализация алгоритма. Я опущу тот факт, что не представлен декодер. Опущу тот факт что данные форматируются в строку, т.е. число символов может отформатироваться как 1 так и 111 (3 символа) что усложняет разработку декодера. Опущу тот факт, что сначала нужно писать количество, а потом уже сам символ, а не наоборот как здесь, Но сама реализация в худшем случае увеличит исходные данные в 2 раза, в 50% размер или останется таким же или уменьшится незначительно. И только в идеальных условиях данные будут сжаты, опять же с оговорками выше. Про каноничный алгоритм можно почитать к примеру тут https://ru.wikipedia.org/wiki/Кодирование_длин_серий

Ссылки на сами проекты не приведены, что большой минус. Но есть примеры использования, за что спасибо.

В общем за старания 5, за подачу информации 2

Не поленился сходить и скомпилировать пример rle_encode
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=fa055aa6c636f9b9935f2ea55f8fbc60
Ещё при чтении статьи показалось, что там что-то не так

Original: aaaabbbccddddde
Compressed: a4b2c1d4

Зарегистрируйтесь на Хабре, чтобы оставить комментарий