AWS DynamoDB についてのメモ
使う機会がったので。
- SPOF(単一障害点)が存在しない、信頼性の高いマネージド型NoSQLデータベース
- テーブルごとにRead, Writeそれぞれに対して必要な分のスループットキャパシティをプロビジョンすることができる
- 運用中にオンラインでキャパシティの設定を変更することが可能(スケールダウンは日に9回まで)
- Writeは少なくとも2つのAZでの書き込み完了でAck
- Readはデフォルトで結果整合性のある読み込みとなる
- Consistent Readオプションを付けることで強力な整合性のあるReadが可能だがCapacity Unitを2倍消費する
- 1ユニットの書き込みキャパシティユニットによって、最大1KBのデータを1秒間に1回書き込み可能
- 1ユニットの読み込みキャパシティユニットによって、最大4KBのデータを1秒間に1回読み込み可能(結果整合性のある読み込みで良ければ1秒間に2回)
- GetItemでPartition Keyを条件として1件のアイテムを取得できる
- PutItemで1件のアイテムを書き込める
- Updateで1件のアイテムを更新できる
- Deleteで1件のアイテムを削除できる
- QueryでPartition KeyとSort Keyの複合条件にマッチするアイテム群を取得できる
- BatchGetで複数のプライマリーキーを指定してアイテム群を取得できる
- Scanでテーブルの全データを取得できる
- Query, Scanでは最大1MBのデータを取得可能
- Partition Key + Sort Keyでプライマリーキーとすることができる
- Sort Keyによって同一のPartition Keyでのデータの並びを保証できる
- テーブルには任意の数のアイテムを追加できる
- 1つのアイテムの合計サイズは400KB以下である必要がある
- Local Secondary Indexについては異なるハッシュキーの値ごとに最大10GBまでのデータを格納できる
- 4.8KBのアイテムを1秒あたり1000回読み込むためには1000 * 2 = 1000 Read Capacity Unitsが必要
- スループットはパーティションに均等に付与されているため、アクセスされるキーに偏りが発生しないようにする必要がある
- パーティション数はストレージ容量とスループットで決まる
- キャパシティのプロビジョンを増やすとパーティションの数は増えるが、キャパシティをへらすときには各パーティションのキャパシティが減る
- Burst Capacityによって、パーティションごとに利用されなかったキャパシティを過去300秒分までリザーブできる
- Local Secondary Indexを用いると、(Partition Key同一のアイテム群の中で)Sort Key以外に絞り込み検索を行うkeyを持つことができる
- Global Secondary Indexを用いるとPartition Keyをまたいで検索を行うことができる
- LSI/GSIはスループットやストレージ容量を追加で必要とする
- セカンダリインデックスに強く依存するような設計になってしまう場合は、RDSの使用を検討する
- Conditional Writeを用いると、条件付きの書き込み/更新ができる
- Filter式を用いて、Query/Scanの返却結果を絞り込むことができるが、スループットの節約の効果はない
- UpdateItemにおいて、PutでAttributeの更新を、AddでAttributeへの足し算/引き算/セットへの追加を、DeleteでAttributeの削除を、それぞれすることができる
参考になるページ・スライド
www.slideshare.net