MariaDB写入数据重复计算,找不到问题的根源。
数据库内存8G ,分配给InnoDB 6G
业务描述
游戏平台的游戏有 输、赢、平局三种状态,每天几千个会员在玩游戏。
第一个表 summary表 记录了每个会员当天的所有游戏记录,
summary表结构
uid(会员Id)
dateTime(玩游戏的时间)
settleAmount(结算额。大于0就算赢额,小于0就算输额)
第二个表 report 记录了每个会员每天输赢汇总
report表结构
uniqueKey(主键)
winAmount(当天赢总额)
lostAmount(当天输总额)
uniqueKey=md5(uid+dateTime);
现在要做的是,月底要做数据汇总,把本月所有玩家的游戏日志(summary表)安装会员/每天 这样的小计形式汇总到 report表中,以便查看会员每天的输赢情况
<?
$list=(从 summary 读取数据)
foreach($list AS $item)
{
$uniqueKey=md5($item['uid']+$item['dateTime']);
$winAmount=($item['settleAmount']>0)?$item['settleAmount']:0;
$lostAmount=($item['settleAmount']<0)?$item['settleAmount']:0;
$sql="INSERT INTO `report` (`uniqueKey`,`winAmount`,`lostAmount`) VALUES ('{$uniqueKey}',{$winAmount},{$lostAmount}) ON DUPLICATE KEY UPDATE `winAmount`=`winAmount`+{$winAmount},`lostAmount`=`lostAmount`+{$lostAmount}";
$mysql->execute($sql);
}
?>
执行完毕之后,查看report表中的数据,经常发现winAmount或者lostAmount 与实际额不符,大多数情况下是实际数据2~10倍不等
Who knows the reason, Why