我在Laravel查询生成器和雄辩者之间进行了一些性能测试。使用各种sql语句(select-update-delete-insert),查询生成器要快得多。
所以我的问题是:为什么有人对普通查询生成器使用Laravel Eloquent?
我在Laravel查询生成器和雄辩者之间进行了一些性能测试。使用各种sql语句(select-update-delete-insert),查询生成器要快得多。
所以我的问题是:为什么有人对普通查询生成器使用Laravel Eloquent?
Eloquent
,并Query Builder
都产生了同样的事情,data
从database
。也许这就是他比较这两个原因的原因。
$object->filter($something_we_just_calculated)
工作将在决策树中进行读取。您可以想到像JQuery这样的Eloquent
Answers:
雄辩的是Laravel的Active Record模式的实现,它具有所有优点和缺点。
Active Record是一种以CRUD方式处理单个实体的好方法-即创建具有填充属性的新实体,然后将其保存到数据库,从数据库加载记录或删除。
您将从Eloquent的功能中受益匪浅,例如脏检查(仅针对已更改的字段发送SQL UPDATE),模型事件(例如,在有人创建新帐户时发送管理警报或更新统计信息计数器),特征(时间戳,软删除,自定义特征)急切/延迟加载等。您还可以应用域驱动的模式并在Active Record实体中实现一些业务逻辑,例如验证,管理关系,计算等。
但是,正如您已经知道的那样,Active Record附带了一些性能价格。
当您处理一条记录或几条记录时,无需担心。但是对于读取大量记录的情况(例如,用于数据网格,用于报告,用于批处理等),普通的LaravelDB
方法是更好的方法。
对于我们基于Laravel的应用程序,我们认为适当地使用了两种方法。我们使用Laravel的Eloquent for UI表单处理一条记录,并使用DB
方法(由SQL视图支持,并进行了其他数据库引擎特定的性能调整)来检索UI表,导出任务等的数据。它也与RESTful API配合使用-Eloquent for GET ,PUT,POST,DELETE(带键),DB
而GET(不带键)但具有过滤器,排序和分页。
new User()
对返回的每个用户行进行操作。这可能只需要1毫秒,但是如果oyu有10,000条记录?通常甚至没有必要,因为有时您只想返回用户名。在那种情况下DB::select
会更快。还要注意:雄辩并不是实现实现的标准。laravel改编了Symphony的实现,或者如果我没记错的话,在某个时候已经实现了。
是的,在某些情况下您是对的。当我们拥有更多数据并且几乎在每个站点中时,数据确实不小。然后,最好使用DB Query而不是Eloquent Query。
在雄辩的VS DB的性能问题中,我听说过,
要为一个简单的表插入1000行,Eloquent花费了1.2秒,在这种情况下,DB Facade仅花费了800毫秒(ms)。
那么,为什么那么雄辩呢?那没有必要吗?
答案是-雄辩也是必要的。原因-
当需要连接时,要创建更好的关系并使用非常简单的语法查看结果。
口才也是那些对SQL查询知识不多的人。
MVC框架遵循代码可读性,代码可维护性的规则,您知道这是Eloquent。下面的代码比较。显然,口才更好。
// In Eloquent
$student = App\Student::find($id);
// In DB facade
$student = DB::table('student')->where('id', $id)->first();
最重要的部分是如果我们要更改其他数据库,那么原始查询将使我们非常头疼,在这种情况下,Laravel Eloquent会用一只手解决所有问题。它可以处理不同类型的数据库。
因此,当我们使用Eloquent和When DB门面时:
因此,最后明确了-什么时候使用数据库查询,什么时候使用口才查询。
编辑-现实生活中的例子
5,000 teachers and 10,000 students and some notices and files
。然后最好使用非常标准且易读的简单Laravel Eloquent做到这一点。1,000,0000 (1 crore) posts and many more things
。我将必须在那里选择常规的DB外墙。从如此多的记录中搜索帖子的速度更快。您可以使用Laravel Debugbar检查查询性能(一个流行的软件包,用于检查口才/数据库查询性能/执行时间)
现在由您选择。你想做什么...
您可以在此处通过代码比较来查看完整的代码,并比较它们的性能,内存消耗和代码质量-https: //devsenv.com/tutorials/laravel-eloquent-vs-db-query-builder-performance-and-other-statistics
在性能和应用程序增长方面,为了进行比较,请在下表中进行掠夺:
口才ORM和原始SQL之间的选择操作平均响应时间的比较
Joins | Average (ms)
------+-------------
1 | 162,2
3 | 1002,7
4 | 1540,0
Result of select operation average response time for Eloquent ORM
Joins | Average (ms)
------+-------------
1 | 116,4
3 | 130,6
4 | 155,2
Result of select operation average response time for Raw SQL
这只是我的意见,而不是全面的答案。在给定情况下,我会使用更方便的方式。
如果遇到用雄辩或查询生成器编写的程序包或代码,我将使用所使用的任何东西。
如果我从头开始创建某些内容,我发现查询生成器会更直观,因此我会更频繁地使用它。
对于Laravel而言,开发应用程序的简便性和速度似乎比性能更重要。我真的很喜欢它们,即使对于不了解php / mysql的人来说,它们也使一切变得非常容易。在某些情况下,口才比查询生成器容易。反之亦然。我认为有很多方法可以使Laravel变得如此简单和新手友好。
他们之间有很多不同