akon2.00βのよっぱらいの戯言

色しょく是食、食しょく是色 当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

DBMS不要論

ちょっと前にFBで述べたDBMS不要論ですが、現時点のまとめをしておきます。(酒匂さん、野村さん、石橋さん、ありがとう)

発端は、コストは無視できないが、クラウドでオートスケールにした場合、DBMSを持たずに、オンメモリで処理できるかもという疑問から。
もちろん、メモリは無限ではないため、メモリスワップは発生する。また、DBMSは持たないが障害対応のために永続メカニズムは必要である。これはスナップショットとトランザクション単位のジャーナルで対応する。つまり、なんらかの不揮発性記録媒体は利用する。これらは、将来的にはクラウドに任せるとしても、いまは、さすがにクラウドに任せておくには不安がある。Hadoopに展開していたらどうなるかはいまは考えない。

リファレンスアーキテクチャとして、Object Prevalenceパターン(db.Prevalence)であり、リファレンス実装には以下がある。

prevaylerは、インメモリDBに分類されるので、インメモリDBというならばそれは否定しない。
これは、商売として、DBMSは不要と言ってしまうと、ライセンスフィーがもらえなくなることに加えて、ユーザもDBがなくなるという不安があるからとうがったみかたをしている。

DBMSがない場合の懸念点として以下がある(もっと洗い出したい)。
KVSの欠点と同様と考えた(これらを解決すべくインメモリDBが生まれた)
トランザクション管理
排他制御

トランザクション管理については、prevaylerはJavaライブラリであるので、JTAで行える。つまり、実装言語の問題。ロングランニングトランザクションの問題は、本件に限った問題ではない。ジャーナル生成でどこまで耐えられるのかは不明。結果として、トランザクションDBが必要になるかも。いまのところは、変更するものではなく変更そのものを記録すれば、トランザクションオブジェクトの生成は必要ないと考える。

同様に、排他制御についても、ロック処理をプログラム上で、記述する必要がある。ロックについてもっと調べたい(MySQLのロックいいかも)。
ロックしないReThinkDBの考え方は面白いと思う。永続クラス(仮称)配下のインスタンスは、言語仕様として、ロック制御できればいいんじゃないか。永続クラスをMapとして、reduceにつなげるようにして、スケーラブルにしておくと面白いんじゃないかなぁ。

なお、参照されていないオブジェクトはGCの対象となる。つまり、永続化するためには、参照しておく必要がある。クラウドコンピューティングのためのGCを考えた方がよいのかもしれない。

こんなの面倒だから、DBMSを使おうよというのが現実なのかもしれない。まぁ、GLASSが流行らないのもこのあたりなんだろうな。