秒杀场景下 如何保证数据准确
秒杀时 商品价格递增,比如第一个买的两百,第二个买的三百,第三个四百以此类推,同时修改库存等其他表
在更新的时候防止超卖等问题我用的是行锁,插入的时候为了确保数据准确使用了唯一索引 但是带来的问题是秒杀成功率低
请问在插入或者更新的时候如何保证数据的准确性与完整性和相对较高的处理效率,因为之前没做过类似应用 希望大家能给出思路
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
秒杀自古只有一个问题:
机器与程序性能是否能支撑住秒杀业务。
能撑住就随便玩,撑不住,那就使用各种【优化】:
1.秒杀前,对参与秒杀的用户进行登记,不登记的无法秒杀。
登记的作用是,筛选出参与秒杀的用户,一般这个量比较少,把他们的数据放入专用表里,可以提高检索速度。
2.使用C或C++写的高速队列来为后端数据库减压,同时也容易保证数据的正确性。
3.使用分时算法,也就是5秒内,数据库以日志的形式,写入所有人的秒杀数据,此时数据库不能进行其他任何操作,比如查结果。5秒后,关闭写入,此时对日志进行去重、合法性判断等操作,这个过程中数据库同样不能进行其他任何操作,比如写入秒杀日志。这些操作进行完毕后,向客户端返回秒杀结果。接着,再进行5秒钟的秒杀日志写入操作。这种方法,在参与人数远远大于商品数量的时候,特别有效。
可以适当修改秒杀流程,分成两部分:
1、只插入秒杀数据,并在一定时间后停止秒杀(也可能有比实际库存多的记录进来)。该流程只告诉用户提交成功,但是不告诉其准确结果;
2、有一个后台进程,根据秒杀记录及库存来评判其是否成功,以及对应的价格,并更新库存。该流程结束后,用户在秒杀记录里边可以查看最后的结果。
这样做的好处是,不会引发并发问题,能保证数据准确性,用户也能在较短时间内获知到秒杀结果。