検索速度の改善他2006年09月20日 02時33分49秒

以下の修正を行いました。

1. 様々な箇所で、nmz_free_hlist() によるメモリ解放を行いました。
2. nmzchkw.pl を contrib に入れました。
3. nmz/hlist.c(nmz_do_date_processing) パフォーマンスの向上をはかりました。

3 については、過去において gcnmz をあまり実行していない場合に、検索の速度が落ちる事例が何件が報告されていました。

調べてみると、nmz_do_date_processing ではヒットした文書の date をチェックし、削除文書の場合はヒットリストの配列を詰める(コピー)という処理がありました。この処理が二重ループとなっており、最悪のケースでは(n - 1)! 回コピーします。
これを最悪のケースでも n - 1 回のコピーとなるよう一重ループで処理するようにしました。

デフォルトでは MaxHit が 10000 ですから、n の最大値は 10000 であり、条件がそろえばかなりの回数コピーを行うことなっていました。

gcnmz を実行しないで mknmz を繰り返していると、文書の更新率が高い場合には、削除文書が全体を占める割合が高くなります。
その場合にはかなりの回数コピーを行う可能性がありました。

今回の修正で、「gcnmz をあまり実行していない場合に、検索の速度が落ちる」という症状が全て改善するかどうかはわかりませんが、かなり有効だろうと思います。
興味のある方は試してみてください。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://namazu.asablo.jp/blog/2006/09/20/530871/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。