为报告处理大量COUNT个查询

时间:2011-06-14 18:55:20

标签: ruby-on-rails ruby-on-rails-3 activerecord

我正在整理一份报告,显示拥有这些产品的公司的产品统计信息。这份报告以我需要的形式包含多达150个“计数”,因为我们在12个产品类型的数量与15种不同的统计类别中填充表格。

这是模型的设置。我担心这有点复杂!

Company is the entity accessing the report.

Company has many Products through Matchings; and  
Product has many Companies through Matchings.

Matching belongs_to Order.

Example report:
___________|_Available/Active/Light   Available/Active/Heavy   (+12 columns)__
Perishable |
Intangible |
(+10 rows) |

产品类型位于“产品”表中(它们位于报告的左侧)。 报告顶部的类别是三个标准的组合:两个来自Product,一个来自Order。

示例 - 对于Perishable行中的一个单元格,显示订单类型为“有效”的产品匹配数量,产品重量为“浅”且产品状态为“可用” ”。

就其本身而言,上述查询并不算太糟糕,但如果我继续这样做,我将会对这份报告提出约170个查询 - 这两个问题都是一个不优雅且非常不切实际的解决方案。是否有一种神奇的ActiveRecord方式来处理这种情况?

2 个答案:

答案 0 :(得分:1)

您始终可以创建后台作业以定期运行并预先缓存结果,或者预生成整个报告。这将使您的用户不必坐下等待170个查询运行,我认为可以接受稍微陈旧的结果。

至于它的优雅和实用性,你可以使用的唯一魔法就是SQL。您的对象模型不是为报告而构建的,使用的工具也不会感觉不好。

答案 1 :(得分:1)

有一个statistics宝石可以做这种事情。它允许您缓存统计信息。

我已将它用于轻量级统计数据,例如计数和平均值,但从未采用基准测试,如果性能受到关注,这绝对是something you'll want to do