php – 与laravel的普通查询构建器相比,Laravel Eloquents与使用块相比在使用数百万条记录时是否更慢?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 与laravel的普通查询构建器相比,Laravel Eloquents与使用块相比在使用数百万条记录时是否更慢?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2953字,纯文字阅读大概需要5分钟。
内容图文
我是开发Web应用程序的新手,所以我很乐意使用laravel并学习它们,所以我原谅我的非常简单的问题……但是如果有人回答我并帮助我了解这些内容,那将会非常有帮助…
首先让我先描述一下我的表结构:
我正在使用,MySql的InnoDB ……这个表目前存储大约13k的记录,并且将来用于存储数百万甚至数十亿的记录……
现在描述我的问题如下:
当我从这个表中获取所有记录,即13k记录时,laravel的普通查询构建器使用chunk(下面的代码描述了我获取记录的方式),我得到的结果在1.39秒内,这很好,但实际上它应该更有效(这些结果可能是因为我的系统内存有限,我还没有测试过高端系统),但是,如果我在这里也犯了错误,请告诉我.
DB::table($tableName->dataTableName)->orderBy('id')->chunk(100, function($data) {
foreach ($data as $record) {
echo "DateTime: " .$record->DateTime. " id: ".$record->meter_id;
}
})
当我用雄辩使用块来做同样的事情时(下面的代码描述,我用eloquent获取记录的方式),即使在60秒后我也没有得到完整的结果,这是完全不可接受的……
Data::orderBy('id')->chunk(100, function($data) {
foreach ($data as $record) {
echo "DateTime: " .$record->DateTime. " id: ".$record->meter_id
}
})
我在数据模型中使用其他模型来获取表名…以下是数据模型的内容……
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
use App\dataTableMaster as DataTableMaster;
use App\Company;
class Data extends Model {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'data';
//========This following constructor assigns table name depending upon client which has logged in... ===============
public function __construct(){
$user = \Auth::user();
$associatedIdOfUser = $user->asso_id;
$associatedCompanyObjectOfUser = Company::where('id',$associatedIdOfUser)->first();
$companyRoot = $associatedCompanyObjectOfUser->getRoot();
$tableObject = DataTableMaster::where('company_id',$companyRoot->id)->orderBy('created_at','desc')->first();
$this->table = $tableObject->dataTableName;
}
}
现在,我的问题是:
>真正的雄辩是否比普通的查询构建器慢,因为,雄辩创建了结果的对象,后来却没有这样做.
>如果与查询构建器相比,口号不会慢得多,那么口才也很有效,可以获取数千或数百万条记录,例如查询构建器THAN
>我在这里犯了什么错误,因此,我遇到了问题?它是在表结构或方式,我提取记录或它是什么?请解释一下.
>建议使用雄辩的大型桌子吗?
>如果雄辩真的比较慢并且不建议在使用数百万条记录时使用,而不是以什么方式使用,我们可以使用数百万个表,只能通过查询构建器与它们一起工作吗?而且,为什么它们变慢,是因为它创造物体或理由是别的?
解决方法:
使用Eloquent比直接使用查询生成器(benchmarks)慢大约3倍.OMM必须将数据映射到对象,因此它总是较慢,没有办法解决.
如果您计划处理数百万条记录,请忘记ORM.它不再存在了.你必须做自定义查询.
仅仅按100分钟是不够的.我发现可以安全地达到5000.你可以通过监控内存使用量来增加或减少这个数字.
请记住,sql比php快,所以尽可能多地在sql中执行.并且记住只选择你需要的字段 – 它会降低内存使用率.
大型数据集的排序速度很慢,因为它可能在文件系统而不是内存中进行排序.
DB::table('data')->select('DateTime', 'meter_id')->chunk(5000, function($data) {
foreach ($data as $record) {
echo "DateTime: " .$record->DateTime. " id: ".$record->meter_id;
}
});
根据您的设置,回声可以减慢很多事情.
内容总结
以上是互联网集市为您收集整理的php – 与laravel的普通查询构建器相比,Laravel Eloquents与使用块相比在使用数百万条记录时是否更慢?全部内容,希望文章能够帮你解决php – 与laravel的普通查询构建器相比,Laravel Eloquents与使用块相比在使用数百万条记录时是否更慢?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。