データベースもクラウドの時代や!
自サーバーにデータベースを置くとバックアップするのが面倒だったり、管理が大変だったりと大変なので
クラウドに置いてみようと思った。
Amazon RDS を選んだ理由
無料体験期間で12ヶ月無料で使えるからです!
無料で使えるプランは db.t2.micro 最安インスタンスです。
インスタンス | vCPU | メモリ | PIOPS 用に最適化 | ネットワークパフォーマンス | 容量 |
db.t2.micro | 1 | 1GB | 無 | 低 | 5GB |
その他の料金については公式サイトを見て下さい。
また、使えるエンジンも多く
・Aurora
・MySQL
・MariaDB
・PostgreSQL
・Oracle
・SQL Server
と現時点(2016/04/23)で6個から選べる…。
他にもクラウドデータベースは
・Oracle Cloud
・Google Cloud SQL
・Rackspace
があります。
オンデマンドインスタンス & リザーブドインスタンス
オンデマンドインスタンス
オンデマンドインスタンスでは長期間の契約や初期費用がなく、時間単位でインスタンスに対する料金が発生します。これにより、データベースのキャパシティーを事前にプランニングしたり、購入したりするコストや手間が省けます。オンデマンドの料金設定のため使用した分のみ料金が発生し、開発、テスト、その他の短期ワークロードに最適です。
言ってしまえば従量課金制です。使った分だけ支払います。
リザーブドインスタンス
リザーブドインスタンスは一定量のデータベースワークロードに最適で、オンデマンドと比べて大幅にコストを削減できます。オンデマンド料金と比べると、1 年契約のリザーブドインスタンスでは最大 44%、3 年契約のリザーブドインスタンスでは最大 63% のコスト削減が可能です。リザーブドインスタンスの場合は、所定の期間終了まで使用する契約を結ぶことになり、初期費用のお支払いが必要ですが、時間あたりの料金は下記のとおり割安になります。実際に使用したかどうかにかかわらず、期間中は各時間ごとに料金が発生します。
こちらは固定料金みたいなものです。
今回契約したのは オンデマンドインスタンス です。
使うのなんて月に数回程度、数十行のレコードへのINSERT,UPDATE,SELECTぐらいなのでリザーブドインスタンスだととてつもなく料金の無駄になります。
使い方
使い方ではなくインスタンス作成の時ですが、右側を選択すると「無料利用枠範囲内」で
勝手に項目が決定されます。
ステータスが利用可能になるとエンドポイント(URL)が表示されます。
セキュリティポリシー的なやつで、アクセス元IPをホワイトリストに追加する必要があります。
mysql -h <エンドポイントURL> -u <ユーザー名> -p でいつものように使えるようになります。
既存のデータベースをダンプして、RDSにインポートしてコードを書き換えれば
簡単に移行できます。
ベンチマーク
今回は Sysbench というベンチマークソフトを使ってみました。
CPU、ディスクI/O、データベースなど様々なベンチマークを測ることができます。
準備
sysbench \ --test=oltp \ --db-driver=mysql \ --oltp-table-size=10000 \ --mysql-password=<パスワード> \ prepare
レコード数は10000
sysbench \ --test=oltp \ --db-driver=mysql \ --oltp-table-size=10000 \ --mysql-password=<パスワード> \ --num-threads=1 \ --max-requests=0 \ --max-time=60 \ --oltp-read-only=off \ run
何となく分かると思います。
比較はトランザクション数で比較します。
トランザクションとは
一般にデータベースには多くの人がアクセスし、様々な処理を行います。閲覧するだけの人もいれば、データを追加・更新したり、削除する人もいます。その中でも特に、データの追加・更新・削除、SQL 文で言うと「INSERT 文」「UPDATE 文」「DELETE 文」についての処理のまとまりをトランザクションと言います。 – http://www.techscore.com/tech/sql/SQL11/11_01.html/
詳しいことはこちらが参考になります。
vCPU : 4 / メモリ : 4GB サーバー
OLTP test statistics: queries performed: read: 158886 write: 56745 other: 22698 total: 238329 transactions: 11349 (189.15 per sec.) deadlocks: 0 (0.00 per sec.) read/write requests: 215631 (3593.84 per sec.) other operations: 22698 (378.30 per sec.) Test execution summary: total time: 60.0002s total number of events: 11349 total time taken by event execution: 59.9105 per-request statistics: min: 4.12ms avg: 5.28ms max: 91.92ms approx. 95 percentile: 6.33ms Threads fairness: events (avg/stddev): 11349.0000/0.00 execution time (avg/stddev): 59.9105/0.00
transactions: 11349 (189.15 per sec.)
Amazon RDS db.t2.micro
OLTP test statistics: queries performed: read: 280 write: 100 other: 40 total: 420 transactions: 20 (0.31 per sec.) deadlocks: 0 (0.00 per sec.) read/write requests: 380 (5.93 per sec.) other operations: 40 (0.62 per sec.) Test execution summary: total time: 64.1199s total number of events: 20 total time taken by event execution: 64.1194 per-request statistics: min: 2933.48ms avg: 3205.97ms max: 4202.67ms approx. 95 percentile: 4170.87ms Threads fairness: events (avg/stddev): 20.0000/0.00 execution time (avg/stddev): 64.1194/0.00
transactions: 20 (0.31 per sec.)
差が圧倒的すぎる…。
僕の使用用途はただユーザー情報を入れてるだけのデータベースで、正規化するほどのものでもないので
十分です…。
無料利用枠もあって、使いやすいし Amazon RDS オススメです。
まあ、Google Cloud SQL の最安プライン オンデマンドインスタンスの方が安いんですけどねw