SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Google App Engine for JavaでMySQLを使ってみる

Google Cloud SQLとBigtableのコード記述と処理スピードを比較・検討してみる

Google App Engine for JavaでMySQLを使ってみる(2)

 米GoogleはGoogle App Engine(以後 GAE)から利用できるRDB(MySQL)の「Google Cloud SQL」(以後Cloud SQL)の提供をLimited Preview(限定プレビュー)としてアナウンスしています。前回はCloud SQLを使うための設定および、簡単なサンプルを紹介しましたが、今回はCloud SQL(SQL)とBigtable(NoSQL)のコード記述および処理スピードを比較・検討してみます。

はじめに

 Cloud SQL(SQL)とBigtable(NoSQL)のコード記述および処理スピードを比較は以下の条件で行っています。

コード記述

 Java言語からのアクセスで、Cloud SQLではMySQLの動的SQLを使用し、BigtableではLow-Level APIを使用しています。Bigtableアクセス用のAPIとしてはこの他に、日本発のオープンソースフレームワークのSlim3やJDO(Java Data Objects)、JPA(Java Persistence API)などもありますが、アクセスパフォーマンスでは、ここで使用するLow-Level APIか最も優れているはずです。

処理スピード比較

 処理スピードの比較は、アイテムマスタのCRUD処理(登録・参照・更新・削除)をそれぞれ同じ画面内容からのアクセスで、Bigtableはクラウド環境で、Cloud SQLではクラウドとローカルの両方で測定を行っています。処理時間の測定では該当のメソッドが呼び出された瞬間から登録などの処理完了直後までの時間を、それぞれの処理パターンで計5回連続して測定しています。

対象ユーザ

  • Google App Engine for Javaに興味がある方
  • クラウドでのRDB(リレーショナルデータベース)使用に興味のある方

必要な環境

 Eclipse 3.5(Galileo)、3.6 (Helios)、3.7 (Indigo)のいずれか。

テストシステムの構成と画面

 今回のパフォーマンス比較は図1のシステム構成で行われています。図1では、ブラウザからの入力データをjQueryの非同期通信でサーブレットに送信し、サーブレットは受信データから処理モードを判断して対応するビーンズメソッドを呼びだします。

図1 Cloud SQL vs Bigtableのテスト環境
図1 Cloud SQL vs Bigtableのテスト環境

 ビーンズには、この記事で使用されているCloud SQLおよびBigtable用のすべての処理ルーチンがメソッドとして用意されており、リクエストに応じてMySQLまたはBigtableにアクセスし、要した処理時間を返すようになっています。

HRD(High Replication Datastore)

 現在のGAEでは、新たに作成したアプリケーションのデータストアは、デフォルトでHRD(High Replication Datastore)が使用されます。HRDはSDK 1.4.1からサポートされており、従来のMaster/Slaveデータストアに比べてデータの読み込み・書き込みでの可用性が高くなっていますが、書き込みに要する時間はやや遅くなります。

ローカル環境でのインスタンス選択

 今回のパフォーマンステストでは、Eclipseを使用したローカル環境での実行速度も測定しています。

  • ローカル環境でCloud SQLを実行する場合は、MySQLサーバをEclipseの外で起動しておく必要がありますが、筆者の場合は、フリーソフトのXAMPPを使用しています。
  • ローカル環境ではMySQLインスタンスとGoogle Cloud SQLインスタンスのどちらかを選択して実行しますが、MySQLインスタンスを選択した場合の方が遥かにパフォーマンスの良い処理速度が測定されています。

 ただし、MySQLインスタンスではローカル環境のMySQLにアクセスするのに対して、Google Cloud SQLインスタンスではローカル環境でもGAEクラウド上のMySQLをアクセスしています。従ってネットワークレイテンシがかなり異なっており、パフォーマンスの差異にかなり影響しているはずです。

 インスタンスの選択は次のような手順で行います。

  1. EclipseのProject Explorerから対象となるプロジェクトを右クリックしてリストを表示し、最下部にあるPropertiesを選択してProperties画面を表示します(「Alt+Enter」でも表示可能)。
  2. 表示されるProperties画面からGoogle -> App Engineと選択すると図2のような表示に変わるので、この画面下部の「Google Cloud SQL」でインスタンスの設定を行います。
  3. Google Cloud SQLで 「Enable Google Cloud SQL」をチェック。これはCloud SQL使用している場合はチェックしているはずです。ここで右の「My Instances..」をクリックすると、前回紹介したクラウド上のCloud SQLを管理する「Google APIs Console」画面が表示されます。
  4. 次に、開発環境でのSQLインスタンスを選択しますが、これはMySQLインスタンスおよびGoogle Cloud SQLインスタンスのどちらも使用することができます。
図2 PropertiesのApp Engine画面表示
図2 PropertiesのApp Engine画面表示

次のページ
MySQLインスタンスの設定

この記事は参考になりましたか?

Google App Engine for JavaでMySQLを使ってみる連載記事一覧
この記事の著者

清野 克行(セイノ カツユキ)

慶應義塾大学工学部電子物理専攻卒。日本IBM、日本HPで、製造装置業を中心とした業務系/基幹業務系システムのSE/マーケティングや、分散アプリケーションによる社内業務システム開発などに携わる。現在は、クラウドやAjax関連の/ソフト開発/書籍執筆/セミナー講師/コンサルティング、などを行っている。情...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6499 2012/04/13 10:30

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー