设计积分数据库的时候,就是用简单的update point = point + 5 这样的方式来实现积分的累计。
然后发现这样方式是可以被刷分的,我用的是php,每次从log表中查找这次update是否有加过,如果没执行过的话,就执行update,同时在log表插入执行过的记录。
然后发现,如果用发包的工具或者两台电脑,同一时间访问这个网页,一开始的log表查询都判断为真,因为还没有插入记录。便都执行update去了。。于是。。同一时间便执行了2次update。
后来我用每次都sum一下log中的数值来补的漏洞现在log量大了,每次sum都效率很低,求教用什么方法可以防止这样的刷分。
然后发现这样方式是可以被刷分的,我用的是php,每次从log表中查找这次update是否有加过,如果没执行过的话,就执行update,同时在log表插入执行过的记录。
然后发现,如果用发包的工具或者两台电脑,同一时间访问这个网页,一开始的log表查询都判断为真,因为还没有插入记录。便都执行update去了。。于是。。同一时间便执行了2次update。
后来我用每次都sum一下log中的数值来补的漏洞现在log量大了,每次sum都效率很低,求教用什么方法可以防止这样的刷分。
这跟MYSQL的引擎有关系,不是所有数据库处理锁的方式都一致如果只有一个终端,则建议用3楼的方法