私はHttpリクエストでSMSを送るためのAPIを開発しています。私はノードjsとmongooseを使用します。だから、私はマルチスレッドアプリケーションのような問題があります。ノードjsはmongoose/mongodbとの並行性を読み書きします
実際に、ユーザーがSMSを送信すると、彼はすでに(mongooseを使用して)データベースに送信したSMSの数を確認し、その数が制限を超えていなければSMSのSMSが送信され、SMSの数彼はデータベース内のインクリメントを送信しました(スキーマ内で時間、日、週、および月に送信したSMSの数の値があります)。しかし、私のコードでは、値の読み取りと値の増分などの処理のためにコールバックを使用しています。
したがって、ユーザーが非常に迅速に要求を送信すると、異なるコールバックが送信されたSMSの同じカウントを読み取って、送信されたSMSにユーザーを認可し、同じ値をインクリメントして保存して、偽です。
変数にアクセスするマルチスレッドアプリケーションでは、実際のスレッドがすべてのスレッドを実行する前に他のスレッドが変数を読み取ることを防ぐことができます。
ノードjsイベントシステムとmongoDBのデータにアクセスするだけで、私の問題を解決する方法がわかりません。
回答ありがとうございます。
PS:解決策はわかりませんが、ノードjsがマルチコアを使用できるようにするクラスタでも機能すると良いでしょう。
キューにメッセージを追加し、前のメッセージの処理後にのみ次のメッセージを処理できます。 – Cristy
また、これを読んでください:https://docs.mongodb.com/manual/faq/concurrency/#what-type-of-locking-does-mongodb-use – Cristy