Я пытаюсь написать файл .tgz, содержащий десятки, если не сотни тысяч файловых записей, содержимое каждой из которых получено из строки в базе данных. Каждая запись файла составляет около 2-5 КБ данных.
Я хочу избежать этого без предварительной записи файлов. В настоящее время у меня есть PHP, создающий традиционную структуру каталогов, записывающий файлы, а затем в самом конце создающий tgz с помощью shellexec.
Диск, который мы используем, медленный, поэтому запись десятков тысяч файлов занимает целую вечность. Даже запуская прототип на другой машине с быстрым диском, используя RAM-диск tmpfs и много процессора, я получаю скорость около 100-200 файловых записей в секунду, что кажется медленным — полчаса для 150 000 файлов в структуре каталогов. Как только это будет написано, фактическое преобразование из родной структуры каталогов ОС в tgz не будет проблемой.
Я надеялся использовать PharData для написания. Однако PharData::addFromString, по-видимому, выполняет запись в файл, как только файл добавляется, а не шаблон Open->Add->Writeout.
Может ли кто-нибудь предложить какие-либо стратегии здесь?
После этого конечный файл tgz будет доступен для скачивания и не будет часто обновляться. Но из-за того, что нужно создать ряд этих файлов, приходится ждать 30-60+ минут только для того, чтобы упаковать, и это становится серьезным препятствием.
gzip
действительно есть опция--fast
, попробуйте? - person halfer   schedule 30.03.2015