mongodb 高并发写入 覆盖原有数据

我有一个product表数据, 它会产生10个coupon, 我在product表的字段里存了coupon_count的字段为10, 如果抢红包的话根据coupon_count的剩余数来生成红包(抢红包coupon_count 减一)。

当1秒内并发上百的话, 会因为多个进程并发写入问题产生超过总是得红包。有什么方案可以解决这个问题?

  1. web框架: flask

  2. 数据库: mongodb 3.2.6

  3. 使用orm框架: mongoengine

阅读 8.4k
1 个回答

会,mongodb没有事务,不会锁表,在你查询数量到写入的过程并非原子性的,所以高并发必然出问题。
建议修改数据和查询接口,去适配一些mongodb的原子性操作来处理,比如先生成红包,抢红包时用findAndModify来查询并同步修改红包状态。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题