SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?


まあ、永遠に繰り返される話題なのだが、なぜいつまでもO/R Mappingが評価されないのか、という話は実は難しいようで簡単である。もう何をおいてもインピーダンスミスマッチ、これに尽きるから。もちろんミスマッチの内容は難しいが。

SQL屋が頑迷なのでも、言語屋さんが稚拙なのでもなく、Object指向プログラミングモデルとRelational理論、この2つの概念は致命的に相性が悪い。それを組み合わせようとするのが無謀なのは当然なのである。上記のスライドは、言い方を変えれば「SQLの言語実装は糞なんですよ。Object屋の概念で書きたいんですよ。わかってくださいよ」という意味である。もう一方の「Object屋さんはSQLの真髄をわかっていない。こんなのじゃダメだ」という話は

SQLに依存することの危険性 ー 単体DBサーバでは終わらない時代の考え方


で取り扱ったことがある。

そしてO/R Mappingが虐げられるのも簡単で、SQLはすでに実装があるから。インターフェースとしてつながらないものをつなげようとして非難を浴びるという最悪のケースである。

SQL is obsolete.


という文章にその点はまとめたことがある。RDBMSを叩いて最適なパフォーマンスを出すためには、物理構造を読み込んだ上で論理構造しか記述できないSQL文を書かなければいけない、という問題がひとつ。性能が出ないわけではないが、プログラム側が相当頑張らない限り手でSQLを書くよりはるかに効率の悪いSQLしか保証できない。いきおい、性能保証のしやすい単純なSQLしか発行できないフレームワークが出来上がるわけだ。もちろん、ノウハウの蓄積でそれを補える可能性は今でもあるが、十分に複雑で高速なSQLに、しかも多数のDBに対応してマッピングできるフレームワークは今に至るまで皆無である。誰のせいか、というともはや誰のせいでもない。もう設計概念が違う時点でダメなのである。

さてそこで「ところで最近のRDBMSは十分に性能も出るし、そんなに躍起にならなくてもいいのではないか?」という疑問が出るが、それは残念ながらむしろO/R Mappingを否定する方向に働く。ひとつは、十分に高性能化する以上に高い性能を求められている、ということ。もはやWebの最前線ではスループットで数万tpsを求められている現状、無駄に出来る部分などどこにもない。それどころが、SQL自体ののんきにパースしてからプラン組むみたいな構造すらボトルネックになりうる。

そしてそうこうするうちに、やれMongoDBだのHadoopだのが現れ、ついにRDBMSが時代遅れになってしまう時代がやってきた。VoltDBのように文法としてSQLを残す、あるいはSQLライクな言語を残す実装はもちろんある。しかしそういう状態でも、もうRDBMSの構造ではすべてのニーズに対応することはできない。OLAPではカラム指向DBに惨敗し、OLTPではNoSQLの後塵を拝す。そんな状況で、果たしていつまでも最先端のフロントエンドがRDBMSなどというレガシーを使う必要があるの?実際に最先端(ただし、未来なのか斜め上なのかはまだ何とも言えないが)MeteorはMongoDBがデフォルトである。

L.star自身O/R Mappingツールは公開こそされてないけど書いたこともあるし、読んだことも頻繁にあるし、SQLについてはそれなりに頑張ってもいたので、この件については素人ではない。その上で言わせてもらうと、この2つを組み合わせることは無謀である。もちろん、その無謀な試みが何度も繰り返されたことも知っているし、それが一定の成果を上げたことも分かっている。それはとても素晴らしいことだと思うし、褒め言葉として「君は本当に馬鹿だな」と言いたい。そしてその我々が誇るべき馬鹿な試みも、One Size Does Fit Allの時代が続けば、ついには回答を見出しえたかもしれないのだが。

これからのO/R Mappingの進む道は、結局のところオブジェクト指向側の勝利が確定することからスタートするだろう。それはつまり使う側のインターフェースが第一になるという、当たり前の結論だ。そして、Relationalな部分は、過酷な性能競争の末他の性能特化型DBに敗れ、結局Object指向と親和性がほどほどに高いDBが生き残るだろう。そしてRDBMSはレガシーとなる。それがいつか、というとまだまだ難しいところがあるが、もう10年は切っているだろうなと肌で感じる。もちろんRDBMSが本当の死ぬのにはもっと時間が掛かるだろう。しかし、O/R Mappingは、その無茶な仕様を克服できるほどの成果をあげられず、もっと楽に実装できる次世代に追い抜かされるという意味では、結果論として不毛な試みだったのだろうな、と思う。