2009-10-07 24 views
0

我有一个应用程序可以分析来自我们的核心系统生成的输入文件的数据。根据客户端的不同,该文件的大小可能会有所不同(文件包含在线营销指标,如点击次数,展示次数等)。我们的一个客户拥有一个网站,可以获得相当大的流量,生成的度量文件大小约为3-4兆字节。此应用程序目前一次分析三个文件,每个文件是不同的时间聚合。小型服务器上的大内存使用情况(优化问题)

我正在使用CSV迭代器读取文件,并将整个文件的内容存储到多维数组中。其中一个特定文件的数组大约为16000个元素,每个子数组为31个元素。处理加载此数据的数据处理器对象使用大约50MB的内存。目前PHP内存限制设置为100MB。不幸的是,这个应用程序所在的服务器是旧的,无法处理大量的内存增加。

所以这给我带来了一个问题:我怎样才能优化处理这个大小的文件?

可能的优化是读取部分文件,计算,存储,重复?

回答

0

你在正确的轨道上。如果可能的话,阅读一条线,做任何你需要做的事情(计算你正在计数的东西等等),然后放弃这条线。

fgets()

0

的例子,为什么不能简单地逐行读取... 文件中的行 - >读线 - >商店,你需要什么,更新统计 - >读下一行,等等。

1

您可以修改CSVIterator并一次读取一次或一行文件的部分内容。

$handle = fopen("/tmp/inputfile.txt", "r"); 
if ($handle) { 
    while(!feof($handle)){ 
    $buffer = fread($handle, 4096); 
    echo $buffer; 
    } 
} 

$handle = fopen("/tmp/inputfile.txt", "r"); 
if ($handle) { 
    while (!feof($handle)) { 
    $buffer = fgets($handle, 4096); 
    echo $buffer; 
    } 
    fclose($handle); 
} 
相关问题