AWS
DynamoDB

Amazon DynamoDBの基本概念

More than 3 years have passed since last update.


はじめに

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の操作についてまとめます。