[Fswiki-dev] 高速化提案

Back to archive index

あき attin****@kk*****
2007年 8月 8日 (水) 21:23:02 JST


あきです。
ご無沙汰してます。

最近、表示速度の高速化について真剣に考えています。
ある程度目星はつけているのですが、見当違いでないかどうかだけ、確認させ
て下さい。

今目をつけているのは lib/Wiki/DefaultStorage.pm の get_page_list です。
この中で、data_dir ディレクトリからファイルの一覧を取得しています。

これを、ディレクトリ内を見るのではなく、ファイルリストを設定ファイル内
に保存しておき、それを参照するような仕組みにしたらどうだろうかと考えて
います。
get_page_list は個々のページを表示させる際に必ず呼ばれているメソッドで
すし、ディスクIOが発生しますのでパフォーマンス的にもかなり大きな違いが
出てくるものと考えています。

ちなみに、この際に必要な情報は全て lib/Wiki/DefaultStorage.pm の save_page 
で保存できると踏んでいます。

方向性や認識に誤りはありませんでしょうか?


それからもう一点…、
他に、検索機能に関してですが、ちょっとこんな仕組みも考えています。
これは、私が実務で独自DBを作成した際に用いたワザです。

1.ページ毎に文字コード毎の存在フラグ(文字コードリスト)を設けておく

  例:

  例えばこんなページ内容がこんな文章だった場合…
  -------------------------------------------------------------------------
  !!!FreeStyle Wiki
  FreeStyle WikiはPerlによるWikiクローンです。以下のような特徴があります。
  
  *徹底されたモジュール化により、プラグインによる拡張が容易 
  *Perlで書かれておりDBも使用しないため、CGIが動作する多くのサーバに設置可能 
  *mod_perlでの動作にも対応(3.4.1以降) 
  *全ページ共通のヘッダ、フッタ、サイドバーを表示可能 
  *ファイルの添付やPDFの生成などが可能 
  *tDiaryのテーマを使用可能 
  *簡単なユーザ認証機能を備えている 
  *FreeStyle WikiはGNU GPLライセンスの元で配布、改変が許可されるフリーソフトウェアです。
  
  このサイトではFreeStyleWikiの配布・サポートを行っています。凍結されているページ以外は自由に編集したり新しいページを作ったりしていただいて構いません。
  -------------------------------------------------------------------------

  ↓各文字単位に、出現した文字だけを重複の無いように抽出してDB内に保存

  -------------------------------------------------------------------------
  134ABCDEFGIKLMNOPRSTUWY_、。・ーあいうえおかがくこさしすせただってでどなにのはまめもやよりるれをんァアイウェクグサザジスセソタダッテトドバフプヘペポマモュユラリルロン以易応下化可改外拡簡機許共結元構行降作使示自集書証新成生設全多対単置張徴通底徹添凍動特認能配備表付布変編由容用
  -------------------------------------------------------------------------
  ※記号は削除してます。半角英時は大文字に統一してます。

2.検索の際、検索キー文字列の全ての文字が、「1.」で作成した文字コードリ
  スト内に存在するかどうかを事前にチェックしてから検索を開始する。

  例1:

  文字列を「プラグイン」を検索する場合…
  各文字が文字コードリスト内にあるか否かをます検索。
  -----------
  イ→○
  グ→○
  プ→○
  ラ→○
  ン→○
  -----------
  この場合有るので検索対象。
  多分ですけど、文字コード順にソートして並べておけば、
  「m/イ.*グ.*プ.*ラ.*ン/」という正規表現を生成して検索でもいいのかも…。

  例2:

  「アップデート」を検索する場合…
  各文字が文字コードリスト内にあるか否かをまず検索。
  -----------
  ー→○
  ア→○
  ッ→○
  デ→×
  ト→○
  プ→○
  -----------
  この場合存在しない文字があるので検索対象外。

このアルゴリズムでは、テキストサイズが大きければ大きいほど効果を発揮し
ます。
1ファイル辺り数十Kbyteのファイル群、数万ファイルでの計測した時の結果
ですが、検索速度が数〜十倍速くなった記憶があります。
ただ、FSWikiのそれとはテキストサイズが異なりますので、あまり参考になら
ないかもしれませんが…。

感触としてはいかがでしょうか?




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