PHP程序如何解决大量数据循环时的内存不足问题
在做PHP的开发的情况,下有些越大的数组做循环法完会隔三差五报一个内存条存在困难的困难,列举那么的此条:
PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted
失败资料展现不得的极限电脑手机硬盘空间已用尽。会遇到这样的话的失败刚刚开始使我很愕然,写PHP程序流程流程这些二十多年,核心一直沒有为何综合考虑过电脑手机硬盘空间不充足的难题,但转眼之间一想,马上接处的大部分是数剧量会比较小,我呢?无法开放的你这个程序流程流程是得用另一名foreach循环系统语句在另一名有二20万多个记下的表层全表快速搜索更具独特功能的数剧,也正是说,一场要把二20万多个数剧取掉,进而逐一捡查定期数剧。不言自明,二20万多个数剧全不读取到电脑手机硬盘空间中,电脑手机硬盘空间不爆才怪。
总归编程学习怎么几年,我隐隐一定要PHP里出具有非一个任何弹出的数据报告的API,是像合理的处理流电视媒体因为那样,随用随取随丢、的数据报告并不易积少成多在电脑内存的查询个人具体方法。通过简略的检索,其实在官网qq公司网站上找见的合理的的用发。
这些疑问在PHP的官网官方上叫缓存咨询和非缓存咨询(Buffered and Unbuffered queries)。PHP的咨询缺省机制是缓存机制。也还是说,咨询的数据导致会一起都去除到运行运存里供PHP源程序代码代码治理 。那么给了PHP源程序代码代码30%的用途,例如说,来计算行数,将结构体指针指着某类行等。更比较重要的是源程序代码代码可不可以对的数据集不停参与分批咨询和滤水等的操作。但类似这些缓存咨询机制的疵点还是耗电量运行运存,也还是用面积换快速。
相对来说的,还1种PHP查寻方法毫无疑问非降低查寻,统计sql资料服务保障的器会这条这条的载入统计资料,而是不次其他载入,那样的的动态统计数据报告都是PHP执行程序需求较少的内存空间,但却加强了统计sql资料服务保障的器的气压,而是统计sql资料会一种处理PHP来取统计资料,一种到统计资料其他取完。
很显然,缓冲查询模式适用于小数据量查询,而非缓冲查询适应于大数据量查询。
对PHP的缓冲区器的模式手机搜索亲们都知晓,接下介绍的好例子是是怎样下达非缓冲区器手机搜索API。
非缓冲查询方法一:mysqli
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);
if ($uresult) {
while ($row = $uresult->fetch_assoc()) {
echo $row['Name'] . PHP_EOL;
}
}
$uresult->close();
?>
非缓冲查询方法二:pdo_mysql
<?php
$pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$uresult = $pdo->query("SELECT Name FROM City");
if ($uresult) {
while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
echo $row['Name'] . PHP_EOL;
}
}
?>
非缓冲查询方法三:mysql
<?php
$conn = mysql_connect("localhost", "my_user", "my_pass");
$db = mysql_select_db("world");
$uresult = mysql_unbuffered_query("SELECT Name FROM City");
if ($uresult) {
while ($row = mysql_fetch_assoc($uresult)) {
echo $row['Name'] . PHP_EOL;
}
}
?>
- 下一条: 身为PHP程序员一定要知道的8个库
- 下那条: 推荐一个PHP数组去除重复元素更快的方法