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:
Post a Comment