No zabudli ste na to, ze ak sa na kompresiu do formatu bzip2 pouzije urcita cast pamate pre buffer, taka ista cast pamate musi byt pouzita na dekompresiu. Taze ak nieco zkomprimujete na stroji s 2GB RAM a potom to budete chciet dekomprimovat na nejakom starom routri 64MB RAM, ta neviem neviem ... Ako je tomu s rzip?
Dobrá poznámka. Vzhledem k velikosti bufferu u bzipu bych to neřešil (ikdyž bych si dokázal představit zařízení, kde by i to byl problém téměř neřešitelný), ale těch 900MB u rzipu mne trochu děsí, aneb zvolna začínám chápat, proč se to nemá rádo s rourama ;-). (Ne že bych zkoumal zdrojáky, jen mne to vede k myšlence, jak by se to ,,taky'' dalo udělat.aby to nepotřebovalo tolika paměti. Seek and seek and seek... ;-)
Nejsem expert na kompresni algoritmy, ale domnivam se, ze pri dekopmpresi neni vyzadovan tak velky buffer jako pri kompresi. Pri kompresi je totiz buffer vyuzivan pro hledani redundance - cim je vetsi, tim se ji tam muze najit vice.
Navic, jestli jsem to dobre pochopil, tak ten buffer s kapacitou 900MB neni umisten v pameti; misto toho se provadi seek nad vstupnim souborem. A prave proto rzip neumi cist z roury.
Pokud manuálová stránka od bzip2 není výtvorem barona Prášila, pak platí:
* na kompresi je potřeba 400K + 8*block_size
* na dekompresi 100K + 4*block_size
* s "--small" stačí na dekompresi 100K + 2.5*block_size
Dekomprese tedy opravdu je paměťově náročnější než komprese, ale obojí je lineární ve velikosti bloku.
Pokud jde o dekompresi. Rzip ma stejne pametove naroky jako bzip2 a je dokonce o trochu rychlejsi. Jinak doporucuji si prohlednout zdrojovy text rzipu. Je zalozen na velmi jednoduche myslence.
Dobry je psat komprimacni program jako preprocesor k overenemu algoritmu. Ja jsem napsal 2 komprimacni programy, protoze std. algoritmy na tech datech nezabiraly. Kdybych to napsal jako preprocesor k zipu, usetril bych si mnoho prace a starosti.
Nie tak celkom. Velky buffer potrebny na kompresiu je dobry na do aby sa nasla redundancia v uvedenom bloku dat. Pre rozzipovanie vacsinou staci uz najdenu redundanciu spracovat. Pri zazipovani je teda dobre mat velky buffer a hladat v nom, zatialco pri rozzipovavani nam staci poradit si s diskovymi operaciami (samozrejme buffer pomoze)
Da sa to zhruba povedat aj takto: rozzipovanie moze potrebovat menej pamate, pretoze pracuje so zazipovanymi datami, ktorych je menej ;)
Inac by sa subory obcas nedali rozbalovat na pocitaci ktory ma menej pamate ako ten na ktorom boli balene :)
Samozrejme to zavisi na pouzitom algoritme.