ホームページ >バックエンド開発 >PHPチュートリアル >: 複数のユーザーが同時にアクセスすると問題が発生しますか?

: 複数のユーザーが同時にアクセスすると問題が発生しますか?

WBOY
WBOYオリジナル
2016-06-23 13:48:481110ブラウズ

お気軽にアドバイスをお願いします、よろしくお願いします!
状況は次のように説明されます:

システム構造: 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 に設定してください



ご返信ありがとうございます。これがインターフェイスモジュールで実行できるかどうかについていくつか疑問があります。以前、長年 PHP をやっている友人にアドバイスを求めたことがありますが、それは修正できないと言われました。
私も以前ロゴを設定しようと思ったのですが、データベースが操作できず断念しました。

編集する際に許可は必要ありませんか? A が B に送信する内容も編集できますか?

編集する際に許可は必要ありませんか? A が B に送信する内容も編集できますか?



ご来場いただきありがとうございます!
編集する際には許可が必要ですが、オンライン上では複数の許可されたユーザーが特定のデータを編集することができます。

同じレコードを同時に編集できないようにするのはビジネスレベルの要件です
ビジネス要件の実装は中間インターフェイスで完了する必要があります。特別なニーズがある場合は、インターフェース モジュールで完了することもできます
ニーズは中間インターフェースで完了する必要があります

同じレコードを同時に編集することは許可されていません。これはビジネス レベルです。要件
ビジネスニーズの実現は中間にある必要があります インターフェイスで完了します。特別なニーズがある場合は、インターフェース モジュールで完了することもできます
ニーズは中間インターフェースで完了する必要があります



モデレータに再度アドバイスをいただき、ありがとうございます。 「xuzuning」モデレーターさん、ありがとうございます!
私の説明では詳しくないので、ビジネスロジックを再説明します。
インターフェイス層の機能には、データの表示、データの編集要求、操作ユーザーの管理などがあり、インターフェイス層には、操作ユーザー。
中間インターフェイス層: 操作ユーザーに関係なく、インターフェイス層からのリクエストを処理します。どの操作ユーザーの操作要求であっても、中間インターフェイス層は正当であるとみなされます。

モデレーターのような気がしますが、中間インターフェース層で処理して、誰がリクエストを送ってもリクエストが来て、IDがロックされ、結果が返ってきたらIDのロックが解除されるということですか?
以前からそう思っていましたが、PHPに触れるのは初めてで、相手もベテランなのでよくわかりませんでした。

先方はajaxを使えば良いとインターフェース層での業務をしてほしいと主張しましたが、ロゴの設定はできないような気がしたので混乱して質問させていただきました。

アドバイスをくださったモデレーターに改めて感謝します。

中間層に置くのが適切です
一般的に中間層は通常 API と呼ばれるものなので
フィルター条件を追加するのは比較的簡単です

もちろんインターフェースに実装することもできますただし、インターフェイス層はデータ層に直接アクセスすべきではありません(アクセスできません)。
したがって、別のキャッシュメカニズムを設定する必要があり、リクエストが処理されない場合は中間層にリクエストを送信する必要はありません
共有メモリ、データベース、またはファイルキューを使用するだけです

中間層に置くのが適切です
一般的に中間層は通常 API と呼ばれるものなので
フィルター条件を追加するのは比較的簡単です

もちろんインターフェースに実装することもできますただし、インターフェイス層はデータ層に直接アクセスすべきではありません(アクセスできません)。
したがって、別のキャッシュ メカニズムを設定する必要があり、処理されない場合はリクエストを中間層に送信する必要はありません。
共有メモリ、データベース、またはファイル キューを使用するだけです



ありがとうございます。これは非常に明確です。ありがとう! ! !
縛ってね、笑。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。