1

我想知道在存储计数/总和等方面的最佳做法是什么?在每个页面加载时动态计算是否很大?

我有一个 Rails 应用程序,其中包含来自多个来源的产品和销售报告。其中一些销售报告可以延伸到每天 100k+ 行。目前,我们正在为每个页面加载动态计算。这显然非常缓慢。

由于几乎可以肯定销售报告只写一次但读了很多次,所以在我的产品表中添加一个总和列并在每次写入新销售时增加它会更好吗?我可以看到这显然会快得多,但它确实严重限制了我提供日期过滤的能力;“过去 7 天前 10 名”等。

启用过滤的另一种解决方案是创建第三张表,其中包含每种产品的每日总和吗?主销售表每天可以为每个产品包含多行,有时甚至数千行,所以我可以再次看到主销售表的精简版本也可以加快速度。

我应该在导入期间使用 before/after_save 回调/进行这些计算,还是应该查看在后台运行的计划任务?

谁能提供一些建议或推荐阅读以帮助我走上正确的道路并帮助我改善令人尴尬的缓慢页面加载时间?

提前致谢!

4

1 回答 1

1

好问题。

一般来说,我认为最好从动态生成计数和总和开始。这遵循 Codd 的规则等。问题是随着时间的推移这可能会变慢。你如何处理它取决于很多事情。我将为您提供处理销售数据的解决方案以及为什么我认为这是理想的。

销售数据很重要,因为虽然它有时可以在一段时间后短暂调整,但在没有犯规的情况下永远不会再调整(这是在关闭书籍之后)。销售书籍通常每月或每年关闭。

您可以做的是将聚合与日期或最大 ID 等放在关闭条目中,并放入触发器,以便您可以确保没有条目被添加到关闭期间。这允许您从已知的良好值前滚聚合。在这种情况下,您可能只在收盘期间或开盘期间汇总。

于 2013-04-26T14:42:44.560 回答