Ищу простой быстрый алгоритм сжатия на С (не ++)
От: _RL_  
Дата: 27.12.10 14:15
Оценка:
Для работы на не слишком распространенной платформе ищу очень быстрый и простой алгоритм сжатия, на языке С (не С++).
Конкретный формат не важен, можно на основе zip, просто lzw, или вообще какой-то другой. Совместимость ни с чем не требуется. Надо сжать данные и разжать обратно. Никакие другие функции не нужны.

Быстродействие — ключевой параметр. Скорость обработки требуется порядка 20-40 МБайт в секунду на среднем сервере, до 100 МБ/с на мощном.
Одна из найденных методом тыка библиотек показала результат 12 МБ/с, что слишком мало, поэтому ищу побыстрее...

Кто-нибудь видел такие библиотеки/алгоритмы?
быстрый zip
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: quodum  
Дата: 27.12.10 14:21
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?


Поглядите тут, может что пригодится: Rd Ross's Compression Crypt
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 27.12.10 14:25
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Для работы на не слишком распространенной платформе ищу очень быстрый и простой алгоритм сжатия, на языке С (не С++).

_RL>Конкретный формат не важен, можно на основе zip, просто lzw, или вообще какой-то другой. Совместимость ни с чем не требуется. Надо сжать данные и разжать обратно. Никакие другие функции не нужны.

_RL>Быстродействие — ключевой параметр. Скорость обработки требуется порядка 20-40 МБайт в секунду на среднем сервере, до 100 МБ/с на мощном.

_RL>Одна из найденных методом тыка библиотек показала результат 12 МБ/с, что слишком мало, поэтому ищу побыстрее...

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?

попробуй PPM алгоритмы и лучше задай это вопрос на compression.ru
Sic luceat lux!
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Kluev  
Дата: 27.12.10 14:34
Оценка: 1 (1) +1
Здравствуйте, _RL_, Вы писали:

_RL>Для работы на не слишком распространенной платформе ищу очень быстрый и простой алгоритм сжатия, на языке С (не С++).

_RL>Конкретный формат не важен, можно на основе zip, просто lzw, или вообще какой-то другой. Совместимость ни с чем не требуется. Надо сжать данные и разжать обратно. Никакие другие функции не нужны.

_RL>Быстродействие — ключевой параметр. Скорость обработки требуется порядка 20-40 МБайт в секунду на среднем сервере, до 100 МБ/с на мощном.

_RL>Одна из найденных методом тыка библиотек показала результат 12 МБ/с, что слишком мало, поэтому ищу побыстрее...

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?


LZO

http://www.oberhumer.com/opensource/lzo/
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: bobik1  
Дата: 27.12.10 14:35
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Для работы на не слишком распространенной платформе ищу очень быстрый и простой алгоритм сжатия, на языке С (не С++).

_RL>Конкретный формат не важен, можно на основе zip, просто lzw, или вообще какой-то другой. Совместимость ни с чем не требуется. Надо сжать данные и разжать обратно. Никакие другие функции не нужны.

_RL>Быстродействие — ключевой параметр. Скорость обработки требуется порядка 20-40 МБайт в секунду на среднем сервере, до 100 МБ/с на мощном.

_RL>Одна из найденных методом тыка библиотек показала результат 12 МБ/с, что слишком мало, поэтому ищу побыстрее...

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?


А чем zlib не подходит? На практике, он даже на слабеньких КПК быстро сжимает пакеты.
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: winston Россия  
Дата: 27.12.10 14:35
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Для работы на не слишком распространенной платформе ищу очень быстрый и простой алгоритм сжатия, на языке С (не С++).

_RL>Конкретный формат не важен, можно на основе zip, просто lzw, или вообще какой-то другой. Совместимость ни с чем не требуется. Надо сжать данные и разжать обратно. Никакие другие функции не нужны.

_RL>Быстродействие — ключевой параметр. Скорость обработки требуется порядка 20-40 МБайт в секунду на среднем сервере, до 100 МБ/с на мощном.

_RL>Одна из найденных методом тыка библиотек показала результат 12 МБ/с, что слишком мало, поэтому ищу побыстрее...

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?


QuickLZ
Автор: AMogil
Дата: 14.01.07
Re[2]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: _RL_  
Дата: 27.12.10 14:41
Оценка:
Здравствуйте, bobik1, Вы писали:
B>А чем zlib не подходит? На практике, он даже на слабеньких КПК быстро сжимает пакеты.

Как раз текущая реализация основана на zlib.
Его исходники уже давно и успешно использовались в других проектах. Но для одного конкретного проекта понадобилось встроить сжатие данных. Взял тот код zlib, что уже был — результат по скорости оказался неудовлетворительным.
Re[3]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: bobik1  
Дата: 27.12.10 15:06
Оценка:
_RL>Как раз текущая реализация основана на zlib.
_RL>Его исходники уже давно и успешно использовались в других проектах. Но для одного конкретного проекта понадобилось встроить сжатие данных. Взял тот код zlib, что уже был — результат по скорости оказался неудовлетворительным.

Для этого существуют системные требования. Пишите в документации, что машина с такой то конфигурацией поддерживает столько то одновременных подключений.
Я например сколько не экспериментировал, так и не добился существенного прироста в производительности и остановился на старом проверенном zlib, оптимальном по показателям скорость — уровень сжатия.
Re[4]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: _RL_  
Дата: 27.12.10 15:30
Оценка:
Здравствуйте, bobik1, Вы писали:
B>Для этого существуют системные требования. Пишите в документации, что машина с такой то конфигурацией поддерживает столько то одновременных подключений.

К сожалению, в данном случае это не пройдет. Есть два варианта — или скорость работы на текущих серверах удовлетворительна, или нет.
На данный момент ни zlib (около 12 МБ/сек), ни только что протестированный мной quickLZ (порядок тот же, около 12-14 МБ/сек) не удовлетворяют.
Будем искать дальше...

B>Я например сколько не экспериментировал, так и не добился существенного прироста в производительности и остановился на старом проверенном zlib, оптимальном по показателям скорость — уровень сжатия.


В моем случае степень сжатия не так важна — данные текстово-цифровые и весьма разреженные. Но вот по скорости достойных вариантов пока не нашел, смотрю по разным ссылкам.
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Muxa  
Дата: 27.12.10 16:15
Оценка:
а ты как тестируешь? что пакуешь?
конкретные циферки от этого сильно зависят.

я тут проверил архиватор AIN (написан на C/ASM).
дал ему файл с текстом "quick brown fox jumps over a lazy dog" размером один гигабайд пожевать.
он выплюнул 4-метровый архив через 40 сек. (25 MB/s).
Re[5]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: npak Россия  
Дата: 27.12.10 16:21
Оценка: 1 (1)
Здравствуйте, _RL_, Вы писали:


_RL>К сожалению, в данном случае это не пройдет. Есть два варианта — или скорость работы на текущих серверах удовлетворительна, или нет.

_RL>На данный момент ни zlib (около 12 МБ/сек), ни только что протестированный мной quickLZ (порядок тот же, около 12-14 МБ/сек) не удовлетворяют.
_RL>Будем искать дальше...

_RL>В моем случае степень сжатия не так важна — данные текстово-цифровые и весьма разреженные. Но вот по скорости достойных вариантов пока не нашел, смотрю по разным ссылкам.


Для какого уровня сжатия вы тестировали zlib? скорость сжатия меняется в разы при изменении уровня сжатия.
Re[5]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: sch  
Дата: 27.12.10 16:58
Оценка: +1
_RL>В моем случае степень сжатия не так важна — данные текстово-цифровые и весьма разреженные. Но вот по скорости достойных вариантов пока не нашел, смотрю по разным ссылкам.

Возможно вам будет лучше написать кастомный алгоритм сжатия именно для ваших данных, он может оказаться в разы быстрее и лучше сжимать чем алгоритмы общего назначения.
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: uzhas Ниоткуда  
Дата: 27.12.10 18:56
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?

все же рекомендую вам осилить zlib еще разок
покрутите настройки (уровни сжатия), по дефолту там уровень 6 вроде, максимальный уровень 9
аккуратно свой код проверьте, чтобы убедиться, что именно zlib тормозит, а не ваша обвязка
если он не подходит, то вам уже надо более четко сформулировать какого формата данные и под этот формат искать архиватор
для видео — это кодеки, для музыки — другие кодеки, для текстов — это конкретные архиваторы
еще можете архиватор Булата поюзать http://www.freearc.org/ (все-таки реклама реально зомбирует, булат, почисти подпись )
Re: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: c-smile Канада http://terrainformatica.com
Дата: 27.12.10 19:20
Оценка:
Здравствуйте, _RL_, Вы писали:

_RL>Кто-нибудь видел такие библиотеки/алгоритмы?


Это вот просто:
http://rsdn.ru/forum/cpp.applied/962907.1.aspx
Автор: c-smile
Дата: 24.12.04

и по идее должно быть быстро.
Re[2]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: _RL_  
Дата: 27.12.10 20:40
Оценка:
Здравствуйте, uzhas, Вы писали:

U>все же рекомендую вам осилить zlib еще разок

U>покрутите настройки (уровни сжатия), по дефолту там уровень 6 вроде, максимальный уровень 9
U>аккуратно свой код проверьте, чтобы убедиться, что именно zlib тормозит, а не ваша обвязка
U>еще можете архиватор Булата поюзать http://www.freearc.org/ (все-таки реклама реально зомбирует, булат, почисти подпись )

Zlib крутил по всякому, ставил все варианты, даже 1 уровень... Допускаю, что он был собран изначально не слишком качественно, это у нас другой коллега собирал, еще лет 5 назад. Он там подкручивал чего-то, адаптировал...

U>если он не подходит, то вам уже надо более четко сформулировать какого формата данные и под этот формат искать архиватор

U>для видео — это кодеки, для музыки — другие кодеки, для текстов — это конкретные архиваторы

Данные — из базы данных, какие обычно там данные и лежат — строки, числа, даты и т.п.
Бывают сильно разреженные таблицы, бывают плотные. Как обычно.
Re[2]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: TimurSPB Интернет  
Дата: 27.12.10 20:55
Оценка:
CS>http://rsdn.ru/forum/cpp.applied/962907.1.aspx
Автор: c-smile
Дата: 24.12.04

Какая реализация! Столько указателей и magic numbers. Чую уязвимости есть.
И все таки я за zlib. Проверенное временем решение, правда и там по безопасности критические вещи всплывали.
Make flame.politics Great Again!
Re[2]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: K13 http://akvis.com
Дата: 28.12.10 06:24
Оценка:
_RL>>Быстродействие — ключевой параметр.

K>LZO

K>http://www.oberhumer.com/opensource/lzo/

Именно. Самый быстрый пакер из всех что я видел.
Re[5]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Kluev  
Дата: 28.12.10 08:07
Оценка: +1
Здравствуйте, _RL_, Вы писали:

_RL>Здравствуйте, bobik1, Вы писали:

B>>Для этого существуют системные требования. Пишите в документации, что машина с такой то конфигурацией поддерживает столько то одновременных подключений.

_RL>К сожалению, в данном случае это не пройдет. Есть два варианта — или скорость работы на текущих серверах удовлетворительна, или нет.

_RL>На данный момент ни zlib (около 12 МБ/сек), ни только что протестированный мной quickLZ (порядок тот же, около 12-14 МБ/сек) не удовлетворяют.
_RL>Будем искать дальше...

Что-то маленькая скорость получается. Может проблема уже не в копрессоре, а например в неправильном выделении памяти через стандартный heap?
Re[6]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: _RL_  
Дата: 28.12.10 08:29
Оценка:
Здравствуйте, Kluev, Вы писали:
K>Что-то маленькая скорость получается. Может проблема уже не в копрессоре, а например в неправильном выделении памяти через стандартный heap?

Чорд. Неправильная методика тестирования при параллельном выполнении была

Текущее положение такое:
MiniLZO ~40 мбайт/сек
QuickLZ ~55 мбайт/сек.

Соответственно, пока остановлюсь на последнем варианте. С нового года попробую потестировать другие.
Спасибо всем!!!
Re[2]: Ищу простой быстрый алгоритм сжатия на С (не ++)
От: Kerbadun  
Дата: 03.01.11 18:45
Оценка:
K>LZO

K>http://www.oberhumer.com/opensource/lzo/


Если не ошибаюсь, на современных компьютерах оно работает быстрее, чем memcpy.

Когда он умрет, его мозг заспиртуют в стакане
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.