SQLの都市伝説。マイケル・ストーンブレイカー御大が斬る!
データベース研究者の大御所、マイケル・ストーンブレイカー氏が、「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で反論できる。
都市伝説1:SQLは遅すぎる。NoSQLのような低レベルなインターフェイスを使うべき
なぜSQLが遅いのか?
- ODBC/JDBCによるカーソル操作やクライアント/サーバ間のやり取りが遅いからだ
- ディスクバッファ管理、ロック、クラッシュリカバリ、マルチスレッドなどのさまざまなサービスがオーバーヘッドとなっている
つまり、性能はSQLそのものとは関係ない。インターフェイスや実装の問題である。
都市伝説2:キーバリュー型が有望で、SQLは問題外
VoltDBなら、SQLのストアドプロシージャの上にキーバリューのインターフェイスを持っていますよと。多くの機能を持つSQLが少ない機能のキーバリュー型をサポートするのは簡単。MySQLだってMemcachedを使えばそうなる。
都市伝説3:SQLデータベースはスケーラブルではない
最近のはそうでもない。いくつかマルチノードに対応していないものはあるが、多くは対応している。
都市伝説4:オープンソースでスケーラブルなSQLエンジンは存在しない
VoltDBはオープンソースだよ! (なぜかMySQLやPostgreSQLに言及なし上記でMySQLやPostgreSQLはスケーラブルではないと指摘しているため、除外されている)
都市伝説5:ACIDは遅すぎるので避けるべきだ
ACIDとは要するにしっかりしたトランザクション処理のこと。実際には銀行など多くのアプリケーションがACIDを要求しているし、もしACIDを使わなければアプリケーションがさらに複雑になってしまう。
今後は、より多くのシステムがACIDを求めてくるだろう。こうした要件に対してACIDを使わないのは問題外だ。
現実に多くのデータベースは1テラバイトもないはずなので、すべてオンメモリでの処理ができるようになるだろう。しかも、DBMSの処理のほとんどはリカバリ処理(の準備)、バッファプール管理、ロッキング、ラッチなどの余計なものがほとんどなのだ。
ACIDにかかるコストは実は小さなものであり、それ以外の部分が実は問題になっているのだ。
都市伝説6:CAP定理では、CA(一貫性と可用性)よりもAP(可用性と分断耐性)を選ぶべき
CAP定理のC(一貫性)、A(可用性)、P(ネットワーク分断耐性)のどれを選ぶべきかは、ある意味宗教的な議論だ。
順序に依存した処理の場合(例えば、ある社員を100ドル昇給させたあと、さらに10%昇給させるといった処理)では、ネットワーク分断耐性と結果整合(Eventual Concistency)では順番が保証されないため対応できない。また、在庫がゼロのときに注文を受けてはならない、といった制約にも対応できない。
VoltDBなら…
そしてVoltDBなら、こうしたSQLの都市伝説を打ち破る製品だと紹介しています。メインメモリをストレージとして使うため、バッファプールがなく、トランザクション処理は軽く、ロックもラッチもない。しかもACIDに対応すると。
VoltDBのアーキテクチャについては、6月1日の記事「NoSQLを上回る性能のVoltDB、そのアーキテクチャとは」で紹介しているのでご参照ください。