Предположим, мне нужно отправить некоторые данные с одного компьютера на другой через довольно быструю сеть ... например, стандартное соединение 100 Мбит (~ 10 МБ / с). Мои накопители являются стандартными жесткими дисками, поэтому их скорость составляет от 30 МБ / с до 100 МБ / с. Поэтому я думаю, что сжатие данных на лету может помочь.
Но ... я не хочу быть ограниченным процессором. Если я выберу алгоритм, интенсивно работающий с процессором, передача будет идти медленнее, чем без сжатия.
Это сложно с компрессорами, такими как GZIP и BZIP2, потому что вы обычно устанавливаете силу сжатия один раз для всей передачи, и мои потоки данных иногда легко, иногда трудно сжать - это делает процесс неоптимальным, потому что иногда я не использую полный процессор, и иногда пропускная способность используется недостаточно.
Существует ли программа сжатия, которая бы адаптировалась к текущему процессору / пропускной способности и попала в точку, чтобы передача была оптимальной? Идеально для Linux, но мне все еще интересно все решения. Я бы хотел увидеть что-то совместимое с декомпрессорами GZIP / BZIP2, но это не обязательно.
Поэтому я хотел бы оптимизировать общее время передачи, а не просто количество байтов для отправки.
Также мне не нужна распаковка в реальном времени ... сжатия в реальном времени достаточно. Хост назначения может обрабатывать данные позже в свободное время. Я знаю, что это не сильно изменится (сжатие обычно намного более интенсивно использует процессор, чем декомпрессия), но если есть решение, которое может использовать этот факт, тем лучше.
Каждый раз, когда я передаю разные данные, я действительно хочу сделать эти одноразовые переводы как можно быстрее. Так что я не выиграю от получения нескольких передач быстрее из-за более сильного сжатия.
Спасибо,
источник
Ответы:
Это актуальный предмет исследований - в первую очередь в области сенсорных сетей, где цель состоит в том, чтобы минимизировать потребление энергии, а не максимизировать пропускную способность. Однако принцип адаптивного сжатия тот же.
Вот недавняя статья профессора из USC .
Может быть, вы могли бы попробовать реализовать его алгоритм? Я уверен, что будет много людей, заинтересованных в хорошей реализации.
источник
Хм, этот вопрос старше года, так что это может остаться незамеченным:
В любом случае, Google недавно опубликовал Snappy, который может быть именно тем, что вы ищете, а именно:
Он реализован на C ++ с привязками, доступными для C и ряда других языков.
источник