LevelDBを読む人たち

C++0xをしっかり使ったコードで勉強になります
38
前へ 1 ・・ 4 5 次へ
Nobuyuki Kubota @nobu_k

@kumagi_bot snapshotがある間は、mergeされちゃった古いファイルも消されずに残ってる感じだと思うんだけど、snapshot対象のファイルをどこで保護しているのかがわからずうごごごご。

2011-05-18 00:26:28
kumagi @kumagi_bot

@repeatedly うーん、BytewiseComparatorだけですか…。その内部だとSlice::compareを使ってるみたいで、中身は結局memcmpに見えますね…。完全に文字列の大小比較とみていいんでしょうか…?

2011-05-18 00:29:03
Nobuyuki Kubota @nobu_k

あーsequence numberというのがリビジョンみたいな感じになってて、smallestなものだけを持っておけば、それより小さいエントリーは削除できるということか。

2011-05-18 00:29:33
SKS rep @repeatedly

snapshotでファイルにアクセスするのはVersion内のfiles_を使ってでは? #leveldb

2011-05-18 00:31:04
Nobuyuki Kubota @nobu_k

ぬー。ファイルを丸ごとdropするんじゃなくてまだ参照可能なエントリをスナップショットに影響を与えないように削除するのはどうやってんだ。

2011-05-18 00:31:08
SKS rep @repeatedly

refsとかあるから,Versionの参照カウントが0にならない限り削除はされない気がするけどどうなんだろう? #leveldb

2011-05-18 00:32:14
kumagi @kumagi_bot

@nobu_k LevelDBって毎回ディスクに書き込んでるわけじゃなさそうなんですけれどファイルの寿命を保証するだけでスナップショットと読んでいいんですか…?メモリ(SkipList)も守らないといけなさそうな気が…

2011-05-18 00:32:16
SKS rep @repeatedly

@kumagi_bot the default ordering function for key, which orders bytes lexicographically

2011-05-18 00:33:01
SKS rep @repeatedly

LevelDBはつまんで読んでるせいか,書き込みとかフラッシュとか削除まわりにどれだけ関わってるのか把握し出来てないから,トップダウンで読まないとやばい.

2011-05-18 00:34:26
Nobuyuki Kubota @nobu_k

@kumagi_bot そう、今そこでちょっと良くわからなくなって見てるとこです。MemTableに対する更新と、要素の削除にどう対応してるのか。。。

2011-05-18 00:34:30
Nobuyuki Kubota @nobu_k

@repeatedly データ構造は削除が鬼門!かんがえたくないでござる

2011-05-18 00:35:26
SKS rep @repeatedly

FileMetaDataにもrefsがあるのか.cleanup_mem_はデストラクタでしかdeleteされないのか

2011-05-18 00:37:41
SKS rep @repeatedly

ふーむ.リソースは基本参照カウントか.全体はenvが管理してるのかいな

2011-05-18 00:41:34
kumagi @kumagi_bot

Log Structruired Merge TreeについてピーFIの人たちに聞かなくては。

2011-05-18 00:42:02
kumagi @kumagi_bot

SkipListからの削除はできないけれど、そのSkipListを用いたクラスであるmemtableには削除がある。enum ValueTypeが0ならvalue, 1ならdelete。でもスイッチングしてるというよりは1bit目に居れた状態のまま書き込んでるっぽい

2011-05-18 00:47:33
Nobuyuki Kubota @nobu_k

いろいろ学べることが多いと思うので木曜以降にみんなでコードリーディングするか

2011-05-18 00:51:08
SKS rep @repeatedly

LevelDBのキーはソート済み,ということを満たすためのものだし,BytewiseComparatorでもデフォルトは問題なさそう.

2011-05-18 00:51:57
SKS rep @repeatedly

FileMetaDataはグローバルにnewされているから,これの参照カウントをとりあえず監視していれば,必要であるかどうかは分かるのか.しかしFileMetaDataには範囲しかないけど,これつかってSkipListから自分が判定できるのか?

2011-05-18 00:55:07
Nobuyuki Kubota @nobu_k

結局イテレータに返ってきた!

2011-05-18 00:55:08
Nobuyuki Kubota @nobu_k

なんかドキュメントに書いてあるのを鵜呑みにしてたけど、どうやって使うんだこれ。

2011-05-18 00:53:20
SKS rep @repeatedly

気になる所だけ読むのはやっぱり無理ぽ.とりあえず後にしよう.

2011-05-18 00:58:42
Nobuyuki Kubota @nobu_k

おーかっこいい。普通にIterator作るときも、「現在の状態のスナップショットをイテレートする」という考え方なのか。イテレート中にタイミングよく削除くんな!って祈らなくて良いのは心臓に優しい。

2011-05-18 00:58:57
Nobuyuki Kubota @nobu_k

だいたいさっき妄想してたので合ってそうだけどちょっと今度はキー周りの扱いが良くわからなくなってきたので明日資料作りの現実逃避に少し読むか−。

2011-05-18 01:03:17
Nobuyuki Kubota @nobu_k

ああああああああああああああ把握w <key><sequence><type><value>みたいになってんのか。sequenceとtypeはどっちが先に来てるのか知らんけどw 指定されたsequence number以下の最新のやつを見ればいい訳ね。

2011-05-18 01:14:24
前へ 1 ・・ 4 5 次へ