2011-01-29 12 views
2

私は36,000件の記事に対して1日約58,000ヒットを受け取るニュースサイトを持っています。この36000のユニークなストーリーのうち、30000は1回のヒット(検索エンジンクローラーの大半)を取得し、わずか250のストーリーが20回以上のインプレッションを獲得します。何かをキャッシュするのはメモリの無駄だが、これらの250の記事。PHPで頻繁に使用されるデータのみをキャッシュする

現在、私はデータキャッシュにMySQL Query Cacheとxcacheを使用しています。テーブルは5〜10分ごとに更新されるため、クエリキャッシュだけではあまり役に立ちません。頻繁に訪問したページだけを検出してデータをキャッシュするにはどうすればよいですか?

+2

メモリの浪費*は本当に問題ですか?各話はどれぐらいですか? –

+0

シリアル化された行の長さは、約2000〜5000文字です。 –

+0

それほどではありません、ストレージは安いです。あなたはおそらく、より多くのメモリを購入するよりも、解決策を見つけるのにもっと多くのお金を費やすでしょう。 しかし、データが単純なテキストの場合、圧縮しないのはなぜですか? –

答えて

4

は、私はあなたが開始するには、2つの選択肢を持つことができると思う:あなたは、デフォルトでは何もキャッシュしない

  1. Observer/Observableパターンを使用して、記事のビューがしきい値に達したときにイベントをトリガし、ページのキャッシュを開始する方法を実装できます。

  2. あなたは両方のケースで作成

ですべての記事をキャッシュする、あなたの定義されたしきい値に達していない記事をパージするためにcronを使用することができます。

いずれの場合でも、ヒューリスティック手法を使用して、記事をキャッシュする必要があることを十分に早期に判断する必要があります。ヒューリスティック手法と同じように、偽陽性となります。

あなたのコンテンツがどのように読み込まれているかに依存します。記事がリアルタイムニュースであれば、トラフィックが速く発生するので効率的です。

メイン問題これらの方法では、最後のアクセス日時と追加のクエリにつながる可能性のある現在のページビューのような余分な情報を保存する必要があります。

1

新しいの記事のみキャッシュできます(最近追加されたものを考えてみましょう)。私はmemcachedRedisを見てみることをお勧めします - それらは非常に便利で、シンプルで、同時に強力なキャッシングエンジンです。

+0

作成日を確認することをお勧めします。これにより、記事の数を大幅に減らすことができます。私が知っていることから、高度な機能を使用していないので、xcacheはmemcachedとRedisよりはるかに高速です。 –

関連する問題