[groonga-dev,00067] Re: grn_obj_set_value()でのoldvalueの取得

Back to archive index

morit****@razil***** morit****@razil*****
2009年 5月 10日 (日) 23:11:56 JST


森です。

なるほどー。比較的長めの文書データをセットして、
フックで転置索引を更新するようなケースを主に想定して書いてたので、
その辺の考慮が浅かったかも知れないです。

検討してみます。

>>> Kouhei Sutou さんは書きました:
> 須藤です。
> 
> grn_obj_set_value()が少しオーバーヘッドが大きい感じがするの
> ですが、毎回oldvalueを取得するのではなくて、必要な時だけ
> oldvalueを取得するようにしてはどうでしょうか?
> 
> 例えば、GRN_HOOK_SETが設定されている時だけ、とかです。
> 
> 
> 試しに、ハッシュのことだけを考えてみると、
> 現在のgrn_obj_set_value()は
> 
>   (1-1) grn_obj_get_value()で現在値を取得
>         (1回検索)
>   (1-2) 設定しようとしている値と比較して同じだったらreturn
>   (1-3) フックがあったら実行
>   (1-4) 値を設定
>         (1回検索)
> 
> という感じになっています。
> 
> もし、フックがない場合は、
> 
>   (2-1) grn_obj_get_value()で現在値を取得
>         (1回検索)
>   (2-2) 設定しようとしている値と比較して同じだったらreturn
>   (2-3) 値を設定
>         (1回検索)
> 
> となります。
> 
> で、このとき、(2-2)で(-23)の処理を枝刈りしてやるよりも、「同
> じ値でも上書き」しちゃった方が速い気がします。
> 
>   (3-1) 毎回値を設定
>         (1回検索)
> 
> ソースを見ると、ハッシュで値を設定する時は、値を取得してそこ
> にmemcpy()しているので、(2-3)の処理を枝刈りするよりも(2-3)だ
> けやっちゃえば速いんじゃないかなぁ、という感じです。
> 
> 
> 試しに、↑のようにgroongaを変更して、手元でRubyバインディング
> のベンチマークを走らせてみると、RubyのHashと同じくらいまで速
> くなりました。
> 
> 
> まだアイディアだけで、網羅的な計測とか問題があるケースとかを
> 検討したりしていないのですが、もしよかったら少し考慮してもら
> えると嬉しいです。
> 
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
> 
--
morita




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