データベース管理システム

最弱なデータベース管理システムを考えてみた。これは逆にいえば、もっとも簡単に実装できるシステムとも言える。考えたのは、次のAPIで提供されるシステムだ。DBサーバのような専門プロセスはなく、呼び出すユーザプロセスで動く。ユーザの資源を消費するのがまず問題かな。

DB_t* create_db( char* dbfile_path );
DB_t* open_db( char* dbfile_path );
int close_db( DB_t* dbp );
int insert( DB_t* dbp, char* data, int datalen );
int fetch( DB_t* dbp, char** data, int* datalen );
int seek( DB_t* dbp, int jump );

まず、create_db() でDBファイルを初期化する。この直後から、insert() などの操作ができる。2回目からは、open_db() でDBファイルをオープンすれば、insert() などの操作ができる。close_db() はAPI内部でメモリを確保しているので、後片付けのタイミングを与えるのに必要と考えた。

insert() でデータを入力する。データは可変長でOKにした。続いて、fetch() でデータを参照する。fetch() はDBファイルの先頭データから順番に見ていくことにする。今どの位置のデータを参照しているかという情報は、メモリ上の DB_t で管理される。悩んだが、seek() というAPIを追加した。seek() は fetch() データの位置を変更する。jump 引数は、現在位置からの相対位置をプラスまたはマイナスいくらか、で指定することにしよう。

ここには、データを削除するAPIがない。削除を許すと、DBファイルの内部形式が複雑になると考えてやめた。いらないデータは無視するなど、ユーザ側で対応してもらおう。どうしても削除したいなら、新たなDBファイルを作成して、ここに残すデータだけ insert() していき、古いDBファイルは削除する。ここら辺に、このシステムの最弱っぷりが出てる。まあ、DBファイルは簡単に作れるので、大いに利用してほしいところだ。

さて、次の問題はこのシステムから、機能の拡張を図っていき、立派なシステムに育てていけるかどうかかな。(正直無理そう...)

その他、最弱なOS、最弱なプログラム言語を考えて、その中で自己充足的な、より大きなシステムを考えてみようっと。