PHP的速度/内存问题

时间:2011-11-20 12:45:55

标签: php arrays

  

可能重复:
  Least memory intensive way to read a file in PHP

我的速度与内存使用有问题。

我有一个需要能够快速运行的脚本。它只是从1-100MB加载多个文件,由一系列值组成,并检查其中有多少文件存在于另一个列表中。

我这样做的首选方法是将文件中的值加载到数组(explode)中,然后遍历此数组并使用isset检查值是否存在。< / p>

我遇到的问题是有太多的值,它耗尽了大约10GB的内存(我不知道为什么会这么用)。所以我一直在将文件中的值加载到内存中,而不是仅仅爆炸整个文件。这会减少内存使用量,但速度非常慢。

有更好的方法吗?

代码示例:

$check=array('lots','of','values','here');
$check=array_flip($check);
$values=explode('|',file_get_contents('bigfile.txt'));

$matches=0;
foreach($values as $key)
if (isset($check[$key])) $matches++;

4 个答案:

答案 0 :(得分:2)

也许您可以编写自己的PHP C扩展(请参阅例如this question),或者在C中编写一个小实用程序并让PHP运行它(可能使用popen)?

答案 1 :(得分:1)

这些似乎是某种形式的面向键/值的NoSQL数据存储(mongodb,couchdb,Riak)的经典解决方案(或者甚至可能只是一个大型的memcache实例)。

假设您可以在需要进行搜索之前将大数据文件加载到数据存储区中,并且您将多次使用加载文件中的数据,您应该会看到一些令人印象深刻的收益(只要您的查询,mapreduce等并不可怕),根据您的数据大小判断,您可能希望查看数据存储,而不需要将内存中的所有内容保存为快速。

上面提到的每个数据存储都有很多PHP驱动程序(和教程)。

答案 2 :(得分:-1)

打开文件并按行阅读。也许使用MySQL,导入(LOAD DATA INFILE),得到数据或两者兼而有之。

答案 3 :(得分:-1)

看来你需要一些改进的搜索引擎。

Sphinx搜索服务器可用于快速搜索您的值。