2つの以上の要求が同時に来た場合はどうなりますか?

キランパテル:

私はソロの開発者やフリーランサーが、私は私の町では、単純なローカル電子商取引のプロジェクトを持っています。

私はPHPのMySQLおよび他のフロントエンド技術ですべてのコードを開発しました。しかし、私は唯一の左の項目及び二つ以上の人のために、同じアイテムが同時に存在する場合に何が起こるのかと思いました。注文がpandingまたは顧客が自分のプロジェクトをキャンセルする必要がありますか、場所の順序を取得する必要がありますどの顧客どのようプロジェクトをキャンセルするお客様に依頼されるよりも、アイテムが在庫切れの場合、私は、アルゴリズムを使用しています。

私はその質問は愚かなようだ知っているが、私は状態がどのように影響するかよりも、ランダムなチャットのWebアプリを作る場合と、他のシナリオでは、他のプロジェクトについて考えます。人の場合は、オンラインではなくアカウントと一致するように、どのように誰とでもチャット。

私はこのために何かを試してみましたが、それは働いていませんでした。私は、唯一の2分後に注文と注文のうちの他のgetメッセージを置くことができ、同時に要求を行うために3台のコンピュータ2のPCと1つのMAC Iトライを持っていますが、インターネットの速度に起因します。速度が同じだった場合何が起こります。

私は順序人の、そのためのためのその時、他の人の保留に置かれますアルゴリズムのいずれかの種類を追加する必要があります。私はグーグルが、何も見つかりませんでした。そして、私はそれを処理します何をすべきかやMySQL依頼する人がいないので、私はソロ開発者です前に言いました。

ああ、あなたはワードプレスやlaravelのようなフレームワークでこの種のプロジェクトを作るために考えている場合。また、私はあなたに同意しますが、クライアントにも図書館だけでなく、プレーンなプログラミング言語を使用すると述べました。

読んでくれてありがとう 。

fromvega:

あなたが記述していることであるrace condition状況のタイプとあなたがそれを処理する方法には、ビジネスロジックに依存します。例えば、在庫切れの製品で、最初にあなたが製品に自動的にバックオーダーにするかどうかを決定する必要があるか、あなたが購入を中止したい場合。

あなたが購入を中止したい場合は、データベースのいくつかのタイプを使用する必要があるlockingメカニズムを。ロックは、データベース・テーブルへのアクセスをブロックしたり、一時的に記録することができます。アイデアは、あなたが履行プロセスの開始時に在庫情報をロックし、購入が処理された後にのみ、それをアンロックしていることです。

データベース要求がロックを検出すると、ロックが動作を継続するために解放されるまで待機します(またはタイムアウトが発生するまで)。だから、最初のロックを取得要求は、購入を完了する機会を持っている最初のものです。

しかし、一人でロックすることで、内部のすべてのデータベース操作を実行したいの不整合を防ぐために、十分ではないかもしれませんdatabase transactionトランザクションは、購入を処理するために必要なすべての操作は、そうでない場合は、すべてがロールバックされ、成功裏に起こっていることを確認することができます。たとえば、トランザクションを使用すると、実際に購入を終えずに在庫数を更新することを防ぐことができます。

目標は、2つの要求がでてきたときにということで、ほとんど(何が同時に起こりませんので)同時に、そのうちの一つが終了し、その後、最初のロックを取得するcommit購入取引。2番目の要求は最終的にプロセスにチャンスをされて取得すると、株価がゼロになり、トランザクションが失敗し、roll-back(あなたが適切なチェックをしなかったことを考えると)が発生します。

特定のクエリをチェックあなたはアプリケーションからアプリケーションに変わる必要はなく、同じ概念が適用されます。私はあなたがより多くの情報を収集するために提供されたリンクをチェック示唆ので、あなたのケースでは、さらにあなたを導くために任意の詳細を持っていません。

幸運を!

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=303099&siteId=1