■DynamoDB の特徴
- NoSQLデータベースです。(SQLクエリはできませんが、PartiQLを利用するとできます。)
- Amazon DynamoDB トランザクションによって DynamoDB に不可分性、一貫性、分離性、耐久性 (ACID) が実現されるため、アプリケーション内でのデータの精度を維持することができます。
- Amazon DynamoDB グローバルテーブルは、マルチリージョン、マルチアクティブでマスターデータベースをデプロイするための完全マネージド型のソリューションです。
- DynamoDB グローバルテーブルは、グローバルに展開されたアプリケーションに対して高速の読み取り/書き込み処理を提供して、ユーザーは、非常に高速なアプリケーションパフォーマンスを利用できます。
NoSQL とは
リレーショナルデータベース以外のデータベースを NoSQL というようです。
KVS(Key-Value Store)は NoSQL の中の1つです。
DynamoDBとRDB(リレーショナルデータベース)の違いについて
そもそも DynamoDB と RDB(リレーショナルデータベース)との違いについてですが、DynamoDBは「非リレーショナル」、「スキーマレス」であることが言えます。
- schema(スキーマ) ← 図式、図表、概要という意味。
スキーマの意味が「DBの構造を定義したもの」という意味なら、スキーマレスとは「DBの構造を定義していないもの」ということになります。
リレーショナルデータベース(MySQL、PostgreSQL、Oracle、SQL Server等)の場合
リレーショナルデータベースは、各テーブルを正規化して分割し、共通のキーを元に結合します。
そして欲しいテーブル(表)を作成します。
データは柔軟にクエリできるが、クエリは比較的コストが高くなります。
DynamoDB の場合
外部キーを使って各テーブルを結合して目的のテーブルを作るというような考え方はなく、非正規化によりテーブルを少なく構成し、パフォーマンス向上などを目的にアクセス頻度を減らすように設計します。
データは限られた数の方法で効率的にクエリできるが、その範囲外でのクエリになると高コストで低速になります。
つまり、ここで目的が異なっているということなんですね。
Amazon DynamoDB / NoSQL 設計
設計の仕方について
- RDB ← とりあえず表を作ることができる。後から表を組み合わせて欲しいテーブルを作ることができる。行と列の二次元で構成されるテーブルを CREATE TABLE 文などで作成する。
- DynamoDB ← クエリ(問い合わせ)が分かるまで設計ができない。とりあえず作ってみても役に立たないもしくは作り直しが発生するリスクがある。細かく全ての項目と型を指定する必要はない。
DynamoDB が保存できるデータ型
- スカラー型(scalar) ← 1 つの値を表すことができます。数値、文字列、バイナリ、ブール、および null です。
- ドキュメント型 ← JSON ドキュメントなどの入れ子の属性を持つ複雑な構造を表すことができます。
- セット型 ← 複数のスカラー値を表すことができます。文字セット、数値セット、およびバイナリセットです。
DynamoDB の使いどころ
■DynamoDB の使いどころ
- トラフィックの多いウェブアプリ
- eコマースシステム
- ゲームアプリケーション(ゲームの行動記録)
- IoTデータの蓄積
- ビッグデータの解析用のデータ蓄積
- 高速処理が必要な要件があるもの
- Webアプリケーションを構築した場合、ユーザーのセッション管理としても利用されることが多いです。
■DynamoDB のクロスリージョンレプリケーションについて
- テーブルへの複数書き込みがフルサポートされ、複数の AWS リージョン間で自動的にレプリケートされるテーブルを作成できます。
- クロスリージョンレプリケーションを有効にするためには、DynamoDB Streamsを有効化する必要があります。
■Dynamo DB が苦手とする処理
- 複雑なトランザクション処理が発生する業務システムには利用すべきではありません。
- NoSQLデータベースであるため、JOIN/TRANSACTION/COMMIT/ROLLBACK が必要な複雑な処理には向いていません。
■DynamoDB の整合性モデル
- 「①結果的に整合性のある読み込み【デフォルト】」と「②強い整合性」の2種類があります。
- DynamoDB は、特に指定がない限り、結果的に整合性のある読み込みを使用します。(デフォルトでは結果整合性モデル)
- 読み込みオペレーションで ConsistentRead パラメータがあり、このパラメータを true に設定すると強い整合性のある読み込みを使用します。
■結果的に整合性のある読み込みの特徴
- 最新の書き込みが反映されない可能性があります。(デメリット)
- 読み込みスループットが最大限に向上します。(メリット)
■強い整合性の特徴
- 全ての書き込みが反映されているのではデータの更新が反映されています。(メリット)
グローバルテーブルについて
グローバルテーブルを設定すると、リージョンにまたがり(マルチリージョンで)DynamoDB テーブル間のデータを自動的にレプリケートできるようになります。
グローバルテーブルの設定方法
以下の設定で DynamoDB テーブル間のデータ変更を自動的にレプリケートするようになります。
- DynamoDB Streamsを有効化します。
- 設定したいリージョンにも同じテーブルを作成します。
- 設定したい全てのリージョンに作成された DynamoDB テーブルに対してグローバルテーブルを設定します。(テーブルの利用を許可する AWS リージョンを指定します。)
グローバルテーブルを作成する前に DynamoDB Streams を有効化する必要があります。
DynamoDB TTL(Time to Live、有効期限)
Amazon DynamoDB 有効期限(TTL)では、項目ごとのタイムスタンプを定義して、項目が不要になる時期を特定できます。指定されたタイムスタンプの日付と時刻の直後に、DynamoDB は書き込みスループットを消費することなく、テーブルから項目を削除します。TTL は、ワークロードのニーズに合わせて最新の状態に保たれている項目のみを保持することで、保存されたデータボリュームを削減する手段として、追加料金なしで提供されます。
Amazon DynamoDB Accelerator (DAX)
■Amazon DynamoDB Accelerator (DAX) の特徴
- フルマネージド型高可用性インメモリキャッシュで、Amazon DynamoDB 用に特化しています。
- DAX を有効化することで、DynamoDBテーブルはミリセカンドからマイクロセカンドへの最大 10 倍のパフォーマンス向上を実現します。DAX はインメモリキャッシュを利用しているため特定のデータへの処理が高い場合などに対して性能向上が期待できます。
- 1 秒あたりのリクエスト数が数百万件になる場合でも、ミリセカンドからマイクロセカンドへの最大 10 倍のパフォーマンス向上を実現します。
- DAX を有効化すると、DAX クラスターは、1つのみのプライマリノードと、0~9個のリードレプリカノードを構成することができます。
DynamoDB Streams(DynamoDB ストリーム)
- DynamoDB テーブル内の項目レベルの変更に関するシーケンスを時間順にキャプチャし、その情報を最大 24 時間ログに保存します。(実際の順序と同じ順序で表示されます。)
- アプリケーションは、このログにアクセスし、データ項目の変更前および変更後の内容をほぼリアルタイムで参照できます。
- DynamoDB Streams は DynamoDB テーブルの変更イベントをトリガーにして、Lambda 関数などを起動することができます。
- リージョンAで実施されたトランザクションを他のリージョン(リージョンB)にも自動的に複製させたい場合などに DynamoDB Streams を有効化します。
ストリームレコードを書き込むタイミング
アプリケーションがテーブル内のアイテムを作成、更新、または削除するたびに、DynamoDB ストリームは変更されたアイテムの主キー属性を使⽤してストリームレコードを書き込みます。
ストリームレコードには、DynamoDB テーブル内の単⼀のアイテムに対するデータ変更に関する情報が含まれています。
変更されたアイテムの「変更前」と「変更後」のイメージなど、ストリームレコードが追加情報をキャプチャするようにストリームを構成できます。
DynamoDB Streams の設定
以下の設定の確認です。
デフォルトでは「ストリーム有効」は「いいえ」になっています。
ストリームの管理より以下の表示タイプを設定できます。
グルーバルテーブルを作成する前に、DynamoDB Streams を「有効化」する必要があります。
DynamoDB Auto Scaling
- DynamoDB Auto Scaling はテーブルとインデックスを監視して、アプリケーショントラフィックの変化に応じて自動的にスループットを調整します。
- 一時的な負荷増加に対して、DynamoDB テーブル処理パフォーマンスの管理が容易になり、アプリケーションの可用性を最大化しつつ、DynamoDBのコストを削減することができます。
- テーブルとグローバルセカンダリインデックス(GSI)の容量増加を自動化できます。
AWS 認定試験の勉強方法
最近はコロナ禍という状況が影響しているのかどうか分かりませんが、勉強や学習意欲が非常に高くなっています。
インフラエンジニアとして AWS をメインに業務を行っていることもあり、毎日 AWS 認定試験の試験勉強をしています。
資格について IT エンジニアの場合は実績が重要なので資格は必要ないという意見もありますが、個人的には資格取得の勉強をすることにより
- 自分が知らない分野の知識やスキルが身につく
- 食わず嫌いで今まで取り組んでこなかった知識が身につくので業務を改善する新しいアイデアが生まれる
- 業務が捗る
というメリットを感じています。
AWS 認定試験についは、Udemy を利用して飽きずに楽しく勉強しています。
■Udemy のメリット
大量に問題があるので、飽きずに楽しく勉強ができます。
私の場合はテキストを読んで勉強することが非常に苦手ですぐに飽きてしまします。
しかし Udemy の大量の模擬試験問題集を解き、解答を確認して、不明な点は AWS の公式サイトを確認して学習しているので、集中して学習を続けることができます。
とにかく大量の問題を解くことが私にとって学習を続けられる唯一の方法のような気がします。
ちなみに Udemy ではたまにプレゼント企画もやっています。
先日は1つの講座を申し込んだ際に「How to Learn: Effective Approaches for Self-Guided Learning」の講座を無料で受講することが出来ました。
コメント