2011年6月27日

[Namazu-devel-ja 1812] Re:大量ファイルでのmknmzのメモリ不足について

青柳です。

On Sun, 26 Jun 2011 17:04:18 +0900
Tasamasa Teranishi <yw3t-trns@xxxxx> wrote:

> 出来上がったインデックスファイルの中身は、Namazu の仕様の
> インデックスとは異なっているかと思います。
>

> 影響範囲がどの程度かは予測するのは難しいのですが、このルールで
> ソートしないと文書IDの振り方が変わってしまうので、想定している
> 順の文書IDにはならず、そのインデックスを使って検索した結果は、
> 検索結果の表示順(モードにもよりますが)に違いが生じたりはする
> でしょう。
> (検索結果のソートで、キーの値が同じ時は文書ID順で表示される
> ので、その場合、ファイル名に番号が付いているものの表示順番が
> 変わるものと思われます。)
>
> また、複数のインデックスをマージ等する時にもソートされている
> ことを前提で処理を行っていたかと思いますので、何らかの問題が
> 出ても不思議ではありません。

なるほど。ソートは必要な処理なのですね。


> このソートを行わないというよりは、ソート時の消費メモリを
> 減らすようなルーチンに書き換えることをおすすめします。
> # 工夫すれば書き換えできそうですし。

ワーク配列の作成とソートを分けて行うようにしたことで、以下のように
使用メモリを減らすことが出来ました。

* mknmz
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
aoyagi 2948 91.0 61.2 358404 313096 1 S+ 2:01PM 0:38.78 /usr/bin/perl5 -

* mknmz.fewmem2
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
aoyagi 2952 100.0 56.7 319492 289884 1 S+ 2:02PM 0:37.90 /usr/bin/perl5 -

*** mknmz 2011-06-27 13:57:50.000000000 +0000
--- mknmz.fewmem2 2011-06-27 13:59:16.000000000 +0000
***************
*** 1457,1466 ****
@flist = grep {$mark{$_}++; $mark{$_} == 1} @flist;

# Sort file names with consideration for numbers.
! @flist = map { $_->[0] }
! sort { $a->[1] cmp $b->[1] }
! map { my $tmp = $_; $tmp =~ s/(\d+)/sprintf("%08d", $1)/ge;
[ $_, $tmp ] } @flist;

my $elapsed = time() - $start ;
$elapsed += 1 ; # to round up and avoid 0
--- 1457,1466 ----
@flist = grep {$mark{$_}++; $mark{$_} == 1} @flist;

# Sort file names with consideration for numbers.
! @flist = map { my $tmp = $_; $tmp =~ s/(\d+)/sprintf("%08d", $1)/ge;
[ $_, $tmp ] } @flist;
+ @flist = map { $_->[0] }
+ sort { $a->[1] cmp $b->[1] } @flist;

my $elapsed = time() - $start ;
$elapsed += 1 ; # to round up and avoid 0
--
Shigekazu Aoyagi <aoyagi@xxxxx>

_______________________________________________
Namazu-devel-ja mailing list
Namazu-devel-ja@xxxxx
http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-devel-ja


投稿者 xml-rpc : 2011年6月27日 14:08
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105049
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。