[groonga-dev,00066] grn_obj_set_value()でのoldvalueの取得

Back to archive index

Kouhei Sutou kou****@clear*****
2009年 5月 10日 (日) 19:26:15 JST


須藤です。

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 メーリングリストの案内
Back to archive index