SHOEISHA iD

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

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

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

マスタ更新

Cloud SQL

リスト8 Cloud SQLでマスタ更新(updIteminfo)
    public String updItemInfo(String item_no,
                              String item_name,
                              String final_flag,
                              String vendor_no,
                              String vendor_name){
        // Start Timer
        long start = System.currentTimeMillis();
        // Start Timer
        try{
            String sql = "update item_info set item_name = ?, final_flag = ?, vendor_no = ?, vendor_name = ? where item_no = ?";
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, item_name);
            ps.setString(2, final_flag);
            ps.setString(3, vendor_no);
            ps.setString(4, vendor_name);
            ps.setString(5, item_no);
            ps.executeUpdate();                      //更新実行
            // End Timer
            long stop = System.currentTimeMillis();    
            // End Timer
            long time = stop - start;    
            rv = " 実行時間:  " + time +"ms";
        }catch(SQLException e){
            rv = "接続失敗\n理由:" + e.toString();
        }catch(Exception e){
            e.printStackTrace();
            rv = "更新失敗\n理由:" + e.toString();
        }finally{
            try{
                con.close();
            }catch(Exception e){}
        }
        return rv;
    }

 Cloud SQLでの更新処理も、通常のMySQLでの処理と同じなので問題ないでしょう。

Bigtable

リスト9 Bigtableでマスタ更新(updIteminfo_kv2)
    public String updItemInfo_kv2(String item_no,
                                String item_name,
                                String final_flag,
                                String vendor_no,
                                String vendor_name){
        // Start Timer
        long start = System.currentTimeMillis();
        // Start Timer
        Key key = null;
        Entity itemf = null;
        try{
            itemf = ds.get(KeyFactory.createKey("item_info", item_no));  //(1)
            itemf.setProperty("item_no", item_no);                       //(2)
            itemf.setProperty("item_name", item_name);
            itemf.setProperty("final_flag", final_flag);
            itemf.setProperty("vendor_no", vendor_no);
            itemf.setProperty("vendor_name", vendor_name);
            ds.put(itemf);                                               //(3)
            // End Timer
            long stop = System.currentTimeMillis();    
            // End Timer
            long updtime = stop - start;    
            rv = " 実行時間: " + updtime +" ms";
        }catch(EntityNotFoundException e1){                              //(4)
            rv = "更新エンティティなし" + e1;
        } catch(Exception e2){
            rv = "更新不成功 " + e2;
        }
        return rv;
    }

 更新処理では、(1)で生成したキーによりエンティティを検索し、存在しない場合は例外発生により(4)のcatchに飛んで更新は行われません。更新対象のエンティティが存在する場合は(2)以下で値セットを行い(3)で更新(上書き)を行っています。

更新処理時間の測定結果

表5 更新処理時間の測定結果(単位ミリ秒)
  1 2 3 4 5
Cloud SQL 更新(クラウド) 110 62 143 62 65
Cloud SQL 更新(ローカル CI) 384 347 385 344 427
CloudSQL 更新(ローカル MI) 80 29 25 26 26
Bigtable 更新(クラウド) 19 18 23 23 21
表6 更新処理時間平均(単位ミリ秒)
  全平均 1-4平均
Cloud SQL 更新(クラウド) 88.40 74.75
Cloud SQL 更新(ローカルCI) 377.40 365.00
Cloud SQL 更新(ローカルMI) 37.20 26.50
Bigtable 更新(クラウド) 20.80 20.25

 更新の場合も、やや初回で時間の掛かる場合と、連続処理の途中で時間を要する場合が見られますが全体としてそれほど極端な時間差のない実行結果になっています。更新ではその前に参照を行うため、初回で時間のかかる内部処理は参照に吸収されていると見ることができるでしょう。

グラフ3 Cloud SQLとBigtableの更新処理時間(Y軸ミリ秒)
グラフ3 Cloud SQLとBigtableの更新処理時間(Y軸ミリ秒)

次のページ
最後に

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
Google App Engine for JavaでMySQLを使ってみる連載記事一覧
この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6499 2012/04/13 10:30

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング