2011-02-24 63 views
3

我现在有两个字段何时可以将派生数据存储在数据库中?

user_ID的游戏桌,赢得

赢= 1胜,0损失

假设我想显示的胜率。计数操作相当简单。不过,假设我想在同一页面上显示数千个用户,并且每个用户的胜率都是一样的。我有一些关于这种情况的可扩展性问题。是不是太黑客创建一个单独的缓存表具有以下字段

USER_ID,win_percentage

这将每一个新游戏被张贴的时间更新。现在胜率可以很快确定,而不是使用数千次计数操作。处理这个问题的最好方法是什么?

回答

3

数据仓库的乡亲说,它总是适当导出的数据存储在数据库中。只要它没有更新。

的问题是更新之一。

第一。您的可伸缩性问题并不多。 “假设我想在同一页面上显示成千上万的用户,并且每个用户的获胜百分比”并不重要。这可以非常快速地计算出来。

这将每一个新游戏被张贴的时间更新。

这是与存储导出的数据的问题。更新的成本实际上可能超过计算成本。你不知道没有实际的使用情况统计。

因此。

不要存储派生数据,直到您可以证明(通过实际测量)它存储它的效率更高。

2

当得出的数据是计算昂贵的并且是相对静态的它不会变动非常频繁或根本),你应该考虑在不同的数据库仓储它(不必是相同类型的数据库或数据库,它可能类似memcached)在不同的机器上,这样它就不会影响事务数据库的性能。

如果它不是一个性能问题(如计算不贵),则不要使用增加的复杂麻烦,缓存是很难得到正确的。

你已经测量并确定它是一个问题,不只是认为它可能是一个问题吧?

记住我套用:

过早的优化,而不分析是一切罪恶的根源!

数据结构的变化可能是更好的解决方案。

user_id, wins, loses, percentage 

更新每个玩家一个记录不会花费更多,也可能更少些取决于数据库比一排每场比赛的结果,所得的计算。

相关问题