[Fswiki-dev] 高速化提案

Back to archive index

あき attin****@kk*****
2007年 8月 9日 (木) 00:37:55 JST


あきです。

> > 最近、表示速度の高速化について真剣に考えています。
> > ある程度目星はつけているのですが、見当違いでないかどうかだけ、確認させ
> > て下さい。
> >
> > 今目をつけているのは lib/Wiki/DefaultStorage.pm の get_page_list です。
> > この中で、data_dir ディレクトリからファイルの一覧を取得しています。
> >
> > これを、ディレクトリ内を見るのではなく、ファイルリストを設定ファイル内
> > に保存しておき、それを参照するような仕組みにしたらどうだろうかと考えて
> > います。
> 
> これはすでに仰るような修正を実施済みです。
> CVS HEADを試してみてください。
> 実際にかなり早くなる場合もあるみたいです。

なるほど…。
3.6.3dev1で対応してるのですね?(笑)
ソース内に _create_page_list_file なるメソッドが…。

> > それからもう一点…、
> > 他に、検索機能に関してですが、ちょっとこんな仕組みも考えています。
> > これは、私が実務で独自DBを作成した際に用いたワザです。
> 
> すでに実績のある全文検索エンジンがありますので
> 可能であればそちらを導入したほうがよいと思いますが、
> レンタルサーバですと設置が難しいケースも多いと
> 思いますのでなにかいい方法があれば実装したいです。
> 
> あきさんの方法では少ない文字数で検索された場合や
> 英文がメインの場合だと逆効果かもしれないと思いました。

実は…そのとおりなんです。(^_^;)
一応代替案はありますが、実際にやってみるか否かは微妙です。
Perlだとメリットないかも…。

一応ご紹介だけ…。
各文字コードをそのリスト化するのではなく、ハッシュ値を求めてリストを
作成しします。

  例えば、文字コードをそのまま使用するのではなく、16で割った値をハッシュ
  値とした場合…(って、こんなハッシュ関数、本当は適当じゃないですが…)

  文字  コード          ハッシュ値
  プ    0xA5D7  ÷16=  0x0A5D
  ラ    0xA5E9  ÷16=  0x0A5E
  グ    0xA5B0  ÷16=  0x0A5B
  イ    0xA5A4  ÷16=  0x0A5A
  ン    0xA5F3  ÷16=  0x0A5F
  ア    0xA5A2  ÷16=  0x0A5A
  ッ    0xA5C3  ÷16=  0x0A5C
  プ    0xA5D7  ÷16=  0x0A5D
  デ    0xA5C7  ÷16=  0x0A5C
  ー    0xA1BC  ÷16=  0x0A1B
  ト    0xA5C8  ÷16=  0x0A5C
        ~~↑~~          ~~↑~~
  そのままだとコレ  ハッシュ化するとコレ

    ↓それぞれ重複を取って数を数えると…

  そのままの時      10種
  ハッシュ化した時   7種

こんな感じで、ハッシュ値の求め方次第でDBサイズを小さくまとめるができま
す。
後は、これらの情報を1文書1ファイルで管理せずに、ページ一覧インデック
スファイルと同様に1ファイルで管理する…などのようにすれば、オーバー
ヘッドもそれなりに小さく抑えられると思います。
まぁ、どれほど効果があるかは微妙ですけど…。

あまり効果ないかな?

後、英文のときかぁ…。
確かに…。
いろいろ問題が多いですね。(^_^;)

> msearchのような単純なやり方でもそれなりに効果があると
> 思いますが、やはり大量データになると厳しいですよね…。

msearch かぁ。
使ったことがないのでよく分らないのですが、どうなんでしょう?
インデックスの更新とか、大変そうな気が…。
インデックスファイルも大きそうですし…。
個人的には外部ツールには頼りたくないなぁ。

やっぱり何とかしたいなぁ。
もう少しいろいろ考えてみます。




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