Amazon DynamoDBって何?
- マネージドのNoSQLデータベースサービス
- 自動でスケールアップし、高速な処理に向いている
参考・リンクまとめ
【 動画 】
- AWS公式:Amazon DynamoDB 入門(日本語字幕)
※少々古い動画ですが内容は秀逸です。
出題傾向
DynamoDBは、RDSやAuroraとのユースケースについて違いをきちんと押さえておきましょう。
DynamoDBは、NoSQL(Not only SQL)データベースといって、RDSやAuroraのようなRDBMS(リレーショナルデータベース)とは大きく異なる種類のDBです。
AWSでは、様々なNoSQLサービスが提供されています。例えばElastiCacheやNeptuneなどです。DynamoDBはそのなかでも代表的なNoSQLデータベースです。SAAではあまり出題されませんが、DVAやSAPでは設定オプション、仕組みなどが問われます。
出題ポイント
Key-Value-Store
- DynamoDBはKey-Value-StoreとよばれるDBの仕組みを採用している
- キーを指定し、そのキーに紐づくデータを取り出す
このあたりが問われます!!
DynamoDBが、ほかのRDBMSとは大きく違う仕組みを採用したDBであることを理解してください。
RDBMSと違い、キーと値(Value)のみで構成されているため、データモデルがシンプルであり、高速かつケールアップやデータの分散処理が行いやすいというメリットがあります。
DynamoDBでは、1つの項目が400KBまで、という制限がありますが、その制限によって高速なクエリが可能です。
結果整合性 / 強力な整合性
- DynamoDBは同一リージョンの3つの設備でレプリケートされており、その内、2つで書き込み完了となった時点で書き込み完了となる。
参考・リンクまとめ
このあたりが問われます!!
言葉の意味自体が回答になることはありませんが、問題文の中で、両方の言葉を理解した上で、回答を選択する必要があります。
DynamoDBでは、応答性能を確保する為に、DBのACID特性のなかでの一貫性について、一時的に担保できないことを許容しています。したがって、デフォルトではDynamoDBに書き込みを行った直後に読み込みを行うと、古いデータが応答される場合があります。これを「結果整合性モデル」と呼びます。
ある程度の一貫性を担保したい場合は、『強力な整合性』オプションを利用することで実現できます。
DynamoDB独自の概念①(キー)
- パーティションキーとソートキーについて、概念を覚える
参考・リンクまとめ
このあたりが問われます!!
SAAで頻出ではないですが、DVAでは必ず押さえておく必要がある概念として、DynamoDBの内部の仕組みが存在します。
- パーティション
DynamoDBはデータを複数のパーティションに分散して保存しています。このときデータがどのパーティションに保存されるかを決めているのがパーティションキーです。
- ソートキー
パーティション内で並び替えを行うためのキーをソートキーといいます。DynamoDBでは、クエリは基本的にパーティションキーを指定するか、パーティションキー + ソートキーでクエリを行います。
例:
AnimalType(パーティションキー)とName(ソートキー)で構成されるPetsテーブルは以下の図のようにデータが保存されいます。
※AWS公式:Partitions and Data Distributionより引用
DynamoDB独自の概念②(セカンダリインデックス)
- グローバルセカンダリインデックス、ローカルセカンダリインデックスについて概念を覚える
参考・リンクまとめ
このあたりが問われます!!
クエリ高速化のために、別のパーティションキー・ソートキーを設定することができます。それが グローバルセカンダリインデックス(GSI)と ローカルセカンダリインデックス(LSI) です。
- ローカルセカンダリインデックス
例えば、以下のようなテーブルがあったときに、種類=パーティションキー、名前=ソートキーとなっていますが、
『2015年以降に飼い始めた犬の数を調べたい』といった場合には、パーティションキーはそのままで、「飼い始めたとき」をソートキーとする別のテーブルを作成します。このように、あるテーブルをベースに、パーティションキーはそのままで、別のソートキーを設定し、クエリを高速化する仕組みをローカルセカンダリイデックスといいます。
種類 | ペットの名前 | 年齢 | 飼い始めたとき |
Dog | Bowser | 10 | 2020 |
Dog | Fido | 9 | 2013 |
Dog | Rover | 2 | 2014 |
Fish | Blub | 3 | 2018 |
Fish | Samantha | 5 | 2017 |
Bird | Neel | 6 | 2016 |
Bird | Pick | 10 | 2020 |
Bird | Morn | 19 | 2011 |
なおLSIは既存のテーブルに追加・削除はできません。テーブル作成時に定義するようにしましょう
- グローバルセカンダリインデックス
例えば、以下のようなテーブルがあったときに、
『年齢順にペットの名前をソートしたい』といった場合には、パーティションキー、ソートキーを別に設定する必要があります。このように、異なるパーティションキー・ソートキーのテーブルを設定し、クエリを高速化する仕組みを グローバルセカンダリインデックス(GSI) といいます。
種類 | ペットの名前 | 年齢 | 飼い始めたとき |
Dog | Bowser | 10 | 2020 |
Dog | Fido | 9 | 2013 |
Dog | Rover | 2 | 2014 |
Fish | Blub | 3 | 2018 |
Fish | Samantha | 5 | 2017 |
Bird | Neel | 6 | 2016 |
Bird | Pick | 10 | 2020 |
Bird | Morn | 19 | 2011 |
ただし、GSIを1つ定義すると、テーブルが1つ増えるのと同じ扱いとなり、利用コストが増加します。
DAX(DynamoDB Accelerator)
- DynamoDBに特化したインメモリキャッシュ
参考・リンクまとめ
このあたりが問われます!!
DAXのユースケースについて理解しておきましょう。
DAXはDynamoDBに特化したインメモリキャッシュです。具体的には以下のようなユースケースで利用されます。
- 高速な読み書きが必要な場合
マイクロ秒単位まで、結果整合性のある読み込みの応答時間を短縮できます。
- 運用コストの節約
DynamoDBは1秒間当たりの読みこみ・書き込みのキャパシティによって課金がされます。
高速な読み書きが必要な場合は、コストが増大してしまうため、インメモリDBに対して読み取りを行わせることでコストの増大を抑えることができます。
DynamoDBストリーム
- ストリーム機能を有効にする、テーブル上の作成、更新、削除をキャプチャすることができる。
- DynamoDBストリーム=「テーブル上の作成、更新、削除」の時に別のAWSサービス(ほぼLambda)をトリガーする機能
参考・リンクまとめ
このあたりが問われます!!
DynamoDB内での更新、削除といったアクティビティが24時間ストリームとして時間順に流されます。また、DynamoDB Streamが流れた事をトリガーとしてLambdaを実行させることができます。
「DynamoDBにレコードが登録された時点で、Lambdaのプログラムを〜」と言った形でLambdaとの組み合わせは頻出です。
DynamoDBグローバルテーブル
- 複数リージョン間のレプリケーション機能
参考・リンクまとめ
このあたりが問われます!!
DynamoDBグローバルテーブルが問題文に登場する場合、その機能の意味を答えさせるという形よりも、「このケースにあった施策はどれか?」という問題の選択肢の1つとして出てくる事がほとんどです。
問題文から”マルチAZ(アベイラビリティーゾーン)”とするべきケースなのか、”マルチリージョン”とするべきケースなのかを読み取り、後者であれば、正答になり得る選択肢の1つとして絞り込む事ができます。
その他
- 各データを自動で削除する機能(TTLの設定)が使用可能です。データを保存し続けるとコスト増えるため、コスト対策として出題されます。