3

私は時々負荷が高くなるオークション サイトを持っています。ほとんどの場合、mysql が多くのメモリと CPU を消費しているように見えます。私が持っている状況は以下のとおりです。

ajaxクエリは、オンラインでオークションを見ているすべてのユーザーに対して毎秒mysqlに送信され、以前の値に対する入札数をチェックします。誰かが入札した場合、カウントは異なるため、この ajax はもう 1 つの ajax を呼び出して、レコードを取得し、テーブルに入札を表示します。これは、見ている/ログインしているユーザーに固有のものです。削減するために、これを最初の 10 に制限しています。ロード。

ただし、問題は、オンラインに 50 人のユーザーがいて、そのうちの 1 人が入札を行い、50 のクエリが mysql に入り、全員が入札カウントが変更されたことを検出し、さらにクエリを発行してレコードを取得し、各ユーザーに対応する入札を表示する場合です。

より大きな問題は、オンラインのユーザーが 500 人いる場合、変更を検出するために 500 のクエリが mysql に入り、入札が行われると、別の 500 のクエリ (各オンライン ユーザーに固有のクエリ) が mysql に入り、サーバーがクラッシュする可能性があることです。

注: 現在、クエリの実行、レコードの取得などを担当する単一の mysql 接続オブジェクトが php でシングルトンとして使用されています。

私は基本的に、500 人のユーザーがオンラインの場合に 500 のクエリが mysql にアクセスしないという解決策を検討していますが、そのうちの 1 人が特定のオークションに入札した場合でも、すべてのユーザーが更新を取得する必要があります。どんなアイデアや提案も大歓迎です。

mysql の負荷を軽減するこのシナリオのソリューションを実装するにはどうすればよいですか?

リソースに関しては、Hostgator で VPS4 を実行しており、かなり問題ありません。唯一の問題は、多くのユーザーが入札しているときに 95% になる CPU / メモリの使用量です。

いくつかの提案に感謝します

4

2 に答える 2

0

memcached やその他のキャッシング サービスを検討する必要があるようです。MySQL にクエリを実行して memcached に更新するプロセスと、memcached に直接クエリを実行して行を取得する ajax プロセスを持つことができます。

Memcached はリレーショナルの一貫性を維持しません。また、Memcached をクエリすると、MySQL を毎回クエリするよりもはるかにリソース消費が少なくなります。

PHP には、memcached を操作するための非常に優れたインターフェイスがあります: Memcache

memcached プロジェクトの Web サイト。

他にもいくつかのキャッシングサービスがあります。MySQL でのクエリ キャッシングも検討したいかもしれませんが、これには MySQL への複数の接続が必要であり、いずれにしても非常にリソースを消費します。

于 2012-09-10T22:43:04.480 に答える
0

短期的には、詳細なクエリを実行することもできます。更新するものが何もない場合は何も返しません (最初のクエリを置き換えます)。

これにより、クエリの速度をキャッシュしたり、より詳細に分析したりするための時間を稼ぐことができます。

于 2012-09-10T23:24:10.173 に答える