node.js - nodejs单进程产生的数据库连接多线程并发问题探讨
怪我咯
怪我咯 2017-04-17 15:50:35
0
4
919

举例,假设有100个请求node服务器,每个请求会执行一次查询,修改数据库操作。假设10个请求按顺序被node接收处理 等待各自判定库存查询数据库io操作,但是库存只有5个,问题来了,这时候10个查询都判定库存还有,然后继续下面的下单操作。当100个请求甚至更多时,问题会被更加放大 又不能同步加锁,哪位朋友有比较合理的思路 不吝赐教~

怪我咯
怪我咯

走同样的路,发现不同的人生

全員に返信(4)
小葫芦

サイトで「snap up」を検索
https://segmentfault.com/sear...

極端なケースは「フラッシュセール」です
https://segmentfault.com/sear...

いいねを押す +0
大家讲道理

この場合、トランザクションを追加する必要があります

----- 回答を更新します -----

クエリと実際のデータの不一致の問題は避けられませんが、私の理解では、コールバックを更新する前に他のユーザーが購入に成功した場合、購入失敗の問題が発生するため、実際にはロックすることで解決できます。 , すべての非同期操作で Promise を使用する場合、Promise を介して連続呼び出しをシミュレートして、Java メソッドのロックと同様の機能を実現できます

デコレータを使用して、Promise を返すメソッドの Java synchronized キーワードと同様の同期呼び出しを実装します

リーリー

Chrome で実行するとパスします。 。

----- 再度更新 ----

github にはすでに同様のツールがあります
https://github.com/sindresorh...

いいねを押す +0
巴扎黑

上記の 2 人に感謝します。まず、私が説明したシナリオは通常の商品販売の場合です。これは、redis キューを使用することで直接解決できます。製品の種類が多い場合、この方法はお勧めできません。

リーリー
いいねを押す +0
阿神

トランザクション + 条件付き更新は、設計により過剰販売を回避します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!