84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
我有一个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() を使用する