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

标签 mysql database

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

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

我想跟踪他们的胜负和技巧。技能被定义为他们当天所有比赛的平均得分以及与所有球员平均得分的差值。 IE,一个玩家的平均分是305,但是所有玩家的平均分是300,那么他的技能就是+5。此外,所有球员的平均值应该只加权一次,因此打了 100 场比赛的球员与打了 1 场比赛的球员在平均值中的权重不会更大。

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

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

最佳答案

我处理这个的方式是在中间。我会构建一个每分钟或每隔几分钟运行一次的存储过程。然后,在插入时,我会将该玩家的名字添加到队列中,除非他们已经存在于该队列中。当存储过程运行时,它从队列中提取名称,并处理它们的数据,在开始汇总之前将它们从队列中删除(因此,如果在汇总过程中插入了一条记录,它会强制进行另一次计算以确保没有遗漏任何内容).这提高了性能,因为您消除了许多重复项,但保持了不错的精度,因为您每隔几分钟运行一次,所以您对那个时间段是准确的。

关于mysql - 关于计算平均分的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22074757/

相关文章:

php - 在 mysql 表中插入 html 表值

php - 比较多个数组值并更新表状态

mysql - 后缀安装失败。 MySQL冲突

PHP 关闭 mysqli 与数据库的连接错误

php - 是否可以通过知道 PHP 中的用户名和密码(仅)来破解我的数据库

java - 在 Java 中连接到 MySQL 数据库

PHP MySQL 检查重复条目?

sql - 简单的数据库规范化问题

c++ - SOCI 行集<行> 奇怪的错误

mysql - 在MySql中添加记录