4

私はウェブサイトを開発していて、人々がデータ (投票) を挿入できるデータベースを手に入れました。「x」票が投じられたように、ヘッダーにカウンターを保持したい。しかし、すぐにウェブサイトに多くのトラフィックが発生する可能性があります。今、私はクエリでそれを行うことができます

SELECT COUNT(*) FROM `tblvotes

ヘッダーに数字を表示しますが、ユーザーがページを変更するたびにクエリがやり直されるので、30秒ごとに1回クエリを実行する方がよいのではないかと考えています(mysqlサーバーの負荷がはるかに少ない)が、次に、その出力をどこかに保存する必要があります(これはそれほど難しくないはずです。テキストファイルに書き込むことができますか?)しかし、30秒ごとに自動的にWebサイトにクエリを実行させ、数値をファイル。サーバーへの SSH がないため、crontab を実行できませんか?

わからないことがあれば遠慮なく聞いてください!

4

5 に答える 5

5

最も簡単な方法: 結果をローカルのテキスト ファイルに書き込み、リクエストごとにテキスト ファイルのファイル時間が now() + 30 秒未満であることを確認し、そうであればファイルを更新します。更新するには、ファイルをロックする必要があります。ファイルが更新されている間、条件 now() + 30 を満たす他のユーザーは、競合状態を回避するために、現在存在するファイルのみを読み取る必要があります。お役に立てば幸いです、ステファン

于 2012-04-26T14:38:24.810 に答える
3

Crontab は、最速で毎分しか実行できません。

これにはもっと良い解決策があると思います。統計情報を格納する集計表を作成する必要があります。

votes_table を使用するtriggerと、テーブルが INSERT ステートメントを受け取るたびに「何か」を実行できます。

集計テーブルには最も正確な情報が格納され、クエリを実行してカウントを表示できます。

于 2012-04-26T14:37:06.383 に答える
2

サーバーで許可されている場合は、ファイルの代わりにキャッシュメカニズム(APCなど)を使用することをお勧めします。

于 2012-04-26T14:42:47.473 に答える
1

可能であれば、memcachedの使用を検討することをお勧めします。追加するデータの有効期限を設定できます。

最初にクエリを実行するときは、結果に関連付けられたクエリテキストのmd5を記述します。以降のクエリでは、memcachedでデータを探します。有効期限が切れている場合は、SQLクエリをやり直してから、memcachedに書き換えることができます。

于 2012-04-26T14:41:09.883 に答える
0

さて、あなたの質問の最初の部分は基本的にあなたのページのヘッダーに含まれる総投票数の結果をキャッシュすることについてです。その非常に良いアイデア-これはそれを実装する方法のアイデアです...

crontabを有効にできない場合(SSHアクセスがなくても、ホスティングコントロールパネルを使用してこれを設定できる場合があります)、外部のサードパーティのcronジョブサービスを使用する必要がない場合があります。(グーグルはこれについて多くの結果を持っています)...

cronジョブを実行するたびに、いくつかのPHP配列を含むファイルを作成/更新できます-

$fileOutput = "<"."?php\n\n";
$fileOutput .= '$'.$arrayName.'=';
$fileOutput .= var_export($yourData,true);
$fileOutput .= ";\n\n?".">";
$handle = fopen(_path_to_cache_file,'w+');
fwrite($handle,$fileOutput);
fclose($handle);

これにより、ヘッダーマークアップに簡単に挿入できるPHPファイルが作成され、名前で変数にinclude()アクセスできるようになります。$yourData$arrayName

于 2012-04-26T14:39:50.300 に答える