建议使用php数组?

时间:2011-10-03 09:26:42

标签: php arrays performance

假设我在表中有100k记录,从表中获取记录后我将其推送到具有一些计算的数组,然后将它们发送到服务器进行进一步处理。

我用(1k)记录测试了场景,它运行得很好,但是担心是否存在性能问题,因为在每2分钟后执行计算和从db获取记录的页面运行。

我的问题是我可以使用数组超过2百万条记录吗?

3 个答案:

答案 0 :(得分:6)

数据可容纳多少数据没有内存,限制是服务器内存/ PHP内存限制。

为什么要将100k记录推入数组?你知道数据库有这样的排序和限制!

答案 1 :(得分:2)

  

假设我在表中有100k记录,从表中获取记录后我将其推送到带有一些过滤器的数组。

过滤器?你不能只编写一个实现这些过滤器的查询吗?数据库(取决于供应商)不仅仅是一个数据存储,它可以进行计算,大部分时间它比将数据传输到PHP并在那里进行计算要快得多。如果你有一个数据库,比如PostgreSQL,你可以用plpgsql做你想做的所有事情。

答案 2 :(得分:2)

  

我的问题是我可以使用数组超过2百万条记录吗?

是的,可以,2百万个数组条目不是PHP中数组的限制。数组限制取决于PHP可用的内存。

ini_set('memory_limit', '320M');
$moreThan2Million = 2000001;
$array = range(0, $moreThan2Million);
echo count($array); #$moreThan2Million

您写道:

  

该页面已安排并在2分钟后运行,因此我担心性能问题。

  

但我需要获取所有,而不是100,然后将它们发送到服务器进行进一步处理。

阵列操作的性能取决于处理能力。使用足够快的计算机,您不应该遇到任何问题。但是,请记住,PHP是一种解释型语言,因此比编译的二进制文件慢得多。

如果您需要每2分钟运行一次相同的脚本,但脚本的运行时间大于两分钟,则可以在多台计算机上分发脚本执行,因此一个进程不会占用另一台进程的CPU和内存资源。可以在另外一个盒子上运行另一个进程。

修改

  

答案很好,但如果服务器处理器和RAM没有问题,你可以写下你的考虑因素,说明脚本需要多长时间才能完成。

这取决于阵列的大小,每个条目所需的处理量(相对于阵列的总体大小)以及处理器功率和RAM的数量。所有这些都没有说明你的问题,所以我可以具体地说,我会认为这是未指明的。您需要自行测试并为您的应用构建指标by profiling it

  

我有10GB内存和超过8个Squad处理器。

例如,您可以对1,10,100,1000,10000,100000和100万个条目执行粗略度量,以查看您的(未指定的)脚本在该计算机上的缩放程度。

  

我将此数组发送到另一页进行进一步处理。

度量标准以及您在计算机之间发送的数据量以及可用于通过线路进行进程间通信的带宽量。