パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

全文検索エンジン:Rast」記事へのコメント

  • by Yappo (5920) on 2005年05月30日 19時12分 (#743342) 日記
    C APIならrast_db_openのsync_threshold_charsの数値を変更することによって
    パフォーマンスを上げる事が出来ます。(メモリ食いますが・・・)

    Rast.pmなら

    my $rast = Rast->open('/db', RAST_DB_RDWR, {sync_threshold_chars => 1000000});

    等のように書けます。

    他にもrast_merger_tを利用する事を前提としてindexを複数に分けるのも手です。
    問題は検索時間が気になるのと、Rast.pmで実装されてない事でしょうか。
    • アドバイスありがとうございます。sync_threshold_charsをデフォルトの10倍である100万にしたところ、index作成にかかる時間がほぼリニアに8分の1になりました。数が増えてくると、どんどん時間が延びるのは変わらないのですが、前のアリエナイ時間ではなく、なんとか初期作成だけ我慢して、がんばって一晩回すことができそうな時間になりました。あとで、更新したベンチマーク結果の日記を書きます。

      index時間削減のために一定数のエントリごとにローカルなDBをつくって、rast_merger_tを使ってしまうと、結局、文書数に対してO(n)な検索性能になってしまうので、激しく躊躇します。かなりのオーバーヘッドがありますし、index管理の複雑度も劇的にアップするので、index作成時間の短縮よりも、統合不可な複数のリモートDBを扱う場面こそがrast_merger_tの活躍の場ですね。
      親コメント
      • 上のコメントを書きつつ、数十万エントリをindexする作業を実施してたんですが、一定のエントリ数を越えるとindex作成のスピードがガタっと落ちる感じです。sync_threshold_charsが100万でだいたい8万エントリを越えたあたりから、syncにかかる時間(?)が急激に延びた印象です。現在10万エントリ弱で320MBのメモリを食べていて、indexのサイズが433MBです。もしかして、indexの物理サイズが絡んでいるのかもしれません。詳しくは検証しませんが、とりあえず手元のテストDBに入ってる16万の日記エントリのindexを終わらせてみます。
        親コメント

私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson

処理中...