うん??と思った記事があるんで、ちょっと確認。
ここの話
「クラウドによるIT補完計画」とは
http://slashdot.jp/it/09/07/02/173247.shtml
なんだけど、元ネタは、ここ
もう1つの、DBのかたち、分散Key-Valueストアとは
http://www.atmarkit.co.jp/fjava/rensai4/bigtable01/01.html
ってことで、まあ、元ネタのほうで考えましょうか(以下斜体は上記@ITの記事から引用)
クラウドなどで使われる、分散KVS(Key-Valueストア)というのがある。
で、こいつは、RDBにくらべ、
トランザクションによる「ACID特性」の確保も分散KVSが苦手な分野です。
ってかいてあるけど、つーか、もともと、ACID特性を確保するためにRDBが
出てきたので、そうでなきゃ、ファイルシステムでOK。
ACID特性はつまり、中途半端にデータベースがコミットされることはないってことであり
(たとえば、給与振込みで、会社の残金-給与額と、従業員の残金+給与が同時に
行われるってこと。会社の残金から給与分が減っている=会社的には振り込んだのに、
従業員の給与は増えていない(従業員から見ると振り込まれていない)ということがない)
これを実現するために、トランザクションのコミット、ロールバック、排他制御がしっかり入っている。
現在の事務系アプリにおいて、たとえば、給料を支払ったのに振り込まれてない、なんていうことは
まず許されないから、このACID特性が担保されないっていうのは、超困る。
そこで、事務系アプリにおいては、たいていRDBを使う。
でも、もし、ASID特性を担保しなくてよい場合(データ検索など)では、RDBがある前のシステム、つまり、ファイルシステムでよい。
ファイルシステムは、ファイル名をキーとし、中身をバリューと考えると、すでに、キーバリューの形になっている。そして、ファイルシステムはすでに分散されている。
早い検索を行いたければ、インデックスを作るけど、実は、Linuxなどでは、これはリンクにより
実現できる(同じキーに複数値があることがある場合、ディレクトリがキーになる場合があるけど)
ただ、ファイルシステムでは問題ありありという場合は、XML(XMLDB)というアプローチもある。
ってことで、分散KVS(Key-Valueストア)は、こちらのほうに属する技術だろう・・・
ただ、今のアプリ開発側から見ると、データベース、ファイルの差異をなくすため、DAO(データアクセスオブジェクト=ってか、データアクセス層)を作ってアクセスする
業務アプリ |(入出力) データアクセス層(HashMapの配列などでデータを渡したり、DOMで渡したり) | | | | | RDB プロパティファイル CSV XML 分散KVS??
DBに直接アクセスするのでなく、1回抽象化した層を挟む。
そして、パフォーマンスなどによって、RDBにするか、ファイルにするか、オンメモリにするか(=セッションに入れておくなど)を決める。
※セッションに入れたくても、ロードバランシングで、さまざまなサーバーにデータが飛ぶ場合、セッションに入れられず、分散ファイルに保存するなんてこともある。なので、一概にどれがいいとはいえない。
もし、データアクセス層を作らないと、開発者全員が、アクセス方法を知らないといけなくなり、人月単価が高くなり、ソフト開発競争力がなくなる。そこで、簡単にアクセスできるDAOを作成し、差を吸収する。
ということで、別に分散KVSが出てきたところで、データアクセス層で差を吸収してしまうので、たいした問題でなく、「出来損ないの群体として行き詰まったITシステムを、完全な単体インフラへ人工進化させる」(クラウドによるIT補完計画)というほどのはなしかあ?ってなります。いや、ASID特性をばっちり持った超高速アップデート方式が見つかれば、そっちのほうが、利用価値は高いです。
なので、それを実現する、分散型インメモリ・データグリッド・ソリューションである、Oracle Coherenceのほうが、話的には面白いと思うけどなあ・・・