aki
akid****@s17*****
2005年 5月 21日 (土) 22:59:53 JST
rskさん、ありがとうございますー! なるほどなぁ、fseek()で高速化の工夫もしてたんですね。 こういうプリミティブな仕組みは、 手品の種が簡単なほどおもしろいとのと 同じような感じでおもしろいです。 -- aki ----------------------- Original Message ----------------------- From: rsk <moons****@s32*****> To: p2-ph****@lists***** Date: Wed, 18 May 2005 23:44:37 +0900 Subject: [P2-php-dev 39] tGrep > 例のスレタイ検索ですが、チューニングして高速化したとともに > ファイル3つになりました。 > デザインもGoogleの劣化コピーみたいになってますw > > 構成は > 1. スレッド情報(各行はarray($bbs,$key,$title)をシリアライズ) > 2. grep対象(各行は(1)における該当行のオフセット+TAB+検索用に変換したスレタイ) > 3. BBS-板名-ホスト をマッピングしたPHPコード(includeして使う) > で、これまでは(3)の内容も(1)の各行に含まれてたのでサイズが大きくなってました。 > 別にしたことでファイルI/Oの負荷がかなり軽減できた模様。 > > とにかくレンタルサーバでサービスを提供するために作ってます。 > 高度な検索には向かない仕様かも。 > > 最初(2)にはスレタイだけが記録されてて、 > 検索時はgrep --line-numberして行番号を抽出、行番号以外を削除してから > (1)をfgets()でヒットした最後の行になるまで空読み&読み込み > を繰り返してたんだけど、これじゃー公開には厳しいということで > ファイル先頭からのオフセット(バイト数)直書き + fseek()を使ってみたら > 十分なパフォーマンスが出たのでこれはいけるぞ、と。 > > 肝は(2)でオフセットがgrepにひっかからないようにエンコードしたところ。 > # decbin()したのをさらに 0 => X, 1 => Y 変換 > # grepに渡すキーワードの英字は半角小文字にしてあるからXYにはひっかからない > ## そこまでやらんでも [0-9] を [A-J] に変換したらええやん、って今思った > > あとは検索結果のキャッシュですが > 「キーワードごとに対応するオフセット・グループ」と > 「オフセット・グループごとに対応するスレッド・グループ」を > 別々にキャッシュして異なるキーワードで同じスレッド・グループが > ヒットするときの読み込み負荷を軽くしようとも目論んでます。 > HTML出力をキャッシュするのもありかな? > > akiさんには別途DMでソースのURLを送りますね。(未完成ですが) > > // +------------------------------+ > // | rsk <moons****@s32*****> | > // +------------------------------+ > > _______________________________________________ > P2-php-dev mailing list > P2-ph****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/p2-php-dev