マスタ更新
Cloud SQL
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
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)で更新(上書き)を行っています。
更新処理時間の測定結果
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 |
全平均 | 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 |
更新の場合も、やや初回で時間の掛かる場合と、連続処理の途中で時間を要する場合が見られますが全体としてそれほど極端な時間差のない実行結果になっています。更新ではその前に参照を行うため、初回で時間のかかる内部処理は参照に吸収されていると見ることができるでしょう。