我添加了一个日志,看看发生了什么,这是我发现的:
Bid insert date | Auction close date
2012-06-25 14:40:57 2012-06-25 14:40:54
正如您所看到的,拍卖已经结束,但竞标价格延迟了3秒。 只是为了澄清,如果拍卖已经关闭,用户就无法出价,所以我确信请求是在关闭之前提出的。
每天发生一次拍卖,我不知道是什么能引发这个问题。 我正在使用PHP和MySQL。
答案 0 :(得分:1)
可能的原因是用户加载包含“出价”按钮的页面,拍卖结束,按钮仍在那里并且相应地执行操作。如果您在插入之前验证拍卖是否已关闭,则永远不会发生这种情况。 SELECT和INSERT之间的时间不应该是> 0.1秒我假设您在添加最后一次出价之前未验证竞价状态。
答案 1 :(得分:1)
2-3秒?
您在出价请求时运行了多少个查询?我想:
1)用户是否已登录? 2)是否允许出价? 3)拍卖仍然开放吗? 4)发布出价
我不认为这4个查询运行时间超过一秒,除非你有非常好的书面查询。您使用的是什么MySQL数据库层?您是否确保您的代码尽可能简化?即你多久打开一次数据库等等。
如果他们出价并且拍卖在他们的出价处理之前完成,那就是坚韧的cookie。你还没赢。同样的事情有时在eBay上发生,而且它很难。如果问题是您的系统允许延迟出价获胜,那么您需要在这方面重新审视您的代码。在保存出价之前,最后一次出价尝试应该肯定检查拍卖是否仍在运行。这不应该花费任何时间。
也许你应该检查你的表索引。太少,数据搜索速度慢,数据插入速度太快,影响数据插入速度。
可能有很多错误,从简单的索引错误到狡猾的查询/循环等等。
答案 2 :(得分:0)
不匹配确切的结束时间戳,但将其与 (关闭时间 - turnaround_time)。
假设结束时间是14:00:00,请求的周转时间是10秒。然后,如果在13:59:50之前提出请求,则只会被考虑。