Anggap saya perlu mengirim beberapa data dari satu komputer ke komputer lain, melalui jaringan yang cukup cepat ... misalnya koneksi 100Mbit standar (~ 10MB / s). Drive disk saya adalah HDD standar, sehingga kecepatannya berkisar antara 30MB / s dan 100MB / s. Jadi saya kira mengompresi data dengan cepat bisa membantu.
Tapi ... Saya tidak ingin dibatasi oleh CPU. Jika saya memilih algoritma yang intensif pada CPU, transfer sebenarnya akan lebih lambat daripada tanpa kompresi.
Ini sulit dengan kompresor seperti GZIP dan BZIP2 karena Anda biasanya mengatur kekuatan kompresi sekali untuk seluruh transfer, dan aliran data saya terkadang mudah, kadang sulit dikompres - ini membuat proses menjadi tidak optimal karena kadang-kadang saya tidak menggunakan CPU penuh, dan terkadang bandwidth kurang dimanfaatkan.
Apakah ada program kompresi yang akan beradaptasi dengan CPU / bandwidth saat ini dan mencapai sweet spot sehingga transfer akan optimal? Idealnya untuk Linux, tapi saya masih penasaran dengan semua solusi. Saya ingin melihat sesuatu yang kompatibel dengan dekompresor GZIP / BZIP2, tetapi ini tidak perlu.
Jadi saya ingin mengoptimalkan total waktu transfer, bukan hanya jumlah byte yang dikirim.
Juga saya tidak perlu dekompresi waktu nyata ... kompresi waktu nyata sudah cukup. Host tujuan dapat memproses data nanti di waktu luangnya. Saya tahu ini tidak banyak berubah (kompresi biasanya lebih banyak CPU-intensif daripada dekompresi), tetapi jika ada solusi yang bisa menggunakan fakta ini, semua lebih baik.
Setiap kali saya mentransfer data yang berbeda, dan saya benar-benar ingin melakukan transfer satu kali ini secepat mungkin. Jadi saya tidak akan mendapat manfaat dari mendapatkan beberapa transfer lebih cepat karena kompresi yang lebih kuat.
Terima kasih,
sumber
Jawaban:
Ini adalah subjek penelitian saat ini - terutama di bidang jaringan sensor di mana tujuannya adalah untuk meminimalkan penggunaan daya, daripada memaksimalkan throughput. Namun, prinsip kompresi adaptif sama.
Berikut ini makalah terbaru dari seorang profesor di USC .
Mungkin Anda bisa mencoba menerapkan algoritme-nya? Saya yakin akan ada banyak orang yang tertarik dengan implementasi yang baik.
sumber
Hum, pertanyaan ini sudah lebih dari satu tahun sekarang, jadi ini mungkin berlalu tanpa disadari:
Ngomong-ngomong, Google baru-baru ini menerbitkan Snappy yang mungkin persis seperti yang Anda cari, yaitu:
Ini diimplementasikan dalam C ++ dengan binding tersedia untuk C dan berbagai bahasa lainnya.
sumber