[P2-php-dev 39] tGrep

Back to archive index

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*****> |
// +------------------------------+




P2-php-dev メーリングリストの案内
Back to archive index