![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@kumagi_bot snapshotがある間は、mergeされちゃった古いファイルも消されずに残ってる感じだと思うんだけど、snapshot対象のファイルをどこで保護しているのかがわからずうごごごご。
2011-05-18 00:26:28![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@repeatedly うーん、BytewiseComparatorだけですか…。その内部だとSlice::compareを使ってるみたいで、中身は結局memcmpに見えますね…。完全に文字列の大小比較とみていいんでしょうか…?
2011-05-18 00:29:03![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
あーsequence numberというのがリビジョンみたいな感じになってて、smallestなものだけを持っておけば、それより小さいエントリーは削除できるということか。
2011-05-18 00:29:33![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
ぬー。ファイルを丸ごとdropするんじゃなくてまだ参照可能なエントリをスナップショットに影響を与えないように削除するのはどうやってんだ。
2011-05-18 00:31:08![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
refsとかあるから,Versionの参照カウントが0にならない限り削除はされない気がするけどどうなんだろう? #leveldb
2011-05-18 00:32:14![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@nobu_k LevelDBって毎回ディスクに書き込んでるわけじゃなさそうなんですけれどファイルの寿命を保証するだけでスナップショットと読んでいいんですか…?メモリ(SkipList)も守らないといけなさそうな気が…
2011-05-18 00:32:16![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@kumagi_bot the default ordering function for key, which orders bytes lexicographically
2011-05-18 00:33:01![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
LevelDBはつまんで読んでるせいか,書き込みとかフラッシュとか削除まわりにどれだけ関わってるのか把握し出来てないから,トップダウンで読まないとやばい.
2011-05-18 00:34:26![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
@kumagi_bot そう、今そこでちょっと良くわからなくなって見てるとこです。MemTableに対する更新と、要素の削除にどう対応してるのか。。。
2011-05-18 00:34:30![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
SkipListからの削除はできないけれど、そのSkipListを用いたクラスであるmemtableには削除がある。enum ValueTypeが0ならvalue, 1ならdelete。でもスイッチングしてるというよりは1bit目に居れた状態のまま書き込んでるっぽい
2011-05-18 00:47:33![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
LevelDBのキーはソート済み,ということを満たすためのものだし,BytewiseComparatorでもデフォルトは問題なさそう.
2011-05-18 00:51:57![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
FileMetaDataはグローバルにnewされているから,これの参照カウントをとりあえず監視していれば,必要であるかどうかは分かるのか.しかしFileMetaDataには範囲しかないけど,これつかってSkipListから自分が判定できるのか?
2011-05-18 00:55:07![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
おーかっこいい。普通にIterator作るときも、「現在の状態のスナップショットをイテレートする」という考え方なのか。イテレート中にタイミングよく削除くんな!って祈らなくて良いのは心臓に優しい。
2011-05-18 00:58:57![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
だいたいさっき妄想してたので合ってそうだけどちょっと今度はキー周りの扱いが良くわからなくなってきたので明日資料作りの現実逃避に少し読むか−。
2011-05-18 01:03:17![](https://tgfile.tg-static.com/static/web/img/placeholder.gif)
ああああああああああああああ把握w <key><sequence><type><value>みたいになってんのか。sequenceとtypeはどっちが先に来てるのか知らんけどw 指定されたsequence number以下の最新のやつを見ればいい訳ね。
2011-05-18 01:14:24