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

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

  • 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を利用す

    • アドバイスありがとうございます。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を終わらせてみます。
        親コメント

物事のやり方は一つではない -- Perlな人

処理中...