我现在有两个字段何时可以将派生数据存储在数据库中?
user_ID的游戏桌,赢得
赢= 1胜,0损失
假设我想显示的胜率。计数操作相当简单。不过,假设我想在同一页面上显示数千个用户,并且每个用户的胜率都是一样的。我有一些关于这种情况的可扩展性问题。是不是太黑客创建一个单独的缓存表具有以下字段
USER_ID,win_percentage
这将每一个新游戏被张贴的时间更新。现在胜率可以很快确定,而不是使用数千次计数操作。处理这个问题的最好方法是什么?
我现在有两个字段何时可以将派生数据存储在数据库中?
user_ID的游戏桌,赢得
赢= 1胜,0损失
假设我想显示的胜率。计数操作相当简单。不过,假设我想在同一页面上显示数千个用户,并且每个用户的胜率都是一样的。我有一些关于这种情况的可扩展性问题。是不是太黑客创建一个单独的缓存表具有以下字段
USER_ID,win_percentage
这将每一个新游戏被张贴的时间更新。现在胜率可以很快确定,而不是使用数千次计数操作。处理这个问题的最好方法是什么?
数据仓库的乡亲说,它总是适当导出的数据存储在数据库中。只要它没有更新。
的问题是更新之一。
第一。您的可伸缩性问题并不多。 “假设我想在同一页面上显示成千上万的用户,并且每个用户的获胜百分比”并不重要。这可以非常快速地计算出来。
这将每一个新游戏被张贴的时间更新。
这是与存储导出的数据的问题。更新的成本实际上可能超过计算成本。你不知道没有实际的使用情况统计。
因此。
不要存储派生数据,直到您可以证明(通过实际测量)它存储它的效率更高。
当得出的数据是计算昂贵的并且是相对静态的(它不会变动非常频繁或根本),你应该考虑在不同的数据库仓储它(不必是相同类型的数据库或数据库,它可能类似memcached)在不同的机器上,这样它就不会影响事务数据库的性能。
如果它不是一个性能问题(如计算不贵),则不要使用增加的复杂麻烦,缓存是很难得到正确的。
你已经测量并确定它是一个问题,不只是认为它可能是一个问题吧?
记住我套用:
过早的优化,而不分析是一切罪恶的根源!
数据结构的变化可能是更好的解决方案。
user_id, wins, loses, percentage
更新每个玩家一个记录不会花费更多,也可能更少些取决于数据库比一排每场比赛的结果,所得的计算。