关于计算平均分数的数据库设计

时间:2014-02-27 16:39:55

标签: mysql database

我有一个看起来像这样的数据库: enter image description here

这是一个旨在跟踪游戏中玩家的数据库。在游戏中,玩家每个事件都有一个分数。每个玩家每个活动可以有多个分数。您可以将事件视为一天。

我想跟踪他们的胜利,失败和技巧。技能被定义为当天所有比赛的AVERAGE得分以及与所有球员的平均值的差异。 IE,玩家平均得分为305,但所有玩家的平均值为300,所以他的技能为+5。此外,所有玩家的平均值应仅加权一次,因此玩过100场比赛的玩家与玩1的玩家的平均加权不会更多。

我的问题是,实现这一目标的最佳方法是什么?游戏的结果一次添加一个,我正在使用触发器更新赢/输。我不确定是否尝试使用DBMS完成我的平均技能计算是明智的,因为在每个插入之间它必须再次计算所有内容。我的程序每秒执行大约1-2个插入。

从这个数据库中检索速度非常重要,所以我宁愿让插入速度慢于每次检索时都要计算这些信息,如果它在那个方法中变慢的话。

1 个答案:

答案 0 :(得分:0)

我处理这个问题的方法是在中间。我将构建一个每分钟或每几分钟运行一次的存储过程。然后,在插入时,我会将该播放器的名称添加到队列中,除非它们已存在于此队列中。当存储过程运行时,它从队列中提取名称,并处理它们的数据,在开始汇总之前将它们从队列中删除(因此,如果在汇总期间插入记录,则会强制进行另一次计算以确保不会丢失任何内容)。这样可以提高性能,因为您消除了许多重复项,但保持了相当的精度,因为每隔几分钟运行一次,就可以准确到达那个时间段。