Q4M のディスクベースのコードが動き出した

結局、先頭行からの単方向リストにした (+お尻の位置をヘッダに書く)。なので、

・行の消費は 1 write + 1 sync
・行の追加は 2 * (1 write + 1 sync)

どうせ C/S で運用するんだし、ソケット通信のオーバーヘッドがある以上 mmap とかがんばらなくてもいいよねってことで File I/O +一部キャッシングで行くことに。SYNC しないモードも用意はするつもりです。

行の追加で、行の中身を書くのとお尻の位置をヘッダに書くの、ファイルサイズを無駄にでかくしておいたらディスク1回転の間に2回 fdatasync が呼べてウマーとかあったりするのかなぁ。

あと、追記については INSERT ... VALUES (..),(..),(..) のような複数行の追加の場合に一括で write, sync できるような API が、きっと (MySQL の Pluggable Storage Engine API に) あるだろうから、もっと最適化できるものと期待。

リリースまでに必要になる機能は、この他にコンパクションの対応と blob とかにも対応した行の読み書きだけだと思う... んだけど、今日は Pathtraq のサーバのお引越なのでたぶんできないorz