kumofs のストレージ API についてまとめてみました。
http://d.hatena.ne.jp/tmtms/20100530/1275215591
iterator_release_key と iterator_release_val については何をやってるのか
良く分かりませんでした… orz
それ以外のところも嘘書いてあるかもしれませんが、せっかく調べたので公開
してみました。
--
とみたまさひろ <to...@tmtm.org>
3469 42CC 4D32 F53C AD98 65A5 8C37 FF09 69C1 6040
> kumofs のストレージ API についてまとめてみました。
> http://d.hatena.ne.jp/tmtms/20100530/1275215591
ブログ拝見しました。すばらしい!!
内容はとても正確です。一部だけ補足します:
・iterator_release_key
これはメモリ管理に関する関数です。キーのメモリを管理する権限を、イテレータオブジェクト(iterator_data)からmsgpack_zoneに移動させます。つまり、この関数が呼ばれなければイテレータオブジェクトはキーを解放しなければなりませんが、呼ばれたら解放してはいけません。代わりにmsgpack_zoneに解放させます。msgpack_zoneに解放させる方法はgetと同じで、msgpack_zone_push_finalizerを使って登録します。
・iterator_release_val
iterator_release_keyと同じで、キーではなくて値です。
ストレージを実装する上でのポイントは、どの関数も並行して(マルチスレッドで)呼ばれる点です。そこがkumofs(+Tokyo Cabinet)の速さ(並列性の高さ)のポイントでもあるのですが、実装は結構大変かもしれません。
何かご質問があれば、ぜひ気軽にポストしてください。
--
筑波大学 システム情報工学研究科
古橋 貞之
frs...@users.sourceforge.jp
http://d.hatena.ne.jp/viver/
On Wed, 2 Jun 2010 03:31:16 +0900
FURUHASHI Sadayuki <frs...@gmail.com> wrote:
> 内容はとても正確です。一部だけ補足します:
>
> ・iterator_release_key
> これはメモリ管理に関する関数です。キーのメモリを管理する権限を、イテ
> レータオブジェクト(iterator_data)からmsgpack_zoneに移動させます。つ
> まり、この関数が呼ばれなければイテレータオブジェクトはキーを解放しな
> ければなりませんが、呼ばれたら解放してはいけません。代わりに
> msgpack_zoneに解放させます。msgpack_zoneに解放させる方法はgetと同じで、
> msgpack_zone_push_finalizerを使って登録します。
> ・iterator_release_val
> iterator_release_keyと同じで、キーではなくて値です。
ありがとうございます。
なんとなくそんな感じなのかな…とは思っていたのですが、いまいち確証が持
てませんでした。
kumofs-0.4.5 のソースで、この iterator_release_{key,val} を使用している
箇所を探してみたのですが、Storate::iterator::release_{key,val} から呼ん
でいることはわかったのですが、Storate::iterator::release_{key,val} を呼
んでいるところが見つかりませんでした。実際には使用されていないのでしょ
うか。
# それか単に私が見落としているだけなのかも…