SQL vs NoSQL、グーグルにおける戦い(前編)。Google I/O 2012

2012年7月9日

SQLとNoSQLではどちらが優れているのか? グーグルの担当者がディベート(というより小芝居:-)を行ったセッション「Google I/O 2012 - SQL vs NoSQL: Battle of the Backends - YouTube」が公開されています。

このセッションは、先々週開催されたGoogle I/O 2012で行われたもの。SQLとNoSQLには機能的にどのような違いがあり、どう使い分けるべきなのか、明確な説明が参考になります。

ハイライトを紹介しましょう。

クラウドにおけるデータベースのメリット

グーグルのAlfred Fuller氏(NoSQL担当)。

fig

クラウドはフォルトトレラントでメンテナンス不要、パッチも私たちが適用しており、利用者は運用について心配する必要がない、といったメリットがある。

データのレプリケーションや地域分散でデータも保全され、インターネット経由のアクセスも確保している。

fig

Google App Engineは、開発が容易でスケーラブル、メンテナンス不要のアプリケーションプラットフォームだ。App Engineからは、リレーショナルデータベースの「Cloud SQL」、NoSQLの「Datastore」、そしてオブジェクトストレージの「CloudStorage」にアクセスできる。

fig

DatastoreはGmailやGoogle Docsと同じテクノロジー

Datastoreは、GmailやGoogle Docsと同じテクノロジーで構築されたストレージであり、月間3兆回ものオペレーションが行われている。すべてが管理されたNoSQLソリューションだ。

fig

一方、Cloud SQLもすべてが管理され、ピュアなMySQLデータベース互換のデータベースだ。

fig

Ken Ashcraft氏(SQL担当)が壇上に登場。左がKen氏、右がAlfred氏。

遅れてゴメン。そこで開発者に捕まってたんだ。彼らはCloud SQLのすごさに興奮しててさ、これが本当のデータベースだよって、もうNoSQLみたいなくだらないものは使わなくて済むって言ってて。

fig

もちろんCloud SQLならNoSQLでできることは全部うまく処理できるしね。

(NoSQL担当)いや、そんなことはないよ。

(SQL担当)いやいや、できるって!

クエリ機能の比較

(SQL担当)クエリ機能から見ていこう。Cloud SQLは国際標準のSQLをサポートしている。

(NoSQL担当)NoSQLもSQLのサブセットをサポートしているさ。しかも、SQLにはないようなContainsやAnyをサポートしているし、データが増えても性能劣化の心配がないスケーラビリティを備えている。

fig

(SQL担当)Cloud SQLは、SQLをフルサポートしているし、例えばグループバイで街ごとの平均年齢を集計したりできる。

fig

(NoSQL担当)集計ならMapReduceフレームワークでできるさ。Mapで値を取り出し、Shuffleで街ごとに分けて、Reduceで計算すればいい。マテリアライズドビューを使えば、データが変わるたびに再計算もできる。

(SQL担当)どちらもできるけれど、この勝負はSQLの勝ちだな。スコアボードを付けていこう。

fig

トランザクション機能の比較

(SQL担当)多くのNoSQLがトランザクションをサポートしていないよね。サポートしていても1行だけに限ったトランザクションで、本物のトランザクションじゃない。

(NoSQL担当)Datastoreは本物のトランザクションをサポートしているさ。「Entityグループ」という行をまたがったトランザクションもある。

例えば、ゲームのプレイヤーがポーション(聖水)を飲んでヘルスを回復し、ポーションが削除される、という動作は、「db.transactional」を使って1つのトランザクションとして記述できる。

fig

(SQL担当)なるほど。でもプレイヤーをまたいだトランザクションはできるのかい? わはは! (できっこないだろ!)

(NoSQL担当)いやいやできるさ。Cross-Entityグループトランザクションがある。

あるプレイヤーが別のプレイヤーにポーションを売るとしよう。xgをtrueにセットする。あとはさっきと同じようにロジックを書いていけばいい。複数のプレイヤーにまたがったこの処理はアトミックに行われる。

fig

(SQL担当)もちろんトランザクションはSQLでも記述できる。start Transcation; commit;のあいだに書けばいい。

fig

トランザクションやロックを使うケースでは、Cloud SQLのほうがよりうまく処理できるといえるね。

fig

ところで、DatastoreはBigTableの上に構築されているよね。データセンターのレプリケーションが壊れたらどうなるんだろう? BigTableって、誰もよく分かってないような、ヘンテコな結果整合性のレプリケーションを使っているそうじゃないか。

データ整合性(コンシステンシ)機能について

(NoSQL担当)確かにDatastoreはMegastoreレプリケーションを使っている。ただしMegastoreレプリケーションは、さっき説明したEntityグループを使っていて、トランザクションを用いてレプリケーションをしていて一貫性に矛盾はない。

レプリカにはマスターはないけれど、Entityグループの最新データを取得する方法などを提供している。

fig

(NoSQL担当)ところでレプリケーションといえば、MySQLはシングルマスター方式で強力な一貫性を提供しているらしいけれど、非同期のレプリケーションでマスターに更新キューがたくさんたまっている状態でマスターがクラッシュしたらどうなるんだい?

(SQL担当)いやいや、Cloud SQLには同期レプリケーションがあるのさ。

データセンターAでMySQLが稼働しており、クライアントからリクエストを受ける。このときクライアントに返答する前に、同期的にほかのデータセンターにレプリケーションを行ってからクライアントに返答する。

これでデータを失うことなくレプリケーションされるため、データセンターAがダウンしたとしても何の問題もなくマスターをデータセンターBへ移行できる。

fig

(SQL担当)三連勝か。このまま楽勝だな。

fig

(NoSQL担当)まだ終わっちゃいないさ。次はスケーラビリティの話をしようぜ!

≫ここからNoSQLの反撃が始まります。続きは「SQL vs NoSQL、グーグルにおける戦い(後編)。Google I/O 2012」へ

このエントリーをはてなブックマークに追加
follow us in feedly

タグ : Google , NoSQL , クラウド , リレーショナルデータベース



≫次の記事
SQL vs NoSQL、グーグルにおける戦い(後編)。Google I/O 2012
≪前の記事
jQuery Mobileの必要なモジュールだけを選んでカスタマイズできる「Download Builder」、α版が公開

Loading...

Blogger in Chief

photo of jniino Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。新しいオンラインメディアの可能性を追求しています。
詳しいプロフィール


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



Publickey 最新記事 10本

Publickey Topics 最新記事 10本


PR - Books


fig

fig

fig

fig



blog comments powered by Disqus