[英]how to fetch and load large amount of data into jquery datable using php
[英]Fetch large amount of data in laravel 4.2
我已经开发了批量短信发送软件。 该软件每天发送数百万条短信。 现在,我要报告一些包含数百万数据的数据。 但是它无法获取所有数据。 它获取27000
行或更少。 我仅使用2个字段ID和手机号码应用查询。
当我在其他应用程序中尝试使用原始php代码时,它工作正常,但laravel无法获取所有数据。 它显示内存大小耗尽错误。
在我的php.ini
内存限制为128M
现在,我想知道在laravel中获取数百万数据的最佳方法是什么。 还是应该实施任何其他技术。
您可以使用块方法。
User::chunk(200, function($users)
{
foreach ($users as $user)
{
//
}
});
如果您需要处理大量(数千个)口才记录,那么使用chunk命令可以使您无需使用所有RAM。
要么
您可以在没有内存限制的情况下运行作曲家更新,并且可以通过以下方式进行
php -d memory_limit=-1 composer update
我从这个 github威胁的@sblawrie答案中获得了解决方案。
$query = DB::table('users')->where('name', 'John'); //Pretend this is a huge data set
$statement = $query->getConnection()->getPdo()->prepare($query->toSql());
$statement->execute($query->getBindings());
while ($record = $statement->fetch(PDO::FETCH_ASSOC)) {
//Do whatever you want, one row at a time
}
首先,您可以尝试使用ini_set()
增加内存限制:
ini_set('memory_limit','128M');
不断增加它,直到获得所需的记录。
但是,重要的是要牢记如果定期执行此操作可能会影响服务器性能。 请参考此 stackoverflow答案,以获取有关确定对您的用例而言安全的更多信息。
如果您的服务器没有足够的内存来一次检索所有想要的记录,则必须分批处理这些记录。 可以使用雄辩的take()
和offset()
方法来实现。
使用take
和offset
方法:
Model::take(1000)->offset(1001)->get();
这将从第1001个查询结果开始检索1000条记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.