【发布时间】:2014-06-10 16:40:39
【问题描述】:
我创建了一个允许客户更改背景颜色的页面。例如,提供了 5 种背景颜色可供选择,并制作了一些用于更改背景颜色的按钮。服务器将客户端选择的背景颜色保存在数据库中,以便他们再次访问页面时可以看到他们选择的背景颜色而无需任何设置。当客户端点击按钮时,将向服务器发送一个 AJAX 请求,PHP 脚本将查询并更新数据库中的一行以记录客户端的选择。
实际上,我已经完成了页面,如果客户端不频繁更改背景颜色,则不会出现任何问题。例如,如果我在 4 秒内均匀地从红色变为蓝色变为绿色变为白色,则识别出 3 次变化,最后将“白色”保存到数据库中。但是,如果我在很长一段时间内再次这样做,比如不到 1 秒,我会发现一些更新失败了。具体来说,我通过$stmt->affected_rows是否返回0来检查它,例如,它可能显示对应于“绿色”和“白色”的更新影响了第0行。
如果某些更新失败,客户端选择的最后一个背景颜色可能不会被保存。此外,限制客户端更改背景的速度也很奇怪。因此,我想知道导致问题的原因。
是否达到最快的更新频率?或者,是不是因为上次更新还在写数据并锁定行? MySQL 能否接收更新查询并将其放入队列中,并按顺序进行处理?
【问题讨论】:
-
请记住,您正在处理的是网络。仅仅因为您连续单击 3 种颜色并不意味着 ajax 命中将以相同的顺序到达服务器。每个ajax请求都是完全独立的,网络大神可能会对数据包微笑/皱眉。例如你点击
R->G->B,但相应的ajax请求实际上以G->B->R到达服务器 -
也许你应该考虑使用一个简单的队列机制。
-
也许你的 sql where 子句不是最好的。你在检查旧颜色吗?
标签: php mysql sql ajax sql-update