はじめに
MongoDBと大体同じだろうと思いAmazon DynamoDBに手を出したのですが、そんなに甘くはなく、理解に時間がかかったのでまとめました。
DynamoDBとは
フルマネージド型のNoSQLデータベースサーバーです。
フルマネージドの恩恵
NoSQLサーバーを自前で用意して使う場合、データが増えるタイミングで直面するハードウェア負荷や検索性能劣化の問題がありましたが、DynamoDBであればそういった事を気にしないで済み、サーバーのアラートメールや、シャーディングどうしよう?といった悩みから開放されます。
具体的なところで
書き込まれたデータはSSDに格納され、1 つのリージョン内の複数のアベイラビリティーゾーン間で自動的にレプリケートされます。
↑この仕組を自分達で作って運用していく事を考えると、DynamoDBにお任せしたほうが楽ですね。
対応リージョンと料金
対応リージョン
「アジアパシフィック」ではシンガポール、東京、シドニーが対応しています。その他欧州・米国はもちろん対応していますので、リージョンの選択で困る事は無いと思います。
料金
支払いは実際に使用した分だけです。最低料金は不要です
料金が発生するタイミングは以下です。
①読み込みスループット
②書込スループット
③インデックス化データストレージのサイズ
④データ転送量
この①〜④の組み合わせで料金が決定します。
少し複雑なので、こちら
のSIMPLE MONTHLY CALCULATORで料金の見積もりをしてみてください。
サポートするデータ型
スカラーデータ型
- Number
- String
- Binary
- Boolean
- Null
多値型
- String Set
- Number Set
- Binary Set
ドキュメント型
- List
- Map
jsonについて
ネット上にはjsonが使える?使えない?といった情報がいくつかありますが、以下のようにDynamoDBではサポートしています。
JSONフォーマットのドキュメントをそのままDynamoDBの1アイテムとして保存できるようになりました
AWS公式ブログ 2014/10/10
テーブルの作成について
STEP1
AWSのコンソールからDynamoDBを選択して[Create Table]のボタンを押下すると以下項目の入力を促されます。
①テーブル名
②プライマリーキー(詳細は後述)
STEP2
Indexの設定を行います。(オプション 詳細は後述)
①グローバルセカンダリインデックス
②ローカルセカンダリインデックス
STEP3
ReadとWriteのスループットキャパシティの設定を行います。
(検証用途でしたらデフォルト値の1のままでOKです)
STEP4
スループットアラームの設定 (オプション)
(検証用途でしたらスキップして問題無いです)
入力内容を確認して完了です。
プライマリーキー
テーブル作成時に作成が必須になります。
プライマリーキーの設定方法には以下2つがあります。
①ハッシュプライマリーキー
ハッシュのみをプライマリーキーとして設定します。
②ハッシュ&レンジ型プライマリーキー
ハッシュとレンジの2つを組み合わせてプライマリーキーとして設定します。
ローカルセカンダリインデックス
ローカルセカンダリインデックスモデルはDynamoDBの既存のキーモデルの上に構築します。
ハッシュ + レンジオプションを、テーブル毎に最大5つのローカルセカンダリインデックスをサポートするよう、拡張しています。
要点
- テーブル毎に最大5つまでインデックスが作れるので作成時に定義可能
- セカンダリインデックスにテーブルの他の属性の一部もしくは全てを投影するかどうかを選択可能
- ローカルセカンダリインデックスのみを組み合わせた検索は出来ない
- ローカルセカンダリインデックスを使えば検索性能は上がるが、処理量が多くなり余計に書き込み容量ユニットを使う。
グローバルセカンダリインデックス
ローカルセカンダリインデックスとの違い
ローカルセカンダリインデックスではプライマリーキーとの組み合わせでのインデックスの作成と検索が可能でしたが、グローバルセカンダリインデックスではプライマリーキー以外の属性を使用してインデックスを作成して検索が可能となりました。
ローカルセカンダリインデックス同様に最大5つまでのグローバルセカンダリーインデックスを作成できます。
注意点
DynamoDBの最も注意しなければいけない点として、テーブル作成後のインデックスの変更が行えない点です。
この点はMongoDBのほうが柔軟性が高いです。
おわりに
次回はPHP SDKからDynamoDBの操作についてまとめます。