RSS/SEO/Google/マッシュアップ/ちょっとした豆知識/エンタメ系など
fkoji.com > F.Ko-Jiの「一秒後は未来」 > MagpieRSSのキャッシュ・ディレクトリをフィードのURLごとに分けてみる
2008 01 13

MagpieRSSのキャッシュ・ディレクトリをフィードのURLごとに分けてみる

スポンサード リンク

フィード(RSS/Atom)を取得してキャッシュするときにどのような方法を取ろうかという話です。

ブロークはPHPで構築していて、フィードの取得には Magpie RSS を利用しています。MagpieRSSでは、

  • MAGPIE_CACHE_DIR にキャッシュ用のディレクトリパスを指定
  • MAGPIE_CACHE_AGE にキャッシュ秒数を指定

とすることで、自動的にフィードをキャッシュしてくれます。通常はこれで事足ります。

しかし、ブロークのように大量のフィード(現時点で約12,000フィード)をキャッシュしておく必要がある場合は、1個のディレクトリではキャッシュしきれません。

ということで、キャッシュするディレクトリをフィードごとに振り分けることにしました。(もちろんここで「データベースに保存する」という手段も取れますが。)

やったことは、

  • キャッシュ用のベースディレクトリの下に 00, 01, 02, ..., f9, fa, fb, fc,fd, fe, ff という名前のディレクトリを準備。
  • MD5でフィードのURLのハッシュ値をとり、ハッシュ値の先頭2文字と一致するディレクトリにキャッシュを保存。

というもの。キャッシュ用のディレクトリのパスを取得する関数はたとえば次のように書けます。

protected function getMagpieCacheDir($feedUrl) {
    return SERVER_ROOT_DIR . 'magpie_cache/' . substr(md5($feedUrl), 0, 2);
}

また、 fetch_rss の引数にディレクトリを渡せるように、rss_fetch.inc を修正します。

88行目
+ function fetch_rss ($url, $magpieCacheDir = '') {
- function fetch_rss ( $url ) {
117行目
+ $cacheDir = ($magpieCacheDir == '') ? MAGPIE_CACHE_DIR : $magpieCacheDir;
+ $cache = new RSSCache( $cacheDir, MAGPIE_CACHE_AGE );
- $cache = new RSSCache( MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE );

こうしておくと、1個のディレクトリに5,000ファイルくらいキャッシュさせるとしても、128万ファイルをキャッシュできるようになります。

ちなみにページへのアクセスが少ない場合には、ユーザの訪問時にどうしてもキャッシュの有効期限が切れている可能性が高くなり、キャッシュがあまり意味のないものになってしまいます。

それを回避するために、データベースにフィードのURLをすべて登録しておいて、バックグラウンドでランダムにフィードを取得するcronをまわして、なるべくキャッシュが効くようにしています。

はてなブックマーク数 livedoor クリップ Buzzurl

English version

「MagpieRSSのキャッシュ・ディレクトリをフィードのURLごとに分けてみる」を携帯で読む

前のエントリー: « 渋谷ギャルが付き合いたい企業ランキングトップ10@ランク王国
次のエントリー: 「王様のブランチ」元リポーターの立川絵理がブログを開始 »

トラックバック

このエントリーのトラックバックURL:

コメントを投稿

(承認されるまでコメントは表示されません。)




このブログをRSSリーダーで簡単購読
Subscribe with livedoor Reader Add to Google My Yahoo!に追加 Subscribe with Fastladder Bloglinesで閲読登録 はてなRSSに追加 エキサイトリーダーに登録

タイトル:

URL:

リンク用HTMLタグ:

powered by Google Chart API

梅酒コミュニティサイト

梅酒.in

Ad

なんかいろいろ

このブログの読者はこんなブログも読んでます。
あわせて読みたい

はてなブックマークカウンター

track feed

フィードメーター - F.Ko-Jiの「一秒後は未来」

スカウター : F.Ko-Jiの「一秒後は未来」








携帯からのアクセスは

QRコード
http://mob.fkoji.com/