2012-08-05 69 views
1

我有以下情况(在Rails 3中):我的表包含每个用户的财务事务(用户可以购买和销售产品)。由于发生了大量此类交易,我在网站上显示与当前用户有关的统计数据,例如,当前余额,总体利润,总共销售/购买的产品数量,平均数等等(每月/每年的基础上也是相同的,而不是整体)。这些信息的一部分会以多种形式/页面显示给用户,以便用户始终可以看到他当前的帐户信息(不同的位统计信息显示在不同的页面上)。计算大量的数据库用户数据统计信息:优化性能

我的问题是:如何优化数据库性能(是否值得)?当然,如果用户只是浏览,那么每次新页面加载时都不需要重新计算所有的值,除非对底层数据库进行了更改。

我的第一个解决方案是将这些统计数据存储在他们自己的表中,并在财务事务添加/编辑后更新它们(在Rails中可能使用:after_update?)。进一步说,例如,如果新交易已经完成,那么我可以修改平均值,而不是重新计算整个事情。

我的第二个想法是使用某种缓存(如果这是可能的?)或将这些值存储在会话对象中。

哪一个是首选/推荐的方式,或者这是浪费时间,因为当前最大数量的金融交易数量在7000-9000之间?

回答

0

您可能想调查汇总表,也称为物化视图。

此链接可能会有所帮助:

http://wiki.postgresql.org/wiki/Materialized_Views

+0

虽然只有9000交易这可能是没有必要的。 – 2012-08-05 07:22:03

+0

谢谢,这正是我一直在寻找的。我试图使用ActiveRecord回调,它也起作用,但随后因为潜在的可伸缩性问题而决定采用它们。在阅读物化视图时,我遇到了一本很棒的读物“企业导轨”一书! – apotry 2012-08-13 12:33:02