Кіріспе

Деректерді сығыстыру компьютерлік бағдарламасы.

rzip – 900 МБ көлемді сөздік терезесінде бастапқы LZ77 стиліндегі тізбектерді салыстыру, содан кейін bzip2 негізіндегі Burrows–Wheeler түрлендіруі және энтропиялық кодтау (Хуффман) 900 кБ шығыс бөліктері бойынша жасалған, өте кең көлемді деректерді сығыстыруға арналған компьютерлік бағдарлама.

Анықтамалық іске асыру

rsync-тегі алгоритмге негізделген жылжымалы тексеру сомасының алгоритмі осы үлкен деректер жиынтығынан мүмкін сәйкестіктерді анықтау үшін қолданылады. Хеш-бөшкелер толғанда, бұрынғы хештер ("маркерлер") екі еселенген мөлшерде жойылады. Маркерлердің жойылуы жақсы жабуды қамтамасыз етеді, ал қашықтық артқан сайын сәйкестіктердің дәлдігі біртіндеп төмендейді. Бұл жүзеге асыру 31 тізбекті байттан кем ұзындықтағы сәйкестіктерді іздемейді.

Артықшылықтар

Rzip пен басқа белгілі қысылу алгоритмдерінің басты айырмашылығы – оның өте ұзақ қашықтықтағы қайталануды пайдалану қабілеті. Gzip-те қолданылатын танымал deflate алгоритмі 32 КиБ көлеміндегі ең үлкен тарих буферін қолданады. Bzip2-де қолданылатын Burrows-Wheeler түрлендіру блогын сұрыптау алгоритмі 900 КиБ тарихпен шектелген. Rzip-тегі тарих буфері 900 МБ-қа дейін жете алады, бұл gzip немесе bzip2-ден бірнеше есе үлкен. Rzip, bzip2 кітапханасын қолданғанына қарамастан, көбінесе bzip2-ден жылдам жұмыс істейді. Мұның себебі rzip bzip2-ге қысқартылған деректерді жібереді, сондықтан bzip2-ге аз жұмыс жасау қалады. Шамалы салыстырулар жасалды (бірақ бұл сенімді өлшемдеме үшін жеткіліксіз).

Кемшіліктер

rzip әр мақсатқа сай келмейді. rzip-тің ең басты екі кемшілігі – оны конвейерге қосу мүмкін емес (сондықтан ол стандарттық кірістен дерек оқи алмайды немесе стандарттық шығысқа жаза алмайды), және ол көп жадты пайдаланады: үлкен файлды сығымдау кезінде әдетте жүздеген мегабайт жедел жад (RAM) қолданылуы мүмкін. Егер жеткілікті жедел жад болса және өте жоғары сығымдалу қажет болса, rzip қолданылуы керек, бірақ егер бұл шарттар орындалмаса, gzip және bzip2 сияқты, жадты аз пайдаланатын басқа сығымдалу әдістерін пайдалану керек. Конвейерлік өңдеуді қосуға мүмкіндік беретін кем дегенде бір түзету бар.

Тарих

rzip бастапқыда Эндрю Триджелл өзінің PhD диссертациялық зерттеуінің бір бөлігі ретінде жазылған.

rzip64

rzip64 – бірнеше CPU ядросын параллель қолдана алатын, өте үлкен файлдарға арналған rzip кеңейтімі. Осыған қатысты өлшемдердің нәтижелері бар. Бірақ ең маңыздысы – rzip64 кез келген сәтте тоқтатылуы мүмкін. Осы арқылы, ағымдағы сығылу міндеті (үлкен файлдар үшін бірнеше сағатқа созылуы мүмкін) тіпті жүйелік техникалық жөндеу үшін жүйені қайта жүктеу кезінде де аяқталған жұмысты жоғалтпай, кейін жалғастырыла алады. rzip64 файл форматы бастапқы rzip форматымен бірдей.

РЕП

REP – Булат Зиганшиннің FreeArc архивінде LZMA/Tornado сығылу алгоритмдерінің алдын ала өңдеушісі ретінде қолданылатын rzip алгоритмінің баламалы нұсқасы. FreeArc-та REP үлкен арақашықтықтағы сәйкестіктерді табады, содан кейін LZMA қалған деректерді сығымдайды. Мысалы, 2 ГБ жедел жады бар компьютерде REP 1 ГБ дейінгі арақашықтықта кем дегенде 512 байттық сәйкестіктерді табады, ал LZMA 128 МБ дейінгі арақашықтықта қалған сәйкестіктерді табады. Осылайша, олар бірлесіп жұмыс істеп, 2 ГБ жедел жад шегінде ең жақсы сығылуды қамтамасыз етеді. Ағынмен шығаруға және LZMA-мен бірлесіп жұмыс істеуге бағытталғандықтан, REP бастапқы RZIP нұсқасынан кейбір ерекшеліктері бар. Біріншіден, ол әдепкі бойынша 512 байттан асатын сәйкестіктерді ғана табады, себебі сынақтар көрсеткендей, бұл REP+LZMA сығылуы үшін ең оңтайлы параметр. Екіншіден, ол шамамен жартылай жедел жад көлеміндегі жылжымалы сөздікті пайдаланады, сондықтан сығылған файлдан деректерді қайта оқу қажеттілігі тумайды. REP-тің артықшылығы – оның көбейтуші дөңгелек хэші, ол есептеуде жылдам және дерлік идеал таралымға ие. Үлкен минималды сәйкестік ұзындығы (rzip-тегі 32 байтқа қарағанда 512 байт) қосымша жылдамдық оптимизациясына мүмкіндік берді, сондықтан REP өте жылдам сығылуды қамтамасыз етеді (Intel i3 2100 процессорда шамамен 200 МБ/с).

SREP

SREP (SuperREP) – бұл Tridgell-дің LZ компрессор идеясының іске асырылуы, ол сөздікті RAM-да сақтамайды, оның орнына өңделген блоктардың SHA1 хэштерін пайдаланып, олардың мазмұнын салыстырады. Бұл бағдарламаға RAM көлемінен 10 есе үлкен файлдарды сығуға мүмкіндік береді. Декомпрессия файлдың декомпрессияланған бөлігінен деректерді оқу арқылы немесе болашақ сәйкестіктерді жадта сақтау арқылы (болашақ LZ компрессия алгоритмі) жүзеге асырылады. Әрине, болашақ LZ компрессиясы кіріс файлды 2 рет қарауды қажет етеді, бірақ декомпрессияға өте аз жад керек. Бір тәжірибеде 22 ГБ файлды 512 байттық ең кішкентай сәйкестік ұзындығымен және толық 22 ГБ сөздікпен сығыу үшін декомпрессияға бар болғаны 2 ГБ RAM қажет болды.