我有一个product表数据, 它会产生10个coupon, 我在product表的字段里存了coupon_count的字段为10, 如果抢红包的话根据coupon_count的剩余数来生成红包(抢红包coupon_count 减一)。
当1秒内并发上百的话, 会因为多个进程并发写入问题产生超过总是得红包。有什么方案可以解决这个问题?
web框架: flask
数据库: mongodb 3.2.6
使用orm框架: mongoengine
认证高级PHP讲师
예, mongodb에는 트랜잭션이 없으며 테이블을 잠그지 않습니다. 숫자 쿼리부터 쓰기까지의 프로세스는 원자적이지 않으므로 동시성이 높을수록 필연적으로 문제가 발생합니다. 먼저 빨간색 봉투를 생성한 다음 findAndModify를 사용하여 빨간색 봉투를 잡을 때 빨간색 봉투 상태를 쿼리하고 동기적으로 수정하는 등 처리를 위한 일부 mongodb 원자 작업에 적응하도록 데이터 및 쿼리 인터페이스를 수정하는 것이 좋습니다.
findAndModify() 사용
예, mongodb에는 트랜잭션이 없으며 테이블을 잠그지 않습니다. 숫자 쿼리부터 쓰기까지의 프로세스는 원자적이지 않으므로 동시성이 높을수록 필연적으로 문제가 발생합니다.
먼저 빨간색 봉투를 생성한 다음 findAndModify를 사용하여 빨간색 봉투를 잡을 때 빨간색 봉투 상태를 쿼리하고 동기적으로 수정하는 등 처리를 위한 일부 mongodb 원자 작업에 적응하도록 데이터 및 쿼리 인터페이스를 수정하는 것이 좋습니다.
findAndModify() 사용