クラウド環境ではデータベースは「非正規化」して使う?
――App Engine(のDatabase API)ではJOINのような機能をサポートしていませんよね。
ソーサー氏 ええ、分散環境ではスケールしないからです。分散コンピューティングの環境では誰かの特定のクエリだけを受け付けて、それを処理するということはできないのです。App Engineではデータは複数のサーバ上にあって、並列化により高速な読み書きが可能です。実は読み出し速度を見ると、特定のサーバからの読み出し時間だけ遅いなど小さなピークがありますが、それでもそれは小さなものです。
こうした並列化のメリットは、クエリ対象となるエンティティ数がいくら増えても、遅くならないということです。
――スケーラブルなアプリケーションは、App Engineのようなインフラ上のほうが構築が容易?
ソーサー氏 従来の単一サーバの環境と、クラウドは別物なので、私自身も使い始めてから簡単な面と難しい面の両方を感じています。これまでRDBでさんざんたたき込まれてきた「正規化」とは逆に、クラウド環境では「データを非正規化する」ように考え方を改める必要があります。
一方、スケーラブルなアプリケーションを構築するのはApp Engineのほうが簡単です。ユーザーのセッション情報はmemcachedとBigTable上のData Storeで管理していて、JVMインスタンスはどこのサーバにあっても構わないですし、負荷に応じてJVMインスタンスを増減できるのです。