DBの世界に起こる変革


を見てびっくりするほどがっかりした。DBMSの世界はこれから変革が起こるどころが、もうすでに変革ががんがんに起こっていて、One Size Does Not Fit Allの時代だと言われて久しい。Oracle RDBMSだけの世界とかを見ていると、その変化が見えなくなってしまうことが多いだろう。しかしちょっとRDBMSを離れたら、現在はDBMS戦国時代であり、Oracle社もその有力なプレイヤーの一人である。

とりあえず現状を知りたいと思ったら、以下が非常に参考になる。

NoSQLの現状


50以上のソフトウェアがひしめく市場、これを戦国時代と言わずしてなんだろうか。MongoDBあり、Hadoopあり、KVSあり、NewSQLあり・・・これが21世紀のDBMSの現状だ。

ちなみに先のサイトで話にあった「ジャーナルを書かないRDBMS」というのはつまりLog Structuredなストレージマネージャを採用するという意味だが、かつてRethinkDBが通った道である。

SSD時代になってRDBMSの逆襲はあるか ー ReThinkDBの試みを読み解く


で取り上げたこともある。もっともいつの間にかMemcached互換のシステムになってボルナレフAA略な現在、RethinkDBが本当に通ったのかは知るすべがない。最近のSSDは書き込み性能面で進歩が著しく、実装してみたらロックフリーにしてもそもそも性能面でそれほど有利にならなかったか、完全追記Indexの実装を安定させるのに手間取ったかのどちらかだろう、と推測する。

 

ここ最近に起こったDBMSの変革というのは、ざっというと以下のものがあげられる

  • ディスクI/Oボトルネック神話の崩壊。メモリの増加によるボトルネックの変化とSSDの普及が大きい。RDBMSといえばディスクI/Oがボトルネック、が一般常識とされているが、今となってはそれほど大きな要因ではない。例えばキャッシュヒット率の高いOLTP系システムでは大抵がCPUボトルネックである。読み込み帯域だけなら、ぶっちゃけRAID0+1とかで金さえ積めば買える。その上、SSDはRDBMSが要求するディスクアクセスの中でも最も重要な2つ、ランダムリードと同期ライトの性能を劇的に改善する。FusionIOつかって軽く100倍近い性能改善という話は、決して大げさではない。

  • 厳密にACIDを採用するつもりのないDBの台頭。ACIDは常にDBMSの性能問題の原因であった。厳密にロックさえ取らなければ実は十分に早いのだが、要件がそれを許さなかった。一方で、ユーザーは常に厳密なACIDを求めているわけではない。カジュアルなシステムではここを崩して性能向上というのはけっこうやられてきたわけだ。OODBMSが大して普及しない一方で、KVSが受け入れられたのは、厳密なACIDを捨てる一方でカジュアルに高性能を得られたからだ。

  • カラム指向データベースと圧縮。いくらOLTPだとディスクI/Oがネックではなくなったといっても、数TBのデータを取り扱うようなOLAPシステムでは引き続きシーケンシャルリードが重要なファクターである。そこで出てきたのが圧縮、そして圧縮率向上のためのカラム指向である。そして、圧縮が効率的になればなるほど列指向の旧来型システムとの差異が明らかになった。どうあがいても、圧縮はOLTPと相性が悪いからである。ゆえに、DBMSの世界は分裂を始めているのだ。


とまあ、OSから何から全アーキテクチャが大変革するであろう不揮発性メモリなどという飛び道具を持ち出さなくても、もう変革は大量に起こっているのである。それもこれも、RDBMSのアーキテクチャが限界点に達しているからでもある。

どこから説明しよう。まず列指向DBとしてのRDBMS、つまりISAMからの潮流のタプルストレージとB-Tree indexに依存した世界がひとつ。これは確かに中庸で、OLAPとOLTPの両方に適応できる。しかしOLAPの世界ではディスク圧縮を行なってでもディスクI/Oを使いたい。一方OLTPの世界ではインメモリにしてでもトランザクション性能を高めたい。となると中途半端すぎるのである。

次にプランナを介するクエリ実行。今や時代は実行に1日掛かりそうなクエリから、実行に1msもかからないものまで様々なクエリがある。もちろんOLAP的な部分においては、コストベースで最良のプランを調べる、というのは今でも理にかなっているところがある。一方で10000tpsなどを目指そうものなら、いちいちプランを起こすなんてことはやってられない。

そしてロックだ。ACIDとロックは切っても切れない関係にあるが、RDBMSはACID(のうちD除く)を悲観的ロックに依存している。これはディスクI/Oがネックだった時代にはマルチスレッド化して効率を上げることもできたが、ディスクが早くなるとてきめんに変わる。一番極端な例がVoltDBで、あれは非同期I/Oでやっているので一切ロックを取らない。それによるアドバンテージは20%というから、超高速OLTPマシンの切り札にふさわしい。逆に言うとそこまでしないと、インメモリDBの性能を使い切れないということだ。詳細は以下が役に立つと思う。

VoltDBは何故早いのかは問題ではない。何をするためのシステムなのかが問題だ


いずれにしても、RDBMSというテンプレートから40年、今の時代はもうそこから外れた実装がどんどん出てきており、不揮発メモリがOSの世界にもたらすであろう激震的変化を待たずして、システムの進化は始まっている。

なおDBMSと不揮発メモリについての個人的な予想として、不揮発性メモリはDBMSの世界にそれほど大きな革新をもたらさない。おそらく単にインメモリDBが不揮発になって終わりだろうと考えている。もっとも不揮発インメモリDBは小規模OLTP-DBの決定版にはなるだろう。あとは不揮発メモリをキャッシュに使ったHDDの高速化の恩恵をがっつり得られる程度だろう。