Eloquent 性能优化
Eloquent Performance Patterns
了解如何通过将更多工作推送到数据库来大幅提高 Laravel 应用程序的性能,同时仍然使用 Eloquent ORM。
性能问题很糟糕。客户很沮丧。您的服务器过载。管理层正在你的脖子上呼吸。
您已经解决了所有 N+1 问题,添加了必要的索引,甚至还为最昂贵的数据库服务器付费。但尽管如此,有些东西还是感觉无法以高性能的方式构建。
-
我们无法对数据库中的结果进行分页,因为它们依赖于 Laravel 中发生的授权检查。
-
我们必须对大型数据集进行一些非常复杂的计算,如果没有像PHP这样的真正编程语言,这似乎是不可能的。
-
我们无法对数据库中的结果进行排序,因为我们必须按应用程序中计算的值进行排序。
因此,您花费数月时间研究不同的缓存策略以尝试加快速度,但缓存很难。每当您认为已经解决了性能问题时,您就会遇到一个新的缓存问题。
我去过那里,这很糟糕。所以有一天我决定“就是这样,我要弄清楚如何将所有这些工作推送到数据库中,如果它杀死了我。结果让我大吃一惊。
通过利用先进的数据库技术,如子查询、条件聚合和积极使用作用域,需要 30+ 秒才能加载的页面现在可以在 500 毫秒内加载!
从那以后,我在 Laracon Online 和 Laracon US 上都谈到了 Eloquent 和数据库性能,并就该主题撰写了深入的文章。
学习👇内容
-
提高数据库性能的三个关键指标
-
子查询的不可思议的强大功能
-
何时使用联接查询与子查询
-
使用子查询选择相关数据
-
使用子查询构建动态关系
-
使用子查询按相关数据排序
-
使用条件聚合计算总计
-
在数据库中运行授权策略
-
构建复杂的搜索过滤器
-
使用宏扩展查询生成器
-
揭开数据库索引的神秘面纱
-
在不牺牲 Eloquent API 的情况下引入复杂的查询
-
利用特定于供应商(MySQL、Postgres 等)的功能
-
缓存和数据库非规范化
-
如何安全地编写原始数据库查询
-
配置 Laravel 以使 N+1 问题变得不可能
-
扩展 Eloquent 以支持使用
NULLS LAST
和NULLS FIRST
排序 -
获取两个地理点之间的距离
-
按地理距离筛选
-
按地理距离排序
-
使用地理空间形状查询物理区域内的记录
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)