>  Q&A  >  본문

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

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

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

  1. web框架: flask

  2. 数据库: mongodb 3.2.6

  3. 使用orm框架: mongoengine

PHP中文网PHP中文网2741일 전373

모든 응답(2)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:43:24

    예, mongodb에는 트랜잭션이 없으며 테이블을 잠그지 않습니다. 숫자 쿼리부터 쓰기까지의 프로세스는 원자적이지 않으므로 동시성이 높을수록 필연적으로 문제가 발생합니다.
    먼저 빨간색 봉투를 생성한 다음 findAndModify를 사용하여 빨간색 봉투를 잡을 때 빨간색 봉투 상태를 쿼리하고 동기적으로 수정하는 등 처리를 위한 일부 mongodb 원자 작업에 적응하도록 데이터 및 쿼리 인터페이스를 수정하는 것이 좋습니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 17:43:24

    findAndModify() 사용

    회신하다
    0
  • 취소회신하다