rsk
moons****@s32*****
2005年 5月 18日 (水) 23:44:37 JST
例のスレタイ検索ですが、チューニングして高速化したとともに ファイル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*****> | // +------------------------------+