Załóżmy, że muszę wysłać niektóre dane z jednego komputera do drugiego, za pośrednictwem dość szybkiej sieci ... na przykład standardowe połączenie 100 Mb / s (~ 10 MB / s). Moje napędy dyskowe są standardowymi dyskami twardymi, więc ich prędkość wynosi od 30 MB / s do 100 MB / s. Sądzę więc, że kompresja danych w locie może pomóc.
Ale ... Nie chcę być ograniczany przez procesor. Jeśli wybiorę algorytm intensywnie obciążający procesor, transfer będzie przebiegał wolniej niż bez kompresji.
Jest to trudne w przypadku kompresorów takich jak GZIP i BZIP2, ponieważ zwykle ustawiasz siłę kompresji raz dla całego transferu, a moje strumienie danych są czasami łatwe, czasem trudne do kompresji - to sprawia, że proces nie jest optymalny, ponieważ czasami nie używam pełnego procesora, a czasem przepustowość nie jest w pełni wykorzystywana.
Czy istnieje program do kompresji, który dostosowałby się do bieżącego procesora / przepustowości i trafił w najlepsze miejsce, aby transfer był optymalny? Idealnie dla Linuksa, ale wciąż jestem ciekawy wszystkich rozwiązań. Chciałbym zobaczyć coś kompatybilnego z dekompresorami GZIP / BZIP2, ale nie jest to konieczne.
Chciałbym więc zoptymalizować całkowity czas przesyłania, a nie tylko ilość bajtów do wysłania.
Nie potrzebuję też dekompresji w czasie rzeczywistym ... wystarczy kompresja w czasie rzeczywistym. Host docelowy może przetwarzać dane później w wolnym czasie. Wiem, że niewiele się to zmienia (kompresja wymaga zwykle dużo więcej procesora niż dekompresji), ale jeśli istnieje rozwiązanie, które mogłoby wykorzystać ten fakt, tym lepiej.
Za każdym razem, gdy przesyłam różne dane, i naprawdę chcę, aby te jednorazowe transfery były jak najszybsze. Więc nie skorzystam z szybszego uzyskiwania wielu przelewów z powodu silniejszej kompresji.
Dzięki,
źródło
Odpowiedzi:
Jest to aktualny przedmiot badań - przede wszystkim w obszarze sieci czujników, w których celem jest zminimalizowanie zużycia energii, a nie maksymalizacja przepustowości. Zasada kompresji adaptacyjnej jest jednak taka sama.
Oto ostatni artykuł profesora z USC .
Może mógłbyś spróbować wdrożyć jego algorytm? Jestem pewien, że wiele osób byłoby zainteresowanych dobrą implementacją.
źródło
Hum, to pytanie jest starsze niż rok, więc może minąć niezauważone:
W każdym razie Google niedawno opublikował Snappy'ego, który może być dokładnie tym, czego szukasz, a mianowicie:
Jest zaimplementowany w C ++ z powiązaniami dostępnymi dla C i szeregu innych języków.
źródło