关于订单到期删除的一些思考

电商平台,用户下单,但是未付款.需要在半个小时之后取消该订单.如何处理比较好?

Order 表, status 字段 wait_pay

DB 轮询

每隔一段时间去数据库查询 Order 表status 为 wait_pay 的订单,将过期的status 标记为 cancel
优点:简单方便,易于实现
缺点:对数据库性能有影响

DelayedQueue

优点:简单,高效
缺点:灾难恢复

Redis ZSet

优点:灾难恢复,分布式
缺点:开发复杂,依赖第三方组件

综合下来,好像就只有DB最简单。
思考:既然DB轮询的策略简单可行,那么把缺点弱化不就是比较好的方案了么?
改进:

  1. DB 主从,轮询从节点 DB.
  2. 轮询的时间取业务允许范围的最大值,比如10s,只查找最近31分钟的记录.
  3. 既然数据库成为分布式系统的瓶颈,为何不选择分布式数据库来从根本上解决问题?

希望大牛不吝赐教

To young too simple还有更合适的解决方案:
使用消息队列,死信队列

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容