データにもOSI参照モデルがある

計算機の通信機能(プロトコル)には階層があって、OSI参照モデルだとかDARPAモデルだとかが知られている。有名なものものとして、物理層イーサネット、ネットワーク・トランスポート層TCP/IP、アプリケーション層にはHTTPが挙げられる。イーサネットの上にTCP/IPが乗っていて、TCP/IPの上にHTTPが乗っているという具合だ。最近だとHTTPの上にさらにAPIを乗っけたりしていて階層が増えていっていますね。

さて、データというかストレージの運用とか最近興味が出てきて色々考えているのだけれど、ふと思ったこと――ストレージにもOSI参照モデルのような階層構造があるということだ。既に名前がついているとは思うけれど、不勉強なため知らないので私の言葉でメモしておく。上から順に、

  • セマンティクス層
  • シンタックス
  • ウツワ層
  • 接続層2
  • ハコ層
  • 接続層
  • タマ層

です。

最下位はSSDとかHDDとかの物理的なディスクだ。*1俗にタマとかいうやつだ。*2東芝とかサムスンとかシーゲートが戦っている層である。磁気テープもここに入る。この層は栄枯盛衰が激しいことがよく知られていて、『イノベーションのジレンマ』という非常に有名な本で研究対象にされている。

その上にSASとかSATAといったディスクとの接続の層がくる。接続層とします。ディスクとの接続には通信のOSI参照モデルとほとんど同じ階層構造がある。線とコネクタの規格、SCSIといったプロトコルである。今回はそういう分け方とは切り口が異なるので1つにまとめておく。この層は規格が固定化してしまっている印象だ。でないとわざわざフラッシュメモリをHDDに見せかけたSSDなんてつくる必要がない。敢えてこの層を入れる必要はないのだけれど個人的に好きなので挟んでおく。

さらにその上にストレージ装置の層がある。俗にハコと呼ばれる。業務用の外付けディスクはストレージと呼ばれて、様々なベンダーがごった返している。EMCとか日立とかが有名なプレイヤーである。この層は古参が生き残っているが、謎のベンチャーも大量にいる。古参はベンチャーを買収していって新陳代謝をしている感じで、古参メーカーの商品に変な名前のがあったら大体それは買収したベンチャー企業のブランド名だったりする。最近ではSoftware Defined Storage*3なんてのがあって、私の理解ではSoftware Defined Storageはこの層のものをハコでなくてコードにしようという考えだと理解している。

外付けディスクの場合はハコ層の上にもう一回ディスクとの接続の層が来ます。内蔵ディスクの場合はハコ層と2層目のディスクとの接続の層は外してよい。層を減らせるならその方がいいのではと思うが実はそんなことはなくて、層を追加することで便利なことがあるからストレージ装置なんてものが売られている。サーバーの寿命とデータの寿命は全然違っていて、データの寿命のほうが圧倒的に長い。パソコンを買い換えるときにいちいちデータを移すの面倒じゃないですか。外付けディスクだとそういうことをしなくていいから良い。

ここまで重ねてやっとサーバー・パソコンにたどりついた。次はOS以上の層に入る。OSの層もいくつかに分かれているが面倒なので1個にまとめる。ユーザーもしくはアプリから見えるのはファイルシステムです。ext4とかxfsとかNTFSとか。OracleとかMySQLとかPostgreといったデータベースも同じ層に入れちゃっていい気がします。いい言葉がないが便宜上ウツワ層とでも呼んでおきます。この層以下ではデータはただの巨大なバイト配列でしたが、この層以上からデータは何かしらのデータ構造というものを持つようになります。ファイルシステムの場合は階層構造を持ちますし、RDBの場合は関係モデルのデータ構造を持ちます。ファイルシステムの階層構造やデータベースの関係モデルを発明した人は本当に偉大だ。ウツワ層のデータ構造はもう大体決まっていて、差別化ポイントは冗長構成ができるとか増分バックアップがとれるとかインターフェイス以外の運用性の部分になる。しかし、完全にインターフェイスが枯れたわけではなくて、インターネットスケールのデータを扱えるようなデータ構造を持てるものも最近は乱立しています。Key-Valueストアだとかドキュメント型DBだとか。

この層は運用が大変だ。特に量が増えるとかなり運用になってくる。だから運用性を強化するための仕組みがでてきている。今困っている人は大勢いると思うけれど、今の問題は遠からず解決できる気がする。まあその時にはまた運用できる限界まで量が増えるに違いないけれど……。

さらに重ねます。上から2つ目の層はファイルフォーマットやスキーマの層です。シンタックス層と呼びます。一般にデータというとシンタックス層とその上のセマンティクス層を含めたものをいうと思う。今この層は非常に重要ではないかと思っています。なぜならこの層で一旦データを作ったら変えようがないからである。ファイルフォーマットを変えてしまったら上位のセマンティクス層の情報が落ちてしまうからだ*4。MSワードのDOCXファイルをテキスト形式に変えたらドキュメントの構造や装飾が落ちてします。RDBスキーマも一回作ってしまったら、もう変えられない。仮に変えようと思ったら恐ろしく手間がかかる。そのために作る前にきっちり設計をしなければならない。最近ではスキーマ要らずのDBなんてものがあって、柔軟にスキーマを変更できるというのが売りだ。私はそれらを運用の中では使ったことがないが、柔軟に変更していった結果グチャグチャになってしまって収拾がつかなくなるような場合が多そうなことは想像がつく。どっちにしても最初にきっちり決めるものを決める必要がありそうだ。この層はどう頑張っても未来への負債に繋がってしまう。この問題は現状解決のめどが立たないように思える。機械に変更させるにしても、上のセマンティクス層の意味内容が理解できないと無理だ。そんな機械が生まれたら人類は滅びる。

さて、やっと最上位の層に辿り着いた。セマンティクス層は唯一人間が理解できるものである。シンタックス層にあるデータを人間が理解できる形式に変換するソフトウェアは多い。ブラウザもそうだし、PDFリーダも、音楽プレーヤーも全部そうだ。人間にとって価値のあるものはこの層だけだ。この層が最重要なのはいうまでもない。意味内容があるのはこの層のものだけだ。データの価値はこの層が決める。ただ、この層は機械が読みづらいものが多いという問題がある。一方、数値データなんかは人間には見づらいが機械は読みやすい。ただし、数値の意味は機械には分からない。機械と人間のギャップには常々困っている。高級プログラミング言語は機械と人間のギャップを埋めようという試みの産物ではあるが、まだ人間の方の歩み寄りが強い*5。最近は第3次人工知能ブームで機械の方に歩み寄らせようというのが非常に盛んなので、今後セマンティクス層も機械の持ち物になる可能性も高い。

だらだら書いたけれども、特に結論はない。


2016-02-05

フォーマット層・コンテンツ層よりも格好が良いかと思ったので、それぞれシンタックス層・セマンティクス層と変更した。

*1:もちろんそれらを作っている人からしたら、フラッシュメモリの構造とかあるかもしれないがそれを言い出すと物性物理まで行かなければならないので省く

*2:ちなみにCPUはイシである。

*3:この言葉は非常に嫌いです。なぜなら発するだけで馬鹿っぽいからです。なんとなく格好良いから使っているんだろうなと思えたら、私はその人の話を聞くのは辞めて他ごとを考え始める。

*4:情報量を変えないような圧縮なり展開なりは出来ます。BMPPNGに変えたり、RDBの中身をCSVで吐いたり。しかし、可逆圧縮展開のレベルは下位のウツワ層でも対応できる。インラインで圧縮するような機能をもったデータベースも沢山ある。

*5:プログラミング言語シンタックス層に含まれる可能性も高い