2011-06-09 5 views
3

私は本質的にページがヒットするたびにログに記録される解析ツールを書いています。私が持っている問題は、印象の量が非常に高くなる可能性があり、1日に数百万回、または少なくとも300秒(私は人々が毎秒10kを達成することができると言いました)を処理する必要が潜在的になります。私の現在の設定は、ページがMySQLのinnodbテーブルに直接挿入されるたびにPHPのログに記録されますが、これは遅くなり、時折ヒットしてしまいます。私の考えは、memcacheを前面に置き、すべてのインプレッションを最初に記録してから、memcacheからインプレッションを取り込んだ静的なバッチ処理を実行し、静かな時間にデータベースに格納します。午前3時。だから私の質問はどのようにmysqlにフラッシュする前にmemcacheの大きなページの印象を処理する

1)これは正しい方法ですか?理想的には、私は新しい技術を実装したり、mongoやcouchのようなNoSQL DBを実装したりしたくありません。

2)私はどのようにmemcacheでこれを行いますか?現在キャッシュにあるすべてのキーを見つける方法がないので、各インプレッションごとにインクリメントするカウンタを設定し、データを含むIDとしてカウンタを持つキーを設定すると、バッチプロセスは最後の位置からループしますカウンターにそれらのレコードを処理し、現在のカウンタにその最後の位置を設定する。..

すべてのヘルプは、私はserperateバッチを作成して、代わりにそれをintegratieないでしょう

乾杯

+0

http://php.net/manual/en/book.memcached.phpあなたは(私が推薦する)いくつかのNoSQL技術のために行く場合は、私の中でのRedisを試してみてください – amolv

+0

マニュアルMemcachedのopionionあなたの仕事に最適な技術... – TheHippo

答えて

0

を高く評価していますあなたのコード。

ここでは、確認/検証/ロックはありません。いくつかの擬似コード:

$mViews = $oMemcache->get('views'); 
if ($mViews > 1000) { 
    $oDatabase->update($mViews); 
    $oMemcached->replace('views', 1); 
} 
else { 
    $oMemcached->increment('views'); 
} 
+0

この例では、ビューとカウンタの違いは何ですか? – Sam

+0

違いは私が注意を払っていない、カウンターはofcourseのビューでなければなりません。 Editted。 –

+0

この種の作品は動作しますが、並行処理がミックスに追加されると問題が発生します。 – Sam

関連する問題