mox692 のブログ

妄想の書き留め場所.

ファイルシステムも単なるkey-valueストアにすぎない

最近この本をちまちま読んでいる.

www.oreilly.co.jp

databse internalsって本の邦訳なんだけど、これの前半がストレージエンジン*1の仕組みで使われているアルゴリズムの話になっている. どのようにストレージデバイスにデータを格納すれば読み出しや書き込み性能に優れたストレージにできるのか? という議論に対する、先人たちの知恵の集結本みたいな感じがして、書籍の内容自体はとても面白い. (後半は分散システムの話になってるんだけど、そこはまだ読めていない)

ところで、「ストレージに効率よくデータを格納したい」みたいなケースはプログラミングをしている中でよく起きるするケースなのでは?って思った. ざっと思いつくのだと

  • mallocによるメモリ管理 (空いてるheap領域にいかに効率よくデータを配置していけばいいか?)
  • ファイルシステム

あたり? 例えばファイルシステムとかは結構この本の考え方が通じる部分がありそう.
てかそもそもデータベースとファイルシステムの違いは?と言われるとうまく答えられない気もしてきた. データの取得の仕方が違ったり(sqlかファイルpathか)みたいなのはあるけど、「ストレージデバイスに効率よくデータを保管してくれるソフトウェア」という点に関しては同じようなものとして見れる気がする.

ファイルシステム」ってワードってなんだか仰々しい感じがするけど、実際ファイルシステムがやってることって、「ファイル名」を指定してその実態(がある場所)を返すってのが主な仕事なんだなーって一旦理解してる.

そこまで単純化して考えてみると、実はファイルシステムって、プログラマなら頻繁にお世話になるkey-valueストア的なデータ構造の延長として考えられるのでは?

ただのkey-valueストアだって捉えたらなんか一気に敷居が下がった気がしたから簡易的なファイルシステム的なものを自作してみても面白い、かも. *2 せっかく詳解データベースを読んで、効率よくデータを格納する技術に関して少し詳しくなれた気持ちになってるので記憶があせないうちにちょっと構想を考えてみようかしら. *3

*1:データベースにおけるストレージエンジンとはなんたるやに関しては、ここのblogの図が分かりやすかった

*2: ナイーブに考えていけば、そのうち "blockに分けた方が効率がいい"とか、"inodeみたいなメタデータだけを管理するデータ構造にした方がいい" みたいな現在使われている主要なファイルシステムの便利さがわかってくるのだろうと思う.

*3:データを効率よく保存する技術という点に関しては、データ指向アプリケーションデザインという書籍も気になっている.

/* -----codeの行番号----- */