データベースサービス

·

·

基礎知識

●エビクション

キャッシュが満杯の状態。キャッシュ内に必要なデータを保存し、不要なデータを追い出すこと。

●接続文字列

どのサーバの、どのデータベースに、どのOLEDBプロバイダーで接続するかを指定するための文字列。障害発生時に、再度更新に時間がかかる要素。AWS DLM(EBS)が有効策。

●プロキシフリート

リソースのフリート(集団)を管理しており、DBなどの接続を仲介する(?)

  • フリート
    一般的に、「集団」、「ものの集合体」を意味する。フリートを使用することによって、マルチクラスタ機能の使用と管理、複数のシステム間での一貫したポリシーの適用が可能。

●変更データキャプチャ(Change Data Capture:CDC)

テーブルの特定のデータソースが追加・削除・更新などの変更情報を追跡することができる。

●RDBMS(Relational DataBase Management System)

SQLを利用して、RDBを管理するためのソフトウェアの総称 下記のソフトウェアを選択して利用できる。(各ソフトウェアを利用したDBを作成可能)
・MySQL(Amazon Auroraと互換性あり)⇒パフォーマンスの向上
・ORACLE
・Microsoft SQL Server , PostgerSQL
・MariaDB
・Amazon Aurora(MySQl,PostgerSQL)

●完全なスナップショット

インスタンスの停止が必要。マルチAZ配置で設置されたDBのスタンバイ側は読み込みをサポートしていない。

[サーバーとセッション情報について]

セッション管理しているサーバーに障害が発生した場合、セッション情報が消える。⇒再度処理しなおす必要がある。➡各サーバーにセッション情報を置かずに、DBを利用して保存する。(セッション情報は消えない)

[NoSQLについて]

「柔軟でスキーマレスなデータモデル」「水平スケーラビリティ」「分散アーキテクチャ」「高速な処理」 RDSやAuroraなどのリレーショナルデータは、サーバレスアーキテクチャとの互換性が低い 小規模データを保存・処理するためにはNoSQLデータベースを利用することが最適。

[「DBインスタンス」という表現]

例として、「RDS」と「DBインスタンス」の違いを記載すると以下になる。

・AWS RDSは、クラウド上でデータベースの管理を簡素化するマネージドサービス全体
・AWS DBインスタンスは、RDSの中で実際に動作する個々のデータベース環境。ユーザーが選択したエンジン(MySQL、PostgreSQLなど)で動作し、設定可能。

つまり、RDSはサービスの枠組みであり、DBインスタンスはそのサービスの中で動作する具体的なデータベース環境ということ。

RDS

(Relational Database Service)
シンプルかつ迅速にスケール、安定したパフォーマンス、低コストを実現可能なデータベース。(停止してから7日間経つと自動的に起動される)。データを複数の表として管理し、それぞれの関係を定義することで、互いの関連性を扱えるデータベース。リードレプリカは最大5台まで。

高速なフェイルオーバー: データベースに障害が発生し、別のデータベースに切り替わっても、プロキシが自動的に接続先を切り替えるため、アプリケーションは再接続する必要がなく、ダウンタイムを最小限に抑えられる。

接続の管理: アプリケーションからの接続をプール(集約)し、データベースへの接続数を削減することで、データベースの負荷を軽減する。

(課金:1秒単位 ※プライマリとスタンバイ間のデータレプリケーションに課金は発生しない)
※RDSのオンデマンドより、リザーブドインスタンスの方が費用対効果が高い

マルチAZ構成にすると、自動的にフェイルオーバー構成になる
・頻繁にまたは同時に上書きおよび削除するデータに向いている
・複数の同時書き込み操作をサポートし、常に最新のデータが返される
・MySQLのストレージエンジンに【InnoDB】を利用⇒複雑なクエリ、結合処理が可能
・DBインスタンスのバックアップに自動バックアップとスナップショットをAmazon S3に保管する
・DBインスタンス全体の保存期間を35日間に設定できる。破損からデーターベースを守ることができる。

[注意点]

・個別パッチは適用できない
・AutoScaling グループは使用できない
・OSにログインはできない(別途RDBMSの検討が必要)
・ファイルシステムへのアクセスができない(ファイルシステムとの連携がサポートされていない)
・作成した、DBインスタンスのパラメータの変更について➡[動的:インスタンスの再起動不要]、[静的:インスタンスの再起動必要]
・テーブルのパーティションは16TBが限度(ストレージは64TBまで拡張可能)

●リードレプリカ

読み取り専用のDB。アクセス数が多くDBに読み取り負荷が起きている場合など、リードレプリカを構築することでプライマリデータベースへの負荷を分散する。マルチAZ構成との違いは、リードレプリカへのデータ更新は非同期で行われる点。

機能性

●RDS Performance Insights【DB負荷評価】

データベースの負荷を可視化し、負荷を発生させている SQL ステートメントとその理由を簡単に調べられるようにする。RDSのパフォーマンス分析ツール。データベースのワークロードを分析し、ボトルネックや遅延の原因を特定。

・設定もメンテナンスも不要で、現在は Auroraと RDSで利用可能。
・AWS API と SDK を使用すると、Performance Insights をオンプレミスやサードパーティーのモニタリングツールと簡単に統合できる。

[データの保存期間]
無料で 7 日間のパフォーマンス履歴を保存でき、多種多様な問題を簡単に突き止めて解決できる。もっと長い期間の保存が必要なときは、最大 2 年間のパフォーマンス履歴を有料で保存することもできる。

●RDSメンテナンスウィンドウ

週次で設定し、AWSによって行われる、変更やソフトウェアのパッチなどが実行されるタイミングをコントロールできる。アップデートが突然行われると、提供しているサービスがダウンしたりと障害につながるようなことを防ぐ。なお、設定しない場合は、デフォルトのメンテナンスウィンドウを指定される。

[オプション]

ポイントインタイムリカバリー直前5分前から最大35日間までの任意のタイミングの状態のRDSを新規に作成することができる。
バックトラック機能指定した時間(上限は72時間)まで新しいDBクラスターを作成せずに、本番用データベースクラスターを巻き戻すことが可能。新しいDBクラスターを作成しないため、スナップショットからの復元やポイントタイムリカバリと比較すると迅速に復元できる。
拡張モニタリング有効化(Enhanced Monitoring)
DBインスタンス上のさまざまなプロセスまたはスレッドがCPUをどのように使用しているかを常時モニタリングする。OSレベルのメトリクスをリアルタイムで提供(CPU,メモリ、ファイルシステム、ディスクI/O、プロセスリストなど)
クロスリージョンリードレプリカRDS のリージョン間リードレプリカを使用すると、ソース DB インスタンスとは異なるリージョンに MariaDB、MySQL、Oracle、PostgreSQL、または SQL Server のリードレプリカを作成することができる。
※DR対策に有効
Amazon RDS on VmwareオンプレミスVMware 環境マネージド型データベースをデプロイできる。RDS同様に下記処理を自動化できる。
・ハードウェアのプロビジョニング
・データベースのセットアップ
・パッチ適用
・バックアップなど

RDS Proxy

【可用性機能】
アプリケーションでデータベース接続をプールおよび共有して、アプリケーションのスケーリング能力を向上させる。「データベース接続のオーバーヘッド削減」、「コネクション管理」を主とする。RDS の前段に配置され、RDSのエンドポイントにプロキシとして接続するサービスでもある。

・アプリケーションがDBへの接続を失ったとしても、再起動することなく接続を再確立できる。

交通整備接続プールからアプリケーション接続をすぐに提供できない場合、これらの接続の処理順番を決めたり、スロットリングを行う。
スケーリングレイテンシー増加時、データベースの障害や過負荷を発生させず、アプリケーションは継続して(RDSインスタンスが)スケーリングされる。
接続数管理接続リクエスト数が指定した制限を超えると、アプリケーション接続を拒否 (負荷を削除) 。同時に、負荷に対してパフォーマンスを維持する。
接続プール再利用アプリケーションの接続を維持しながらスタンバイインスタンスに自動的に接続することができるように設定されている。これにより、アプリケーションはデータベースへの接続を失った場合でも、再起動することなく接続を再確立できる。
フェイルオーバーデータベース接続プールを確立し、このプール内の接続を再利用することで、毎回新しいデータベース接続を開くことによるメモリと CPU のオーバーヘッドを回避できる。
(※認証情報を処理するオーバーヘッドを減らし、新しい接続ごとに安全な接続を確立できる。この作業の一部をデータベースに代わって処理できる)

●RDSプロキシエンドポイント

アプリケーションがデータベースに接続する際に使用する、RDSプロキシというサービスの接続先。通常、アプリケーションは直接RDSデータベースに接続しますが、RDSプロキシを使うことで、その間にプロキシが入り、接続管理を効率化できる。

パラメータグループ

データベースに割り当てるメモリなどのリソースの量などの設定方法を指定できる。
※データベース接続時の SSL / TLS 暗号化を強制できる

DB インスタンスとマルチ AZ DB クラスターをパラメータグループに関連付けて、データベースの設定を管理する。
Amazon RDS は、デフォルト設定を使用してパラメータグループを定義する。カスタマイズした設定を使用して独自のパラメータグループを定義できます。

ストレージタイプ

※GBあたりの容量課金を実施

・汎用(SSDタイプ)
・プロビジョンドIOPS(SSDタイプ):汎用よりIOPSが高い
・マグネティック(HDDタイプ):[GBあたりの容量課金を実施]+IOリクエスト課金

暗号化

・SSL/TLSを使用してDBインスタンスへの接続を暗号化する
・保管時のデータリソースを暗号化する
・暗号化オプションの有効化はRDSインスタンス作成時のみ有効。

[作成後の暗号化]

スナップショットをコピー・暗号化し、新しいインスタンスとして復元することで可能。

[接続の暗号化(PostgreSQL)]

Amazon RDS for PostgreSQL ではカスタムパラメータグループを使用することで、データベース接続時のSSL/TLS暗号化を強制でき、通信内容を暗号化することができる。

[その他]

  • AES-256暗号化
  • AWS KMSによる鍵管理
  • リードレプリカも同じ鍵管理を利用
  • インスタンス作成時にのみ設定可能
  • スナップショットのコピーの暗号化/リストア可能
[ストレージ容量の確認方法]

Webコンソールの「RDS」→「インスタンス」→「モニタリングを表示」で「Free Storage Space(MB)」が表示される。

[Lambda関数を使って、RDSに接続設定]

(Lambdaを利用したサーバーレス構成必須)
Lambda 関数用の Amazon RDS Proxy データベースを作成できる。 データベースプロキシは、データベース接続のプールを管理し、関数からのクエリを中継する。これにより、データベース接続を 使い果たすことなく、関数の同時実行レベルを高くすることができる。

Aurora

(RDSで使用できるデータベースの1つ)
MySQLとPostgreSQLと互換性がある分散型RDB。標準的なMySQL。データベースと比べて最大で 5 倍、標準的な PostgreSQL データベースと比べて最大で 3 倍高速。(※NoSQL非対応)※高頻度の書き込みの不向き

・Auroraリードレプリカは負荷削減として機能すると同時に自動フェールオーバー機能を備えているため、セカンダリデータバーストしても機能する。また、自己修復機能を備えている。
・DBインスタンスを作成すると、DBクラスタ(複数のDBインスタンス)が作成される(データ量:最大64TB)
・作成されたDBインスタンスは3つのAZにわけられる。1AZあたり2箇所、3AZに渡りコピー、つまり2×3=6箇所のストレージにコピーされる
(※3つのAZに6か所のデータをレプリケート)
・DBの冗長化構成(マスターデータベース/リードレプリカ)。スタンバイレプリカで読み取り処理は不可
・データベースインスタンスのトランザクションログを5分ごとにS3に保存している

機能性

●Amazon Aurora AutoScaling

Aurora DB クラスター用にプロビジョニングされる Aurora レプリカのみ (リーダー DB インスタンス) の数を動的に調整する。
・Aurora MySQL と Aurora PostgreSQL の両方で使用できる。
・使用する Aurora DB は急激な接続やワークロードの増加を処理できる。

・クラスターボリュームはDBエンジンのバージョンに応じて、128テビバイト(TiB)または64Tibまで自動的にスケールする

種類

●Aurora Serverless(※AZ規模のDR(Disaster Recovery)向け)

オンデマンドで自動スケーリングするデータベース。アプリケーションの負荷に応じて自動的に起動・(アクセスがなければ)停止し、容量も調整される。必要なときに必要なだけリソースを利用できる。処理負荷が一定ではない、予測困難なワークロードに適している。

秒単位での従量課金制が採用されており、非アクティブ時はコストが抑えられる。
・セットアップはシンプルで、エンドポイントの作成と容量範囲の指定のみで使用可能。
標準のAurora設定との切り替えも簡単で、数クリックで移行できる。

[構造]
・DB インスタンスクラスのサイズを指定せずにデータベースエンドポイントを作成して、最小と最大のキャパシティーを設定。
・データベースエンドポイントからプロキシフリートに接続される。(プロキシフリート=インスタンス群のグループ?)このフリート内で、最小と最大のキャパシティー設定に基づいてリソースを自動的にスケールして調整する。
[引用元サイト]

●Aurora Global Database

(※リージョン規模のDR(Disaster Recovery)向け)
複数のAWSリージョンにまたがる単一のAuroraデータベースを使って、グローバルに分散したアプリケーションを実行できる。データのマスターをプライマリリージョンに1つ、読み取り専用(最大5つ)をセカンダリリージョンに構成。書き込み操作は、プライマリAWSリージョンにあるプライマリDBクラスターに直接発行。

データベースのパフォーマンスに影響を与えずにデータをレプリケートし、各リージョンでレイテンシーを低減してローカル読み取りを 高速化し、リージョン規模の停止からの災害復旧を実現する。

※マルチマスター設定非対応
マルチマスター設定:複数のマスターノードが互いに連携して動作する構成
DBインスタンスごとに、読み取りオペレーションと書き込みオペレーションの両方を実行できる Auroraクラスターのアーキテクチャ。シングルマスターと比較するとmマルチマスタークラスターは、マルチテナントアプリケーションなどのセグメント化されたワークロードに最適。

●Aurora Serverless v2

・オンデマンドで自動的にスケーリングされる Aurora データベースの構成
・アプリケーションの負荷に応じて容量を自動的に調整
・使用したリソースに対してのみ課金されるため、コスト最適化に有効
・手動のキャパシティ調整が不要になり、運用負荷が軽減
Auto Scaling 機能を備えたリレーショナルデータベース。キャパシティは自動で調整される。
コンピューティングとストレージの分離がある。結果として、個別に独立してスケールすることが可能。

★2025 年 3月 31 日 サポート終了
Aurora Serverless v1 (Aurora サーバーレスバージョン 1)
Aurora 用のオンデマンドオートスケーリング構成。頻度が低く、断続的、または予測が困難なワークロードを処理するための、比較的シンプルかつコスト効率の高いオプションを提供。
コスト効率が良いのは、アプリケーションの使用状況に合わせて自動的に起動してコンピューティング性能をスケールし、不使用時にはシャットダウンするためである。
Aurora Serverless v1 DB クラスターでは、クラスターのコンピューティング容量を、アプリケーションのニーズに対応して増減させられる。

※リードレプリカや複数のライターインスタンスをサポートする機能を提供しない。
このため、リードレプリカの作成や複数のライターインスタンスを持つDBクラスターの設定は実現できない。

エンドポイント

エンドポイントを使用すると、ユースケースに基づいて各接続を対応するインスタンスまたはインスタンスグループにマッピングできる。

クラスターエンドポイントDB クラスターに対するすべての書き込みオペレーション (挿入、更新、削除、DDL の変更など) で使用する。DB クラスターへの読み取り/書き込み接続のフェイルオーバーサポートを提供。
リーダーエンドポイントすべての Aurora レプリカ間で接続バランシングを自動的に実行する。
インスタンスエンドポイント特定の DB インスタンスの詳細を調べて、診断またはチューニングを行う。
カスタムエンドポイントDB クラスター上の DB インスタンスのさまざまなサブセットに接続する。
Aurora Global Database ライターエンドポイント書き込みリクエストと読み取りリクエストの両方を処理する。

[公式参考ページ]

[RDS との比較]
特徴AuroraRDS for MySQL
Multi-AZ 構成3つのAZに2つずつの
レプリケーションを
デフォルトで構成
2つのAZを利用
データベース
ストレージサイズ
最大64TiB最大32TiB
最大リード
レプリカ数
最大15最大5
レプリケーションタイプ非同期的MultiAZ構成:同期
リードレプリカ:非同期
リードレプリカの
フェイルオーバー
ターゲットとしての機能
はい
(データ損失なし)
はい
(数分間データ損失の可能性)
自動フェイルオーバーはいいいえ

[引用元サイト]

DynamoDB

※スナップショットなし【NoSQL型=ビックデータ向けDB】
パーティショニング(分散処理)で、ビッグデータ処理や大量データ処理、ストリーミングデータを利用したリアルタイムデータ集計・処理などに最適。セッションデータやメタデータなどのシンプルな高速処理をするサーバレスDB。マルチAZ 3か所のAZに保存される。ストレージの容量制限がない。

※DynamoDBにSaving Plansは提供されない

[料金]
コストはHTTPリクエスト(データI/O)の回数とリクエスト、レスポンスの量(データI/Oのサイズ)により計算される

[エラー]
Provisioned Throughput Exceeded Exception:書き込み容量の不足

機能性

●Amazon DynamoDB Read OnlyAcess権限

AWSリソースにアクセスするための一時的な認証情報をEC2インスタンスに付与する安全な方法。

●Amazon DynamoDB 有効期限 (TTL)

項目ごとのタイムスタンプを定義して、項目が不要になる時期を特定できる。指定されたタイムスタンプの日付と時刻の直後に、DynamoDB は書き込みスループットを消費することなく、テーブルから項目を削除する。TTL は、ワークロードのニーズに合わせて最新の 状態に保たれている項目のみを保持することで、保存されたデータボリュームを削減する手段として、追加料金なしで提供される。

●DynamoDB AutoScaling

Application Auto Scalingサービスを使用して、実際のトラフィックパターンに応じて、プロビジョニングされたスループット容量を動的に 調整する。これは、コストを最適化するための最も効率的で費用効果の高いソリューション。 テーブルまたはグローバルセカンダリインデックスで、プロビジョニングされた読み込みおよび書き込み容量が拡張され、トラフィックの 急激な増加をスロットリングなしに処理できるようになる。ワークロードが減ると、Auto Scalingはスループットを低下させ、未使用の プロビジョニングされた容量の料金が発生しないようにする。

[テーブル関係]

●TrasactWriteItems

テーブル内の複数のアイテムに対する調整されたオールオアナッシングの変更をサポートする。

●オプティミスティックロック

データベースの書き込みは他のユーザーの書き込みによって上書きされないように保護する。

●ペシミスティックロック

編集されている間、レコードごとロックされる。

●FGAC(Fine Grained Access Control)

DynamoDB テーブルの所有者がテーブル内のデータに対して詳細なコントロールを行うための機能。具体的には、テーブル所有者は 誰(呼び出し元)がテーブルのどの項目や属性にアクセスでき、どのようなアクション(読み込み/書き込み)を実行できるか指定できる。IAMと組み合わせて使用され組織内のユーザーのアクセスを細かく管理することができる。セキュリティ認証情報および対応する アクセス権限の管理は、IAM で行う。

処理概要

・テーブル設計(テーブル>項目(アイテム)>属性)
・プライマリキーの値を指定して、テーブルの項目に高速アクセスしデータを迅速に取得する。
・多くのアプリケーションでプライマリキー以外の属性を使って、セカンダリ(または代替)キーを 1 つ以上設定することで、データに効率的にアクセス。(ホストを増やし(ホスト1 A/ホスト2 B,C)、テーブルを自動的にスケールアップ/ダウンして容量を調整し、大量の処理が可能になる)

・データ項目に制限在り(アイテム最大サイズ:上限400KB)増え続けるデータを永続的に保持する。

処理形式

[DB処理形式]

スカラー型スカラー型は 1 つの値を表すことができます。スカラー型は、数値、文字列、バイナリ、ブール、および null
ドキュメント型ドキュメント型は JSON ドキュメントなどの入れ子の属性を持つ複雑な構造を表すことができる
セット型セット型は複数のスカラー値を表すことができます。セット型は、文字セット、数値セット、およびバイナリセット。

[書き込み形式]

条件付き書き込み複数のユーザーが同じ項目を同時更新することを防げる
アトミックカウンターその他の書き込みリクエストを妨害することなく、無条件で増分される数値属性。
バッチオペレーションアプリケーションからDynamoDBへのネットワークラウンドトリップの数を減らす
テーブル

テーブル上に複数のパーティション{パーティションキー(大枠)+ソートキー(分類など)}。

パーティションキーデータをどのパーティションに配置するか決定する。各パーティションへのアクセスがなるべく均一になるようなパーティションキー設計を推奨。
ソートキーソートキーによってデータはパーティション内で並べ替えられて物理的に近くなるように配置される。QueryAPIではソートキーを指定して取り出すデータの範囲をフィルタできる。ソートキーの設定は任意。
プライマリキー(主キー)「パーティションキー」または「パーティションキーとソートキーの複合キー」のこと。プライマリキーによってデータは一意に識別される。
キーバリュー型リレーショナルなしにバリュー1行にデータをまとめることで高速処理になる
並列スキャンスキャンパフォーマンスの向上。
乱数
サフィックス
書き込みスループットを大幅に向上させることができる。
制限
パラメーター
消費されるプロビジョニング済みのスループットを制限できる(読み込みキャパシティーユニットの半分でテーブル全体のスキャンを行う)
グローバル
テーブル
複数のリージョン間でのレプリケーション(同期)を自動化する。
マルチリージョンフェイルオーバー機能が提供される。
APIが利用するデータが常に最新の状態で 保たれるため、リージョン間でフェイルオーバーがスムーズに行われる。
キャパシティモード

【24時間に1回行える
キャパシティモードの指定はテーブル毎に設定可能。読み取りおよび書き込みスループットの課金方法と容量の管理方法を制御する。読み取り/書き込みキャパティーモードは、テーブルを作成するときに設定できる。

●キャパシティユニット

パフォーマンスをどれだけ出せるかの設定であり、これが高いとコストがかかるがパフォーマンスが出せる。キャパシティユニットは2種類に分かれる。WCU(ライトキャパシティユニット)は書き込みできる量。RCU(リードキャパシティユニット)は読み取りできる量。

  • キャパシティ
    利用量のこと。DynamoDBは項目の読み込み、書き込みの量。

●プロビジョニングモード

(1時間辺りのキャパシティに対する課金)
テーブルに設定すると、1秒間あたりのテーブルの読み込み及び書き込み回数に制限を設ける必要がある。DynamoDBにおけるスループットキャパシティの単位として、テーブルに書き込みキャパシティユニットと読み込みキャパシティユニットを指定する。この制限をスループットと言う。

スループット:テーブルが1秒間に許容できるデータの書き込み及び読み込み上限回数のこと

  • 読み込みキャパシティユニット
    項目の読み込みについて、基本的な消費キャパシティユニットの計算は以下の通り。
    ・1秒あたり4KBの項目の結果整合性読み込みを2回行う:1キャパシティユニット消費
    ・1秒あたり4KBの項目の強力な整合性読み込みを1回行う:1キャパシティユニット消費
    ・1秒あたり4KBの項目のトランザクション読み込みを1回行う:2キャパシティユニット消費

    なお、4KB以下の項目の場合も4KBとして計算されます。5KBの項目の場合、8KBとしてサイズを4の倍数で切り上げて計算される。8KBの場合、消費キャパシティユニットも2倍。
  • 書き込みキャパシティユニット
    項目の書き込みについて、基本的な消費キャパシティユニットの計算は以下の通り。
    ・1秒あたり1KBの項目の書き込みを1回行う:1キャパシティユニット消費
    ・1秒あたり1KBの項目のトランザクション書き込みを1回行う:2キャパシティユニット消費

    なお、1KB以下の項目の場合も1KBとして計算される。1.1KBの項目場合は2KBとして計算される。2KBの場合、消費キャパシティユニットも2倍になる。テーブルの項目を読み込む方法には、PutItem、UpdateItem、DeleteItem、BatchWriteItemがある。例えば、5ユニットの書き込みキャパシティ/読み込みキャパシティをテーブルに設定すると、
    ・1秒に5KBまでの書き込み (1KB × 5回)
    ・1秒に20KBまでの強力な整合性読み込み (4KB × 5回)
    ・1秒に40KBまでの結果整合性読み込み (4KB × 10回)
オンデマンドモード

オンデマンドモード(リクエスト数課金)
事前の容量設定が不要で、使用量に応じて課金される柔軟な課金モデル。トラフィックの増減に応じて自動でスケーリングし、突発的なアクセス集中にも高可用性を維持したまま対応できます。低レイテンシーやSLA保証、セキュリティ機能も通常モードと同様に提供されており、新規・既存テーブル問わず利用可能です。また、1秒あたり数千リクエストを処理可能で、読み書きキャパシティユニットの指定が不要な点も特徴です。

  • 読み込みリクエストユニット
    項目の読み込みについて、以下は1リクエストユニットが消費される。
    ・4KBの項目の結果生合成読み込みは2回
    ・4KBの項目の強力な生合成読み込みには1回

    項目の読み込みについて、以下は2リクエストユニットが消費される。
    ・4KBの項目のトランザクション読み込みは1回
  • 書き込みリクエストユニット
    項目の書き込みについて、以下は1リクエストユニットが消費されます。
    ・1KBの書き込み1回
    ・1KBのトランザクション書き込み1回
セカンダリインデックス

テーブルからの「属性のサブセット」と、「Query オペレーションをサポートする代替キー」で構成されるデータ構造(検索速度が向上) 1つのテーブルで 1つ以上のセカンダリインデックスを作成して、それらのインデックスに対して Query または Scan リクエストを実行する。これにより、アプリケーションは複数の異なるクエリパターンにアクセスしインデックスからデータを取得できる。ベーステーブルの項目を追加、変更、削除すると、そのテーブルのインデックスも更新され、この変更が反映される。

・すべてのセカンダリインデックスは、DynamoDB によって自動的にメンテナンスされる。

・ローカルセカンダリインデックスは基本テーブルのキャパシティモードが 継承され、グローバルセカンダリインデックスは、ベーステーブルとは別のキャパシティモードの指定が可能。

※テーブルの項目を読み込む方法には、GetItem、BatchGetItem、Query、Scan(DynamoDB API)がある。

  • セカンダリ(代替)キー
    Primary Key以外の属性を使って、データに効率的にアクセスできるようにする。
  • Scanオペレーション(全件走査のAPI)【全体スキャン】
    常にテーブルまたはセカンダリインデックス全体をスキャンし、より多くのRCUを消費する。頭からすべてのデータを取得する。全件走査であるscanを行うと、このキャパシティを食いつぶしてしまう危険性がある。対策として、属性(Attribute)で結果を絞り込むオプションがある。 

  • クエリ(Query)オペレーション(scanと同じで、データを取得するAPI)
    プライマリキー、複合プライマリキー、パーティションキー、セカンダリインデックスといったDynamoDBのキーを条件にデータ取得ができる。ただし、検索条件に使用できるのがkeyのみ。Attributeを条件にデータ取得できない。

    ※DynamoDBはkeyに指定できる項目数が限られている。通常は1つ、複合プライマリキーを使用すれば2つ設定できる。 また、セカンダリインデックスを使用することで、さらに増やすことができる。しかし、keyに指定できる項目数には限界があるため、なんでもかんでもqueryで取得するというわけにはいかない。

●(属性の)射影

テーブルからセカンダリインデックスにコピーされる属性のセット。アプリケーションのクエリ要件をサポートするために、 他の属性を射影できる。その属性が自身のテーブル内にあるかのように、プロジェクション内の任意の属性にアクセスできる。
(※テーブルのパーティションキーとソートキーは常にインデックスに射影される)

[種類]

※結果整合性とは
常に2倍の強力な整合性のある読み込み容量を提供する。「1つの強力な整合性のある読み込み」=「2つの結果整合性のある読み込み」

●グローバルセカンダリインデックス(GSI)【結果整合性】

大規模にスケールされたアプリケーション向け。多数の異なる値が存在する属性間の関係を追跡する場合に特に便利。そのため、再上限に抑えて別のテーブルを作成でき、取得されるデータの量が少なくなる。

・あるテーブルをベースに、パーティションキーやソートキーの対象を組み替えて、見やすいようにテーブルを作成すること
・インデックスに関する クエリが、すべてのパーティションにまたがり、表内のすべての項目を対象とする
・専用のプロビジョニングされたキャパシティーユニットで異なるパーティションキーとソートキーを持つ別のインデックスを作成するのに役立つ。これによりテーブル内のデータへの高速アクセスを提供し要件を満たすことができる。

●ローカルセカンダリインデックス(LSI)

【結果整合性】【強い整合性】

・すべてのパーティションの範囲が、同じパーティションキーを持つテーブルパーティションに限定される
・オリジナルのテーブルのパーティションキー・ソートキーだけでは不十分な場合、別のパーティションキー・ソートキーを 設定することができる。
・GSIのパーティションキーは固定したままでテーブルを作成すること。(テーブル作成時に作成する必要がある)

※一部のAPIを除き、基本的にデータの読み書きは「プライマリキー」を指定して行う
※データアクセスの特徴にあわせてパーティションキーとソートキーを設計すると良いでしょう

[引用元サイト]

連携サービス
LambdaDynamoDB は AWS Lambda と統合されているため、トリガー となるDynamoDB ストリーム 内のイベントによって実行される サーバレスアプリケーションを作成できる。DynamoDB ストリームを使用すると、DynamoDB テーブル内のデータ変更に対応する アプリケーションを構築できる。テーブルの項目が変更されるとすぐに、新しいレコードがテーブルのストリームに表示され、 Lambda は ストリームをポーリングし、新しいストリームレコードを検出すると、Lambda 関数を同期的に呼び出す。

DynamoDB Accelerator (DAX)

フルマネージド型高可用性インメモリキャッシュ。 レスポンスを向上させる。
Dynamo DB の読取りコストを大幅に削減する。
※永続的なユースケースではない

・DynamoDBの前段にキャッシュクラスタを設置する。
・読み取りキャパシティ(読み取り操作を実施する回数)の低減。コスト削減。最大10倍のパフォーマンスにする。

削除後に、不要なスナップショットを産まない仕組みを整備。

RedShift

【データ保管庫・分析】
クラウド内で完全に管理されたペタバイト規模のリレーショナルデータベース型DWH。列指向ストレージ、データ圧縮 「ノード」というコンピューティングリソースで構成されている。
※様々なデータを集計、統合、分析のための保管庫のようなもの

※シングル AZ 配置のみをサポート
・基本的にAWSネットワークにおけるその他のサービスへのトラフィックはインターネットを経由する

[分析力]
・複雑な分析クエリの対応が可能
・BIツールと簡単に統合できる標準SQLを使用
・標準的な Apache Sparkの3倍以上の速さで、ペタバイト規模の分析を実行できる

[データの取り扱い]
・データをキャプチャできない
・スナップショットがクラスターのプライマリAWSリージョンで作成されると、セカンダリAWSリージョンにコピーされる

[拡張された VPC のルーティング]
➡[監視サービスにて説明]

構造

複数のノードのまとまり(1つのリーダノード/複数のコンピュータノード)で構成されている。「ブロック」単位で ディスクにデータを格納。
※1ブロック=1MBブロック内の最小値と最大値をメモリに保存不要なブロックを読み飛ばすことが可能

[ノード付帯機能]

●MPP(Massively Parallel Processing)

1回の集計処理を複数のノードに分散する。ノードを追加するだけで実施できる仕組み

●シェアードナッシング

各ノードがディスクを共有せず、ノードとディスクセットで拡張する仕組み

[ノードの種類]

リーダノードSQLクライアントやBIツールからの実行クエリを受け付けてクエリ解析や実行プランを作成(司令塔)
コンピュートノードリーダーノードからの実行クエリを処理する
ノードスライス分散並列処理を実施する最小単位
ゾーンマップ(各ブロックごとに最大・最小を持っているため高速にアクセス)
バックアップストレージ

データウェアハウスのスナップショットに関連するストレージ。
24 時間未満のRedshift Serverless リカバリーポイントについては、課金されない。
スナップショットスケジューリング機能を使用して作成される Redshift 自動スナップショットに料金は発生せず、最大 35 日間保持できる。

[料金発生について]
使用料は、バックアップ保持期間の延長やスナップショットの追加取得を行うと増加する。
24 時間を超えてリカバリーポイントを保持することを選択した場合、RMS の一部として料金が発生する。
コンソール、アプリケーションプログラミングインターフェイス (API)、コマンドラインインターフェイス (CLI) を使って行うマニュアルスナップショット。

[参考公式サイト]

WLM(Work Load Management)

Redshiftに投げ込まれるクエリ処理を実施する際に、事前に用意したWLMキューに割り当て、クエリ処理に実行(優先)順序を定義することが可能。

[構造]
構成はパラメーターグループに含まれる。
カスタマーパラメーターグループを作成してグループ内の下記設定を編集しクラスターに関連付ける。
・キュー間でのメモリ配分
・あるキューにおけるクエリータイムアウト設定
・それぞれのキュー内でいくつのクエリーが同時に実行可能か
・クエリーがどのようにキューにルーティングされるか
・誰がクエリーを実行しているか、クエリーレベルは、などの基準

[キュー]
以下情報を指定できる。
・分析時のサイズ、メモリの割合
・並列度、タイムアウトの時間

(短くて実行速度の速いクエリが実行時間の長いクエリの後に留まらないようにできる)

動的マスキング

「動的データマスキングポリシー」を設定することで、データサイエンティストなどのユーザーが機密データにアクセスしようとする際に、クエリ(問い合わせ)を実行した時点で自動的にデータをマスキング(隠す)することができる。

[主なポイント]

  • データの匿名化: ユーザーの権限に応じて、表示されるデータを動的に隠すことで、機密データを保護する。
  • データ変更が不要: データベース内の元のデータを変更したり、移動したりする必要はありません。ポリシーを設定するだけで適用できる。
  • 柔軟なアクセス制御: 特定のユーザーや役割(ロール)ごとに、異なるマスキングルールを適用できる。
  • プライバシー要件への対応: SQLクエリを編集することなく、プライバシー要件の変更に迅速に対応することが可能。

要するに、最小限の作業で、データウェアハウス内の機密データを保護し、誰がどのようにデータを見られるかを柔軟に制御できる機能である。

その他機能
同時実行スケーリング機能一貫した高速のクエリパフォーマンスで数戦の同時ユーザーと同時クエリをサポートできる。自動的に新たなクラスターキャパシティーを追加し、読み取りと書き込み両方でクエリの増加に対応する。
Redshift SpectrumS3のエクサバイトの非構造化データに対してSQLクエリを直接実行できる。取得されるデータに基づいてクエリの計算能力を自動的に スケーリングするため、データセットのサイズに関係なく、S3に対するクエリは高速に実行される。 既存でRedshiftを利用している場合のロード対象データ容量に対するノード課金を抑える用途や、データロードにかかるリソース負荷や 金額負担を抑えたい場合の移行対象として利用できる。

Elastic Cache

【キャッシュDB】
NOSQL型。キーバリュー(ストア)型で非常にシンプルなデータ構造をした、インメモリデータストア(インメモリキャッシュ)。

・高速のインメモリシステムで処理を実行するため、ウェブアプリケーションのパフォーマンスを向上し、セッション情報の管理に最適。
・データをノードのメモリに保存するため、高速なデータの出し入れできる。しかし、データに永続性がなく、再起動すると、データ消去される。
・サーバノードのデプロイおよび実行をクラウド内で簡単に実行できるウェブサービス

機能性
レプリケーションノード間で同じデータを共有すること。 プライマリノードへの書き込みを、プライマリノードに紐づくすべてのリードレプリカへ非同期的に反映する。耐障害性の向上・読み込みの負荷分散を実現できる。
シャーディング【水平分割(horizontal partitioning)】
データをシャード間で分割すること。データベース内の複数のテーブルにデータを分割するための一般的な概念。リクエスト増加などで単一のマスターDBの運用で限界がある場合、一定のルールに従いデータを複数のDBに振り分けることでアクセスを分散させ、読み書きの負荷分散・コストパフォーマンス向上を図ることができる。
・小さめのノードを、複数のシャードに分割することで、データ容量を増やしつつ、クラスタ全体のコストを抑えることができる
構造

(クラスタ>シャード>ノード)

クラスタシャードをまとめる論理グループ。複数のシャードを作ることで、シャーディングができる。データはシャード間で分割される。
クラスタごとにキャッシュエンジン(Redis, Memcached)を設定でき、Redisエンジンのクラスタはクラスタモード無効、有効の2種類。

・Redis (クラスタモード有効) は、クラスタ 1 つにシャード 1〜15 個持つことができる。
・Redis (クラスタモード無効) は、クラスタ 1 つにシャード 1 個持つことができる。
シャードノードをまとめるグループ。データはノード間で同期され、2つ以上のノードを用いることで、レプリケーションできる 。
1 シャードは、読み書きができるプライマリノード 1 個と、読み込み専用のセカンダリノード(リードレプリカ)0 〜 5 個を持つ。
ノードElastic Cache の最小単位で、保存領域(RAM)を持つ。 設定したノードタイプによって CPU 性能や保存領域のサイズが異なる。
キャッシュエンジンは、クラスタごとに設定できるため、クラスタ以下のノードすべては、同じキャッシュエンジンで動作する。
メモリエンジン(クラスタ構成)

●Redis

多機能(バックアップなどの機能を持っている),シングルスレッドで動作, 全てのデータ操作は排他的である特徴

・ノード間のレプリケーション機能、フェイルオーバー機能、データ永続性機能、バックアップと復元の機能がある。
・複雑なデータ型を設定できる。複数のデータベースをサポートしている。
・インメモリデータセットのソートまたはランク付けが可能である。
・データをリードレプリカにレプリケートできる。

[ノードの種類]
シャード内で、1つのPriamryノードに対して、Replicaノードは5つまで追加可能。
●Priamryノード(読み書き)
●Replicaノード(読取り)

[クラスターモード]
クラスタモードを用いるとリードレプリカが追加できなくなる。

  • クラスターモード無効
    ・シャーディング不可能
    ・クラスタ作成後、ノードタイプ、エンジンタイプの変更可能。
    ・S3へのバックアップ、S3からの復元に対応。
  • クラスターモード有効
    ・シャーディング可能
    ・クラスタ作成後、構成の変更は基本的に不可能。
    ・クラスタレベルでのS3へのバックアップ、S3からの復元対応可能
  • [推奨]リーダーボード作成
    Redis はリーダーボードを実装する上で推奨されているサービス。
    通常ユーザのレーティングの計算にはネストされたクエリが必要だが、Redisではソートセットによって、ネストせず少ない計算量でレーティングなどのリーダーボードの作成に必要なクエリを実施できる。

    ★リーダーボード:プレイヤーは互いのパフォーマンスを比較するために用いる
    【使用例:引用サイト


[pub/sub機能を提供]
publish/subscribe(発行/購読)モデルを実現するための機能。Redisに接続しているクライアント間で、メッセージを送信できる。WebSocketなどのリアルタイム通信に利用されることが多い。

[認証処理]
Redis認証トークンを使用すると、Redisはクライアントにコマンドの実行を許可する前にトークン(パスワード)を要求でき、 セキュリティが向上。データ転送時の暗号化、データ保管時の暗号化およびRedis Authによる認証を実施することが可能。

●Memcached(ノードタイプの変更ができない)

・シンプルで高速(データ暗号化機能はなし)
・データベースなどのオブジェクトをキャッシュできる

[メトリクスの種類]
⇒[引用元サイト]

[Redis と Memcached の比較]

キャッシュ方法

●レイジーキャッシング(遅延読み込み)

オブジェクトがアプリケーションによって実際に要求された場合にのみキャッシュにデータを入力。

  • メリット
    リクエストされたデータのみキャッシュするため、キャッシュがデータでいっぱいにならない。
  • デメリット
    データが更新された場合に、キャッシュミスが起こらないとキャッシュされたデータは更新されない。データが古くなる可能性。キャッシュミスした場合、データの取得に時間がかかる。
    (※キャッシュへのリクエスト、DBへのリクエスト、キャッシュへの書き込みが行われるため)

ライトスルーキャッシュ

データがDBに書き込まれると常にデータを追加するか、キャッシュがリアルタイムに更新される。(※DBとCache両方書き込みされる) システムでの需要の増減に応じてノードを追加または削除するスケールアウトおよびスケールイン機能が利用できる。キーストアの永続性はない、バックアップと復元の機能がない。また、複数のデータベースを利用できない

  • メリット
    キャッシュのデータが古くならなく、常に最新のデータの状態になる。
  • デメリット
    すべてのデータをキャッシュに書き込むためアクセスされないキャッシュで圧迫される可能性。
    (「有効期限 (TTL) の値を追加する」を使用すると、無駄なスペースを最小限に抑えることができる)

[データの欠落]
ノード障害またはスケールアウトにより、新規ノードをスピンアップすると、データが欠落する。このデータは、DBで追加、更新されるまで失われ続ける。最小限に抑えるには、[遅延読み込み] を書き込みスルーで指定。

スケーリング方法

Redis クラスターのスケーリングは、CPU 使用率(PrimaryEngineCPUUtilization)などのメトリクスに基づいて自動で行われる。スケーリングは、ターゲット追跡ポリシーを使用して、指定されたしきい値に合わせてノード数を増減。xスケーリング後も、アプリケーションは同じエンドポイント(Configuration endpoint)を使い続けられる。スケーリング方法は2種類ある。

  • 水平スケーリング(horizontal)
    横方向にノード数を増減する方法。
  • 垂直スケーリング(vertical)
    縦方向にノードの性能をグレードアップ、ダウンする方法。
水平スケーリング垂直スケーリング
Memcached同じAZ内で最大40個ノードを追加する。処理能力向上。性能を向上させるだけ。
Redis
クラスター無
ひとつのシャード内でスケーリング。シャードの追加はできない。新しいクラスターに変更後、ノードが作成されてデータがコピーされる。数秒のダウンタイムが生じる。
Redis
クラスター有
シャードの追加ができるようになる。ダウンタイムを発生させず、スケーリング可能。
セッション管理

[参考]

[ローカルセッションキャッシングを使用したスティッキーセッション]

セッションの有効性は、クライアント側のCookieや、リクエストをWebサーバーにルーティングするロードバランサーで設定できる 構成可能な期間パラメーターなど、さまざまな方法で判断できる。

  • 利点
    アプリケーションを実行している同じWebサーバーにセッションを保存しているため、費用対効果が高くネットワークの待ち時間がなくなり セッションの取得が高速である。
  • 欠点
    個々のノードで保存セッションを使用する場合、障害が発生時に障害が発生したノードに常駐するセッションが失われる可能性がある。さらに、Webサーバーの数が変更された場合、特定サーバーにアクティブなセッションが存在する可能性があり、トラフィックがサーバー 全体に不均等に分散される可能性がある。適切に軽減されない場合、アプリケーションのスケーラビリティを妨げる可能性がある。

●分散セッション管理

個々のWebサーバーからアクセスできるセッションに共有データストレージを提供。Webサーバー自体からHTTPセッションを抽象化できる。 RedisやMemcachedなどのインメモリキー/値ストアを活用する。(Key / Valueデータストアは非常に高速でミリ秒未満の遅延を提供する)

  • 利点
    HTTPセッションだけでなく、任意のデータをキャッシュするためにも利用できる。アプリケーションの全体的なパフォーマンスを向上。
  • 欠点
    ネットワーク遅延とコストの増加。
メトリクス

Memcached のメトリクス [参考公式サイト]
●Evictions
新しく書き込むための領域を確保するためにキャッシュが排除した、期限切れではない項目の数。

●Get Misses
キャッシュが受信したが、リクエストされたキーが見つからなかった get リクエストの数。

接続エンドポイント

[Redis]

スタンドアロンノード読み取りオペレーションと書き込みオペレーションの両方にノードのエンドポイントを使用
Redis OSS (クラスターモードが無効) クラスターすべての書き込みオペレーションにプライマリエンドポイントを使用する。読み込みエンドポイントを使用して、すべてのリードレプリカ間でエンドポイントへの着信接続を均等に分割。個々のノードエンドポイント (API/CLI ではリードエンドポイント) を読み取りオペレーションに使用する。
Redis OSS (クラスターモードが有効) クラスタークラスターモードが有効なコマンドをサポートするすべてのオペレーションで、クラスターの設定エンドポイント[Configuration endpoint]を使用する。Redis OSS 3.2 以降の Redis OSS クラスターをサポートするクライアントを使用する必要がある。個々のノードエンドポイント (API/CLI ではリードエンドポイント) から読み取ることもできる。

[Memcached]

ElastiCache サーバーレスキャッシュコンソールからクラスターエンドポイント DNS とポートを取得する

DocumentDB(MongoDB互換)

ドキュメントデータベースであり、JSONデータの保存、クエリ、インデックス作成が簡単に行える。MongoDBのワークロードをサポートする。 ミッションクリティカルなMongoDBのワークロードを大規模に運用するときに自動レプリケーション、継続的なバックアップ、および厳格な ネットワーク分離、可用性を提供するためにゼロから設計された、非リレーショナルデータベースサービス。また、数分で低レイテンシーの リードレプリカを最大15個まで追加し、読み取り容量を1秒あたり数百万件のリクエストにまで増加させることができる。 データのサイズは関係なし。マルチAZをサポートしていない。

[特徴]
・コンテンツおよびカタログ管理
・プロファイル管理
・モバイルアプリケーションとウェブアプリケーション

DocumentDBの優位性は柔軟にクエリが書ける点。アクセスパターンが複数ある、もしくは読み切れない場合にはDocumentDBの方が便利。

※スケーリング性能でいえばDynamoDBの方が高い。
※MongoDBと互換性あり。

Timestream

高速かつスケーラブルなサーバーレス時系列データベースサービス。1日あたり数兆件規模のイベントを最大 1,000 倍の速度でより簡単に保存及び リアルタイム分析でき、行動傾向の特定に役立つ。

・数百テラバイトのデータを格納、保存
・容量とパフォーマンスを自動的にスケールアップまたはスケールダウン
・データ用のメモリストアと履歴データ用の磁気ストアにより、データライフサイクル管理を簡素化

※時系列データ:メモリやCPUなどの利用状況の推移や気温の移り変わりなど時間的に変化する情報をデータとする

バッチ書込みTimestreamへのデータ書き込み処理が高速化できる。複数のログイベントを1回の書込み操作で処理することができ、NW遅延や書き込み回数によりオーバーヘッドが軽減されるため、大量のデータ生成において効率的である。
マルチメジャーレコード・1つのレコード内に複数のメジャー(項目)をまとめて書き込める形式
・従来のシングルメジャーレコードは「1項目につき1レコード」のみ書き込み可能
・1回のリクエストで書き込めるレコード数は最大100件の制限があり、101件以上は複数リクエストが必要
・実装の手間やパフォーマンス効率を改善する
[マグネティックストレージレイヤーへの書き込み]

・時系列データを長期保存するためにマグネティック層へ自動的に移行
・大容量データのコスト効率と耐久性を向上させる

[スケジュールドクエリによる格納と分析]

・定期的にクエリを実行し、データの集計やフィルタリングを自動化
・保存済みの時系列データを分析してダッシュボードやレポートに活用可能

QLDB

(Quantum Ledger Database)
フルマネージド型。台帳データベース(※台帳データベース:変更履歴などを残し、それらを履歴として検証可能なものとする)

Neptune

フルマネージド型。グラフデータサービス(「ノード」「エッジ」「プロパティ」要素から成り立つ)

Key spaces

フルマネージド型。Apache Cassandra互換のデータベースサービス。

CDC(変更データキャプチャ)

※継続的なレプリケーション

サポートされているターゲットデータストアへの初回(全ロード)の意向が完了した後、継続的な変更をキャプチャするタスクを作成できる。



ABOUT DIRECTOR
Yumi Suto

人生最初のダッツは抹茶

【取得資格】
・2020/07:ITパスポート
・2021/02:ITIL ver.3
・2021/09:AWS SAA-C02
・2022/06:AWS DVA-C01
・2024/04:AWS SOA-C02
・2025/07:AWS SAP-C02
・2025/08:PL-900
・2025/09:AWS DOP-C02
・2025/11:MLA-C01

error: Content is protected !!