検索

ホームページ  >  に質問  >  本文

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中文网2811日前403

全員に返信(2)返信します

  • 伊谢尔伦

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

    はい、mongodb にはトランザクションがなく、テーブルをロックしません。数値のクエリから書き込みまでのプロセスはアトミックではないため、同時実行性が高いと必然的に問題が発生します。
    最初に赤いエンベロープを生成し、次に赤いエンベロープを取得するときに findAndModify を使用して赤いエンベロープのステータスをクエリし、同期的に変更するなど、一部の mongodb アトミック操作に適応して処理するようにデータとクエリのインターフェイスを変更することをお勧めします。

    返事
    0
  • PHP中文网

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

    findAndModify() を使用する

    返事
    0
  • キャンセル返事