PHP yield大文件读取 与 数据库大数据量读取

PHP yield大文件读取 与 数据库大数据量读取

yield php5.6版本才有的函数,作用是 实现 生成器,作用的在读取文件的时候,可以一行一行的读取
简单的说可以理解为 php版本的非缓冲查询,意思即是 把数据一行行 读取到php运行内存,并非一次性读取到php运行内存,众所周知,php有很多内置函数,可以帮助我们对数据进行加工操作,因为数据都在内存里面,所以能操作,但是php的运行内存是有极限,默认128M。这里不描述 对文件的读取。

数据库结构:
PHP yield大文件读取 与 数据库大数据量读取_第1张图片

php链接mysql版本的 yield 实现方式--------非缓冲查询,如图:

注意:因为非缓冲查询是 会长时间连接数据库的,有可能会造成慢查询、锁表之类的情况,比较耗mysql资源

相对非缓冲查询就是 缓冲查询:
如果用缓存查询,php内存就会直接爆了,出现内存不足的情况

以下附上php 实现 yield 链接 mysql 几种方法:
1)


setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$res = $pdo->query("SELECT * FROM `test`");
//unset($pdo);
$i = 0;
if ($res) {
    while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
        echo $row['a'] . PHP_EOL;
        $i++;
        if( $i ==1000  ){
            exit;
        }
    }
}
?>
query("SELECT * FROM `test`", MYSQLI_USE_RESULT);
//$uresult->close();
if ($uresult) {
    while ($row = $uresult->fetch()) {
        echo $row['a'] . PHP_EOL;
        $i++;
        if( $i ==1000  ){
            exit;
        }
    }
}

你可能感兴趣的:(mysql,php)