Bulat_Ziganshin
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору кстати, раз уж разговор вертится вокруг rep с большими словарями. по умолчанию в нём используется скажем 1гб для самих данных и вчетверо меньше - для индекса. хранить историю данных приходится только потому, что простенький 4-байтный хеш, который вычисляется от этих 512 байт - ненадёжен в смысле коллизий. теперь представьте себе, что мы храним вместо него 16-байтный cryptographically strong hash - типа md5. тогда историю можно вычеркнуть нафиг. более того, то что хеш-таблица занимает четверть от объёма индексированных данных - это необязательно. если хранить такой хеш для каждого 256-байтного блока данных, то это гарантирует нам нахождение всех матчей длины от 511 (поскольку любой такой матч включает как минимум один полный 256-байтный блок, начинающийся с 256-байтной границы). т.е. для поиска строк длины 511+ c N-гб историей достаточно памяти в N/16 гб проблемы возникнут только при распаковке если при упаковке старые данные нам и не нужны - достаточно иметь 100% уверенность в их совпадении, то при распаковке нам как никак надо их копировать со старого места если считать, что мы все эти данные будем хранить на диске вместо ОЗУ, то копирование каждой строки потребует операции чтения с диска, накладные расходы на которую практически равны disk seek time - т.е. 10 мс для винта и 1 мс для очень хорошей флешки представим себе, что мы хотим обеспечить скорость распаковки скажем 1 мб/с. это означает, что каждые 10 мс мы должны распаковывать как минимум 10 кб, что в свою очередь гарантировано только если у нас rep кодирует только совпадения длины 10кб+ скажем, если остановиться на кодировании строк длины 4кб+, то для сжатия потребуется N/128 гб памяти (т.е. твои 18 гиг можно прошерстить, используя всего 160 мег озу) и скорость распаковки будет ограничена 400 кб/с. вот только винт жалко Ghost, попробуй для интереса - как меняется сжатие твоих данных при переходе от rep:512 (по умолчанию) к rep:4096? с дальнейшей обработкой lzma и без оной. понятно, это лишь прикидка, поскольку реально rep сейчас окучивать большие истанции не умеет может, мне это дело добавить на быструю руку, без возможности распаковки... |