首页 > 解决方案 > 递归项状态性能

问题描述

几天来我一直在思考这个问题,我似乎无法弄清楚最佳做法是什么,所以希望你们中的一个人/女孩能够带领我走上正确的道路。

数据

假设为了论证,我们有一个元数据表、一个项目数据表和一个到期日期表。

元是定义项目集合并保存该集合的一般信息的内容,并且在元上设置了某些标准,这些标准在整个项目布局中使用。

项目是元数据的派生,并保存特定于该项目的唯一数据,并且通常需要元信息。(注意:一个项目也可以是其他项目的集合)

到期是不言自明的,是单个项目的到期日期。

当前实施

如果您输入任何给定元的元页面,它将在分页 ajax 调用中加载项目,并且对于每个加载的项目,它将加载一个状态图标。此状态图标在每次显示时都会生成,并且它是递归的(这意味着如果我要在元数据上放置一个状态图标,那么它将加载该元数据的所有项目并检查它的所有到期日期等等。 )

通过扩展实现,它目前对数据库进行了 600 次调用(5.56 秒)(这是一个相当大的负载,但根据数据库布局是必需的。)

我的理论

我认为最终用户只需将状态值与每个元素一起存储在数据库中会显示出更好的结果,但是我不知道这是否是正确的做事方式 - 考虑到我必须递归调整每次频谱中的元素发生变化时都会出现此状态图标(包括设置服务器作业以根据到期日期更新状态)

问题

状态图标的最佳实践是递归的并且有许多因素和关系需要跟踪?

标签: phpmysqldatabaselaravelperformance

解决方案


最佳做法是缓存状态图标并仅从缓存中为最终用户读取它。您所有的负载繁重的东西(递归数据库调用魔术)都将投入工作。最后,您为所有模型创建观察者,这些观察者将排队此作业以更新更改项目的缓存值。

这样,您将分离负载繁重的东西,由服务器端和客户端的工作人员处理,一切都将快速而顺利。处理状态图标更新后,您的最终用户将看到更改。


推荐阅读