0

我有一个很大的 gzip 文件(压缩了 ~15Gb,未压缩 ~88),我需要将内容“分解”成大量文件。例如,如果我阅读以下行:

foo    property.content    "I'm the content of the string."

我需要创建一个名为foo.db并存储在里面的文件:

property.content    "I'm the content of the string."

我已经成功地做到了。但我有表演问题。我想可能是因为文件量很大。(在 60 秒内创建了约 31k 个文件)但我不确定。这就是我在这里的原因。

我的代码正在读取每一块 1048576 字节(带有 的 gz 文件gzread),并对数组中的内容进行排序,以便按文件一次写入所有内容。然后,我做了一个 foreach 循环来读取我的缓存内容,打开特定文件并写入。例如,如果我的缓存看起来像这样:

$cache = array(
    "file_one" => "property.content    \"I'm the content of the string.\"
                   property.foo    \"I'm the content of another string.\"",
    "file_two" => "property.foobar    \"I'm the content of the another string.\"",
    "file_three" => ...
);

循环使这个:

foreach ($cache as $file => $content) {

    $filesrc = $file . ".db";
    $fp = fopen($filesrc,"a");
    fwrite($fp,$content."\n");
    fclose($fp);

}

使用这种方法,我可以在 60 秒内读取 ~65Mb 并写入 ~31k 文件。如果我读取一个文件中的所有内容,我会在 60 秒内写入 ~220Mb。

有什么办法可以提高性能和创建小文件?我正在使用PHP 5.5.1with Apache 2.4.6onWindows并且正在使用CLI这个脚本。

编辑:这是获取每个循环的时间配置文件的日志,读取 131072 字节的数据:http: //pastebin.com/uRPFfywY

4

0 回答 0