我已经思考这个问题好几天了,我似乎不知道最好的做法是什么,所以希望你们中的一个能够引导我走上正确的道路。
数据
假设我们有一个元数据表,一个项目数据表和一个过期日期表。
元
项目
过期
meta定义了一个项目集合并保存了该集合的一般信息,并且在meta上设置了一个特定的标准,这些标准在整个项目布局中使用。
一个项是一个元的派生项,它包含特定于该项的唯一数据,通常需要元信息(注意:一个项目也可以是其他项目的集合)
过期是不言而喻的,是单个项目的过期日期。
当前实施情况
如果您为任何给定的meta输入meta页面,它将加载分页ajax调用中的项目,并为每个加载的项目加载一个状态图标。这个状态图标在每次显示时都会生成,并且是递归的(这意味着如果我在meta上放置一个状态图标,那么它将加载该meta的所有项,并检查它的所有过期日期等等)
在扩展实现中,它当前对数据库进行600次调用(5.56秒)(这是一个相当大的负载,但根据数据库布局是必需的)
我的理论
我认为最终用户只需将状态值与每个元素一起存储在数据库中,就会得到更好的结果,但是,我不知道这样做是否正确——考虑到每次频谱中的元素发生变化时,我都必须递归地调整此状态图标(包括设置服务器作业,并根据过期日期更新状态)
问题
状态图标的最佳实践是递归的,并且有许多因素和关系需要跟踪?
1条答案
按热度按时间gt0wga4j1#
最佳实践是缓存一个状态图标,并仅从缓存中为最终用户读取它。你所有的负载沉重的东西(递归数据库调用魔术)将进入一个工作。最后,为所有模型创建观察者,这些模型将对此作业进行排队,以更新已更改项的缓存值。
这样,您将分离负载繁重的东西来处理的工人在您的服务器端和客户端的一切都将是快速和顺利的。一旦状态图标更新将被处理,您的最终用户将看到一个变化。