gzip — запись файла .tgz с использованием PHP с более чем 100 000 записей, но избегая записи отдельных файлов

Я пытаюсь написать файл .tgz, содержащий десятки, если не сотни тысяч файловых записей, содержимое каждой из которых получено из строки в базе данных. Каждая запись файла составляет около 2-5k данных.

Я хочу избежать этого без необходимости сначала записывать файлы. В настоящее время у меня есть PHP, создающий традиционную структуру каталогов, пишущий файлы, затем создающий tgz из этого в самом конце, используя shellexec.

Диск, который мы используем, медленный, поэтому запись десятков тысяч файлов занимает много времени. Даже при запуске прототипа на другом компьютере с быстрым диском с использованием виртуального диска tmpfs и большим количеством процессоров, я получаю скорость около 100-200 записей в секунду, что кажется медленным — полчаса для 150 000 файлов в структуре каталогов. Как только это будет написано, фактическое преобразование из структуры каталогов собственной ОС в tgz не является проблематичным.

Я надеялся использовать PharData для написания. Однако PharData :: addFromString, похоже, выполняет запись в файл сразу после добавления файла, а не шаблон Open-> Add-> Writeout.

Кто-нибудь может предложить какие-либо стратегии здесь?

В конечном итоге файл tgz должен быть доступен для загрузки, и он не будет часто обновляться. Но поскольку необходимо создать серию этих файлов, необходимость подождать 30-60 и более минут, чтобы упаковать пакет, превращается в блокиратор.

3

Решение

Вы можете напрямую использовать функции php gzopen / gzwrite / gzclose и форматировать собственные заголовки tar, а затем вводить данные. Есть пример на страница документации php gzwrite.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]