递归项目状态效果

时间:2018-08-27 07:18:43

标签: php mysql database laravel performance

几天来我一直在思考这个问题,而且我似乎还无法弄清楚最佳实践是什么,因此希望你们中的一个能够带领我走上正确的道路

数据

为了便于讨论,我们有一个元数据表,一个项目数据表和一个到期日期表。

  • 物品
  • 到期

元是定义项目集合并保存该集合的一般信息的要素,并且在元上设置了某些条件,这些条件在整个项目布局中都会使用。

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

有效期是不言自明的,是单个项目的有效期。

当前实施

如果您为任何给定的meta进入meta页面,它将在分页的ajax调用中加载项目,对于每个加载的项目,它将加载状态图标。状态图标是在每次显示时生成的,并且是递归的(这意味着如果我将状态图标放在元数据上,则它将加载该元数据的所有项目并检查其所有到期日期,第四。)

通过扩展的实现,它目前对数据库执行600次(5.56秒)(这是相当大的负担,但是根据数据库布局是必需的。)

我的理论

我认为对于最终用户而言,将状态值仅与每个元素一起存储在数据库中会显示出更好的结果,但是我不知道这是否是正确的处理方式-考虑到我会每次光谱中的元素发生变化时都会递归地调整此状态图标((包括进行服务器作业设置,并根据到期日期更新状态)

问题

状态图标的最佳做法是递归并具有许多要跟踪的因素和关系?

1 个答案:

答案 0 :(得分:0)

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

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