0

CakePhp または Php を使用して実装する必要があるライブ ブログ プラットフォームに取り組んでいます。一度に 1000 人のユーザーを処理する必要があります。

新しいデータがmysqlテーブルに挿入されたときに、ajaxを使用してコンテンツを自動更新することでこれを行いました。問題は、過去 60 秒間にデータが挿入されたかどうかを確認するために 10 秒ごとに DB にヒットすることです。カウントの結果が 1 の場合、コンテンツを更新するようにプログラムしましたが、最適化されたソリューションとは思えません。

これを実装する方法はありますか?

私のコード - livefeed コントローラーへの ajax 呼び出し:

var auto_refresh = setInterval(
  function()
  { 
    $.post('/blog/posts/liveFeed', function(data) {
    if(data >0){
      alert(data);
      $('#content').load(window.location.href);
    }
  });
  return false;
}, 10000);

posts.php のライブフィード コントローラー:

public function liveFeed() {
  $res=$this->Post->query('SELECT count(*) AS data FROM posts where TIME_TO_SEC(TIMEDIFF(NOW(), created)) < 60');
  echo $res[0][0]['data'];
}

私はcakePhpが苦手です。私のコードが専門外に見える場合は、ご容赦ください。

4

2 に答える 2

2

私があなたなら、データベースとWebアプリの間にキャッシュロジックを実装します。そうしないと、ログインしているユーザーが多すぎて、同時に多くのブログ投稿を照会するときに、メモリの問題が発生します。

stackoverflowのこの投稿とCakePHP、v2.0、Cacheの公式ドキュメントをご覧ください

app/Config/bootstrap.phpこれはCakePHPのファイル内で行われます。

<?php
Cache::config('short', array(
    'engine' => 'File',
    'duration' => '+1 hours',
    'path' => CACHE,
    'prefix' => 'cake_short_'
));

// long
Cache::config('long', array(
    'engine' => 'File',
    'duration' => '+1 week',
    'probability' => 100,
    'path' => CACHE . 'long' . DS,
));

いくつかのオプションがリストされています:FileCache、ApcCacheWincacheXcacheEngineMemcacheEngineRedisEngine。そしてもちろん、cakePHPはそれを統合するのに十分な柔軟性があるので、あなたが実験することができたどんなキャッシュライブラリでも。

于 2012-09-07T12:38:31.043 に答える
2

キャッシングを使用できます。

varnishのようなhttp-cacheを使用し、新しい記事が書き込まれるたびにリセットします-それ以外の場合は、varnishからhtmlページを配信するだけです。それはあなたにスピードと可能なユーザーのかなりのブーストを与えるはずです。

それでも、ajaxリクエストを使用して10秒ごとにページをリロードできます-キャッシュされたページをロードするだけで、毎回データベースにクエリを実行することはありません。

于 2012-09-07T12:38:17.087 に答える