AWS 1ヶ月導入記 part 7 SimpleDBの性能調査


目次

みなさん、こんにちは!フリューでモバイルサイト開発を行っている鷲見といいます。

あるソーシャルプラットフォーム上のアプリケーションを構築するプロジェクトでの、クラウド環境の導入状況をそのまま記事にしています。

前回はSimpleJPAを用いてSimpleDBを操作するプログラムについて解説しました。

クラウド1ヶ月導入記 part 1 比較編

クラウド1ヶ月導入記 part 2 見積編

Amazon Web Services 1ヶ月導入記 part 1 データベース編

Amazon Web Services 1ヶ月導入記 part 2 アーキテクチャ設計編

Amazon Web Services 1ヶ月導入記 part 3 SimpleDBの特徴と制限

Amazon Web Services 1ヶ月導入記 part 4 SimpleDBの制限を回避する

AWS 1ヶ月導入記 part 5 AWS SDK for Javaを用いたプログラミング

AWS 1ヶ月導入記 part 6 SimpleJPAを用いたプログラミング

次回からはバックアップなどと言っていたのですが、JAWS-UG Kyoto 第2回勉強会で少しお話させていただいた、SimpleDBの性能について少し掘り下げて紹介させていただきます。

なお、JAWS-UG Kyoto 勉強会第2回の私の発表資料は以下のページをご覧ください。

JAWS-UG Kyoto勉強会 第2回で発表させていただきました!

性能調査方法

東京リージョン上のEC2インスタンス(m1.small)から、各リージョンのSimpleDBへのアクセス時間を計測します。

本来であればAPIを直接呼び出すのがよいのですが、手っ取り早くAWS SDK for JavaのAPI呼び出しに該当するメソッド呼び出しにどのくらいの時間がかかるかを計測します。

AWS SDK for Javaを経由してのAPI呼び出しですので、実際にはAPIの呼び出し時間だけではなく、各種Requestオブジェクトからリクエストパラメタへの変換や、レスポンスのXMLデータから各種Resultオブジェクトへの変換の処理時間も含まれます。

選択・挿入・更新・削除のCRUDをそれぞれ100回ずつ呼び出し、その平均値を計測します。

性能調査プログラム

AWS Toolkit for Eclipseを使うとSimpleDBのサンプルプログラムを作成することができます。今回はこのSimpleDBのサンプルプログラムをベースに調査用に少し変更を加えてみました。

ソースコードはこちら(GitHub)

プログラムの引数にはSimpleDBのエンドポイントを指定します。

各リージョンのSimpleDBのエンドポイントは以下のとおりです。

<td>
  sdb.ap-northeast-1.amazonaws.com
</td>
<td>
  sdb.ap-southeast-1.amazonaws.com
</td>
<td>
  sdb.eu-west-1.amazonaws.com
</td>
<td>
  sdb.us-west-1.amazonaws.com
</td>
<td>
  sdb.amazonaws.com
</td>
<td>
  sdb.us-west-2.amazonaws.com
</td>

調査結果詳細

Select(Select API)

<td style="text-align:right;">
  38.8ms
</td>
<td style="text-align:right;">
  126.8ms
</td>
<td style="text-align:right;">
  332.6ms
</td>
<td style="text-align:right;">
  154.1ms
</td>
<td style="text-align:right;">
  234.9ms
</td>
<td style="text-align:right;">
  163.7ms
</td>

Insert(PutAttributes API)

<td style="text-align:right;">
  369.2ms
</td>
<td style="text-align:right;">
  431.3ms
</td>
<td style="text-align:right;">
  659.8ms
</td>
<td style="text-align:right;">
  467.4ms
</td>
<td style="text-align:right;">
  585.3ms
</td>
<td style="text-align:right;">
  428.5ms
</td>

Update(PutAttributes API)

<td style="text-align:right;">
  287.8ms
</td>
<td style="text-align:right;">
  378.0ms
</td>
<td style="text-align:right;">
  648.5ms
</td>
<td style="text-align:right;">
  351.5ms
</td>
<td style="text-align:right;">
  504.8ms
</td>
<td style="text-align:right;">
  347.4ms
</td>

Delete(DeleteAttributes API)

<td style="text-align:right;">
  244.8ms
</td>
<td style="text-align:right;">
  339.7ms
</td>
<td style="text-align:right;">
  573.2ms
</td>
<td style="text-align:right;">
  339.7ms
</td>
<td style="text-align:right;">
  534.0ms
</td>
<td style="text-align:right;">
  291.8ms
</td>

調査結果の考察

各リージョン毎の差異について

当然ですが、呼び出し側のEC2インスタンスと同一リージョンのSimpleDBの呼び出しは速いのがよくわかります。

東京リージョンからの処理時間の順としては

  • 1.Asia Pacific(Tokyo)
  • 2.Asia Pacific(Singapore),US West(N. California),US West(Oregon)
  • 3.US East(Virginia)
  • 4.EU West(Ireland)

のとなりました。

2位はAsia Pacific(Singapore)がダントツかなと想像していましたが、2つのUS Westリージョンが健闘し、Asia Pacific(Singapore)とほぼ同じくらいの値を叩き出しています。

CRUDの差異について

Selectはそれなりに早い速度で結果が返ってきていますが、挿入・更新・削除は同一リージョンからの呼び出しでも1回200ミリ秒以上かかっているのがわかります。挿入・更新・削除が多く発生するアプリケーションにはSimpleDBはあまり向かないということがわかります。

まとめ

今回はSimpleDBの性能調査をJavaプログラムを作成し、実施してみました。

  • 呼び出し側と同一リージョンのSimpleDBであればそれなりに早い
  • 挿入・更新・削除といったデータ操作は少し遅い

ということがわかったかと思います。

さて、次回こそは前回から予告していた、AWSでの各種バックアップについてお話ししたいと思います。