SQLの都市伝説。マイケル・ストーンブレイカー御大が斬る!

2010年7月22日

データベース研究者の大御所、マイケル・ストーンブレイカー氏が、「SQL URBAN MYTHS」(SQL都市伝説)というWebセミナーを、自身が創設した会社VoltDBで公開しています。

一般にリレーショナルデータベースに対して言われている「SQLは遅すぎる、トランザクションのコストは高すぎる」といった評価について、SQLが遅いのではないし、トランザクション以外のコストが高すぎるのだ、と反論する内容。

これらは同氏が以前から主張してきた内容ではありますが、最近流行しているNoSQLデータベースに対する反論にもなっているため、多くのエンジニアに刺激になる内容となっています。

SQLに関する6つの都市伝説

都市伝説1:SQLは遅すぎる。NoSQLのような低レベルなインターフェイスを使うべき
都市伝説2:キーバリュー型が有望で、SQLは問題外
都市伝説3:SQLデータベースはスケーラブルではない
都市伝説4:オープンソースでスケーラブルなSQLエンジンは存在しない
都市伝説5:ACIDは遅すぎるので避けるべきだ
都市伝説6:CAP理論では、CA(一貫性と可用性)よりもAP(可用性と分断耐性)を選ぶべき

これらの多くは、SQLに準拠し、ACIDに対応したシェアドナッシングなVoltDBで反論できる。

fig

都市伝説1:SQLは遅すぎる。NoSQLのような低レベルなインターフェイスを使うべき

なぜSQLが遅いのか?

  • ODBC/JDBCによるカーソル操作やクライアント/サーバ間のやり取りが遅いからだ
  • ディスクバッファ管理、ロック、クラッシュリカバリ、マルチスレッドなどのさまざまなサービスがオーバーヘッドとなっている

つまり、性能はSQLそのものとは関係ない。インターフェイスや実装の問題である。

fig

都市伝説2:キーバリュー型が有望で、SQLは問題外

VoltDBなら、SQLのストアドプロシージャの上にキーバリューのインターフェイスを持っていますよと。多くの機能を持つSQLが少ない機能のキーバリュー型をサポートするのは簡単。MySQLだってMemcachedを使えばそうなる。

fig

都市伝説3:SQLデータベースはスケーラブルではない

最近のはそうでもない。いくつかマルチノードに対応していないものはあるが、多くは対応している。

fig

都市伝説4:オープンソースでスケーラブルなSQLエンジンは存在しない

VoltDBはオープンソースだよ! (なぜかMySQLやPostgreSQLに言及なし上記でMySQLやPostgreSQLはスケーラブルではないと指摘しているため、除外されている)

fig

都市伝説5:ACIDは遅すぎるので避けるべきだ

ACIDとは要するにしっかりしたトランザクション処理のこと。実際には銀行など多くのアプリケーションがACIDを要求しているし、もしACIDを使わなければアプリケーションがさらに複雑になってしまう。

今後は、より多くのシステムがACIDを求めてくるだろう。こうした要件に対してACIDを使わないのは問題外だ。

fig

現実に多くのデータベースは1テラバイトもないはずなので、すべてオンメモリでの処理ができるようになるだろう。しかも、DBMSの処理のほとんどはリカバリ処理(の準備)、バッファプール管理、ロッキング、ラッチなどの余計なものがほとんどなのだ。

ACIDにかかるコストは実は小さなものであり、それ以外の部分が実は問題になっているのだ。

fig

都市伝説6:CAP定理では、CA(一貫性と可用性)よりもAP(可用性と分断耐性)を選ぶべき

CAP定理のC(一貫性)、A(可用性)、P(ネットワーク分断耐性)のどれを選ぶべきかは、ある意味宗教的な議論だ。

順序に依存した処理の場合(例えば、ある社員を100ドル昇給させたあと、さらに10%昇給させるといった処理)では、ネットワーク分断耐性と結果整合(Eventual Concistency)では順番が保証されないため対応できない。また、在庫がゼロのときに注文を受けてはならない、といった制約にも対応できない。

VoltDBなら…

そしてVoltDBなら、こうしたSQLの都市伝説を打ち破る製品だと紹介しています。メインメモリをストレージとして使うため、バッファプールがなく、トランザクション処理は軽く、ロックもラッチもない。しかもACIDに対応すると。

fig

VoltDBのアーキテクチャについては、6月1日の記事「NoSQLを上回る性能のVoltDB、そのアーキテクチャとは」で紹介しているのでご参照ください。

あわせて読みたい

RDB データベース




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本