Sunday, 1 June 2014

MongoDB の続き

insert から読んでいったら、

なんだ、お前は K&R のmallocか?

ってくらいの first fit allocator が、そのまま書いてある。そして、

mmap な領域に書きこんで終わり

という極めてシンプルな実装でした。index も

BTree そのもの

なわけね。でもシンプルな方が良いさ。key の作り方が微妙だったけど。

recovery とかどうなってるのって質問があって repair とかも追ってみたんですが、ほとんどない。まぁ、最近のmemory baseなDBもそんなものなんだけど。

boost とかも使ってあっても少しだけ。iterator をたくさん使って書く。継承はほとんど使わない。そんな感じのC++でした。Pointer tag とかもないのでシンプルな実装だとは言えるかな。

昨日は lock を追うのに苦労しましたが、

複雑な lock 状態はオブジェクトに持たせて、
lock の update を pthread_mux で保護する
待ち合わせは pthread_cond_wait を使う

という方式ですね。RWrwX の五段階か。ということは、

実装自体は普通のRDBとの差はほとんどない

ってことね。古臭いとも言えるかな。MySQL とかの方がキャッシュしまくりだったり、select 戦略の最適化が入っていたりして、DB実装としては優れているんですが、

MySQLのコードの汚さは半端じゃない

からね。Mongo DB は、コメントは最小限という感じ。ソースがしっかりしていれば、必要ないです。

MongoDB の mmap 実装は、まぁ、一つの実装方法ということで、他にもいろいろあり得るし、実装されてもいるのだろうと想像します。

ちょっと早めに終わったけど、金曜日の準備とかもあったから、こんなものかな。Eclipse で C++ を読むのは、それなりに快適でした。

例年、コンパイラの授業で、プログラム言語系は読むので、また、後期に。

No comments: