сжатый архив с быстрым доступом к отдельному файлу - PullRequest
2 голосов
/ 09 июня 2010

Мне нужно придумать формат файла для нового приложения, которое я пишу. Этот файл должен содержать кучу других текстовых файлов, которые в основном являются текстовыми, но также могут быть и в других форматах. Естественно, сжатый 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 и т. Д. .

Спасибо, ~ Eric

1 Ответ

2 голосов
/ 09 июня 2010

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

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

...