マスタ削除
Cloud SQL
public String delItemInfo(String item_no){ // Start Timer long start = System.currentTimeMillis(); // Start Timer try{ String sql = "delete from item_info where item_no = ?"; //(1) PreparedStatement ps = con.prepareStatement(sql); ps.setString(1, item_no); ps.executeUpdate(); //(2) // 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時間測定は、(1)のSQL文指定から(2)の削除実行までで特に問題はないでしょう。
Bigtable
public String delItemInfo_kv(String item_no){ // Start Timer long start = System.currentTimeMillis(); // Start Timer try{ ds.delete(KeyFactory.createKey("item_info", item_no)); //(1) // End Timer long stop = System.currentTimeMillis(); // End Timer long time = stop - start; rv = " 実行時間: " + time +" ms"; } catch(Exception e2){ rv = "削除不成功 " +e2; } return rv; }
Bigtableでの削除処理は(1)の1行コードで済んでしまいます。繰り返しになりますが、Low-Level APIでのBigtableアクセスは決して複雑なものではありません。
削除処理時間の測定結果
1 | 2 | 3 | 4 | 5 | |
Cloud SQL 削除(クラウド) | 128 | 110 | 103 | 103 | 104 |
Cloud SQL 削除(ローカル CI) | 428 | 340 | 334 | 323 | 390 |
Cloud SQL削除(ローカル MI) | 22 | 42 | 27 | 28 | 26 |
Bigtable 削除(クラウド) | 20 | 13 | 14 | 13 | 13 |
全平均 | 2~5平均 | |
Cloud SQL 削除(クラウド) | 109.60 | 105.00 |
Cloud SQL 削除(ローカルCI) | 363.00 | 346.75 |
Cloud SQL 削除(ローカルMI) | 29.00 | 25.75 |
Bigtable 削除(クラウド) | 14.60 | 13.25 |
削除処理では、特に突出して時間のかかるケースがありませんが、この場合も参照を実行してからの処理になるので更新と同様の理由からの結果と言えるでしょう。
最後に
今回の連載(2回)は、GAEでのMySQL使用を可能にするGoogle Cloud SQLを紹介する内容でしたが、
ややCloud SQLに不利なデータを紹介する記事になってしまったようです。しかし、これも実際に測定した結果なので止むを得ないことでしょう。
NoSQLのBigtableの方が、SQLのMySQLよりアクセスパフォーマンスが優れているのは予想通りの結果と言えます。ローカル環境でのMySQLインスタンスでの実行はオンプレミスでのMySQLサーバ利用と、かなりの程度類似していると見ることができます。従ってこの結果だけ見れば、オンプレミスMySQLの方がGAEクラウド環境でのCloud SQLよりかなりの程度パフォーマンスが良いという結果になっています。
参照サイト
参照サイトでは登録と参照のみ実行可能にしてあります。