сжатый архив с быстрым доступом к отдельному файлу

Мне нужно придумать формат файла для нового приложения, которое я пишу. Этот файл должен содержать кучу других текстовых файлов, которые в основном являются текстовыми, но могут быть и в других форматах. Естественно, сжатый файл tar, кажется, отвечает всем требованиям. Проблема в том, что я хочу иметь возможность очень быстро извлекать некоторые данные из файла, а получение только определенного файла из файла tar.gz, похоже, занимает больше времени, чем следовало бы. Я предполагаю, что это связано с тем, что он должен распаковать весь файл, хотя мне нужен только один. Когда у меня есть обычный несжатый tar-файл, я могу получить эти данные очень быстро. Допустим, файл, который мне нужен быстро, называется data.dat.

Например, команда...

tar -x data.dat -zf myfile.tar.gz

... это то, что занимает намного больше времени, чем мне бы хотелось.

Файлы MP3 содержат данные id3, а файлы JPEG содержат данные exif, которые можно быстро прочитать, не открывая весь файл. Я хотел бы, чтобы мой файл data.dat был доступен аналогичным образом.

Я думал, что могу оставить его несжатым и отделить от остальных файлов в myfile.tar.gz. Затем я мог бы создать файл tar из data.dat и myfile.tar.gz, а затем, надеюсь, эти данные смогут быть извлекается быстрее, потому что он находится в начале внешнего tar-файла и не сжат.

Звучит правильно?... поместить сжатый tar в tar-файл?

По сути, мне нужно иметь файл архивного типа с быстрым доступом к одному конкретному файлу. Tar отлично с этим справляется, но я также хотел бы, чтобы эти данные были сжаты, и как только я это сделаю, у меня больше не будет быстрого доступа. Существуют ли другие форматы архивов, которые дадут мне необходимый быстрый доступ?

В качестве примечания, это приложение будет написано на Python. Если решение требует повторного изобретения колеса с моим собственным двоичным форматом, я знаком с C и не имел бы проблем с написанием модуля Python на C. В идеале я бы просто использовал tar, dd, cat, gzip и т. д. .

Спасибо, ~ Эрик


person eric.frederich    schedule 08.06.2010    source источник
comment
Мне нужно придумать формат файла для нового приложения, которое я пишу. настолько очевидно неправильно, что все остальное не имеет значения. Удачи.   -  person msw    schedule 09.06.2010
comment
@msw, учитывая контекст вопроса (включая «Есть ли другие форматы архивов, которые дадут мне необходимый мне быстрый доступ»), ясно, что он не горит желанием изобретать новый формат сжатия.   -  person Matthew Flaschen    schedule 09.06.2010


Ответы (1)


ZIP кажется подходящим для вашей ситуации. Файлы сжимаются по отдельности, что означает, что вы получаете к ним доступ без потоковой передачи через все ранее.

В Python вы можете использовать zipfile.

person Matthew Flaschen    schedule 08.06.2010
comment
Спасибо за идею. Я попробую завтра и посмотрю, как это работает с точки зрения производительности (быстрый доступ), и посмотрю, как zip складывается по сравнению с gzip-архивом tar. - person eric.frederich; 09.06.2010