CodeZine(コードジン)

特集ページ一覧

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/04/13 10:30

目次

マスタ更新

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軸ミリ秒)

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

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

著者プロフィール

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

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

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5