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