Saturday, 31 May 2014

Mongo DB source code

いつもの修士の授業でのソースコード読み会です。

予行演習に MeCab と Mercurial を読もうとしたんですが、あまりうまく読めなかった。MeCab は大分あれなC++。Mercurial は Python ですが、なかなか repository に行きつけなくて。

Mongo DB は学生に準備を頼んだら、

lldb + vim

で読もうと。え〜、それでも別にいいけど、もう少し工夫しない? ってことで、

Eclisep に C++ plug in

を入れて。Eclispe から gdb 経由で attach できるらしい。よしよし。

でも、テレビが 4K なので、

小さくて見えない Eclipse のfontを大きくする

ってのが Preference からだと Editor のしかできなくて。Package Explore のfontを大きくするのは、css ファイルの変更とかいろいろやる必要があるらしい。

とかいいながら、なんとか設定出来ました。で、これを

TreeVNC で Retina に配信

と。おぉぉ、それになりに快適。なんだが、1時間に一回フリーズするみたいな。うう、なんだろうなぁ。

* * * *

Mongdo DB は、ポインタが

void *

え? まさか逆エンジニア避け? とか思ったが、DBの中は、割と普通のC++でした。

boost 使いまくり
smart pointer 使いまくり

だけど、まぁ、こんなものだろう。thread pool とかも使ってないし、標準的な書き方かな。要するに

BSON を hash に入れてるだけ

ね。でも、今日は insert の途中まででした。

lock は RWrwX のレベルがあるらしい。お疲れ様です。この辺りは、Posix thread 自体が持つべき機能だと思うけど。

笑えたのは、BSONのheaderの最初にある長さをチェクするところで、

if (len == 542393671 )

ってコードがあったこと。これは16進だと、

20544547

つまり、

<sp>TEG

Mongo DBのportに browserからアクセスが行くと、長さに "GET " が入るので、それをチェックしてるわけね。はいはい。

明日も10時から頑張ります。

No comments: