ホームページ >バックエンド開発 >PHPチュートリアル >: 複数のユーザーが同時にアクセスすると問題が発生しますか?
お気軽にアドバイスをお願いします、よろしくお願いします!
状況は次のように説明されます:
システム構造: 1. インターフェイス モジュール (php) --> 2. 中間インターフェイス (php) --> 3. データベース (mysql)
1. インターフェイス モジュール: 操作を表示します。インターフェイスと操作結果
2. 中間インターフェイス: インターフェイス モジュールとデータベース間のデータ交換、およびその他の機能を担当します (ヘルプの要求とは関係ないため説明しません)
一般的なプロセス: http を送信します。インターフェイス モジュールからリクエストが送信され、そのリクエストがインターフェイス モジュールに送信されると、インターフェイス モジュールはデータベースにアクセスしてデータを取得し、それをインターフェイス モジュールに返します
ここで問題が発生します:
インターフェイス モジュールには大量のアクセスがあります。これらのユーザーは、特定のデータを同時に編集するなど、同じリクエストを同時にインターフェイスに送信する可能性があります。
Q: この問題を回避するにはどうすればよいですか?
説明が明確かどうかわかりませんが、アドバイスをお願いします、ありがとう!
ロック
ビジネスが「特定のデータの同時編集」を許可している場合は、最後に送信されたものが優先されます
それ以外の場合は、リクエストが受信されたときに返されますxxx が編集中です
Bamboo さんのアドバイスありがとうございます!もっと詳しく説明してください?パートナーは、インターフェイス モジュールの制限の下でのみ特定のデータを同時に編集できることを要求します。
ユーザー A がニュースを編集して正常に読むと、このデータのステータス フィールドを 1 に設定し、読んだタイムスタンプを記録します
この時点で誰かが編集したい場合、ステータス 1 はそれを拒否します
ユーザー A のページajaxホイールクエリ、サーバーにまだ編集中であることを伝え、数十秒ごとに時刻を更新します
Aが編集して送信したとき、またはユーザーBがステータスを1に編集したいとき、しかし最後のajax送信の時刻があまりにも違いすぎます現在時刻、ステータスを 0 に設定します
ユーザー A がニュースを編集して正常に読み取ったら、このデータのステータス フィールドを 1 に設定し、読んだタイムスタンプを記録します
この時点で誰かが編集したい場合は、ステータス 1 はそれを拒否します
ユーザー A のページの Ajax ポーリングで、まだ編集中であることをサーバーに伝え、数十秒ごとに時刻を更新します
A が編集して送信するとき、またはユーザー B がステータスを 1 に編集したい場合、時刻は前回の ajax 送信の時刻が現在と違いすぎるので、ステータスを 0 に設定してください
編集する際に許可は必要ありませんか? A が B に送信する内容も編集できますか?
編集する際に許可は必要ありませんか? A が B に送信する内容も編集できますか?
同じレコードを同時に編集できないようにするのはビジネスレベルの要件です
ビジネス要件の実装は中間インターフェイスで完了する必要があります。特別なニーズがある場合は、インターフェース モジュールで完了することもできます
ニーズは中間インターフェースで完了する必要があります
同じレコードを同時に編集することは許可されていません。これはビジネス レベルです。要件
ビジネスニーズの実現は中間にある必要があります インターフェイスで完了します。特別なニーズがある場合は、インターフェース モジュールで完了することもできます
ニーズは中間インターフェースで完了する必要があります
中間層に置くのが適切です
一般的に中間層は通常 API と呼ばれるものなので
フィルター条件を追加するのは比較的簡単です
もちろんインターフェースに実装することもできますただし、インターフェイス層はデータ層に直接アクセスすべきではありません(アクセスできません)。
したがって、別のキャッシュメカニズムを設定する必要があり、リクエストが処理されない場合は中間層にリクエストを送信する必要はありません
共有メモリ、データベース、またはファイルキューを使用するだけです
中間層に置くのが適切です
一般的に中間層は通常 API と呼ばれるものなので
フィルター条件を追加するのは比較的簡単です
もちろんインターフェースに実装することもできますただし、インターフェイス層はデータ層に直接アクセスすべきではありません(アクセスできません)。
したがって、別のキャッシュ メカニズムを設定する必要があり、処理されない場合はリクエストを中間層に送信する必要はありません。
共有メモリ、データベース、またはファイル キューを使用するだけです