在我们的应用程序中,人们有 1 个或多个项目。这些项目有开始日期和结束日期。人们的可用天数有限。
现在我们有一个页面,每周显示给定人员的可用性。目前显示 18 周。
我们目前计算给定一周的可用时间的方式是这样的:
def days_available(query_date=Date.today)
days_engaged = projects.current.where("start_date < ? AND finish_date > ?", query_date, query_date).sum(:days_on_project)
available = days_total - hours_engaged
end
这意味着要显示上面描述的页面,应用程序将向数据库触发 18(!) 个查询。我们的页面列出了表格中多人的可用性。对于这些页面,查询量很快变得惊人。
它也很慢。
我们如何以更高效的方式处理可用性检索?