0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS DVA対策メモ(DynamoDB)

Last updated at Posted at 2025-01-16

Amazon DynamoDBのアーキテクチャ、データ配置、結果整合性

Amazon DynamoDBの基本的なアーキテクチャ、データの配置方法、および結果整合性について解説します。


1. DynamoDBのアーキテクチャ

  • 分散型NoSQLデータベース:
    • DynamoDBは分散型の設計で、データの高可用性と高スループットを提供します。
  • 基本構造:
    • テーブル: データを格納する基本単位。
    • アイテム: テーブル内の1行に相当。
    • 属性: アイテム内のフィールド。

2. データ配置

パーティションの仕組み

  • DynamoDBはデータを複数のパーティションに分散して保存します。
  • パーティションキー(主キーの一部)を使用して、データを均等に分散。

パーティション設計のポイント

  • 一意性を保つキーを選択することで、データとトラフィックを均等に分散。
    • 適切な例: ユーザーID、日付の組み合わせ。
    • 不適切な例: 固定値や偏りのある値。

パーティションの利点

  • スケーラビリティ: 各パーティションが独立して処理を行うため、大量のデータを効率的に処理。
  • コスト効率: データアクセスパターンに基づいた設計で無駄なコストを削減。

3. 結果整合性

読み取り整合性のタイプ

  1. 結果整合性 (Eventually Consistent Reads):

    • デフォルトの読み取り整合性。
    • データ変更後、数ミリ秒の遅延で最新データが反映。
    • 高スループットと低コストを実現。
  2. 強整合性 (Strongly Consistent Reads):

    • 最新データを即座に返す。
    • パフォーマンスよりもデータの正確性が重要な場合に使用。
  3. トランザクション読み取り (Transactional Reads):

    • 複数アイテムを一貫性を保って操作。
    • ACID特性をサポート。

整合性の選択ポイント

  • 結果整合性:
    • 高トラフィックで一時的なデータ遅延が許容される場合に適応。
  • 強整合性:
    • 正確なデータが必要なシステム(例: 金融や注文処理)で使用。
  • トランザクション読み取り:
    • 複数アイテムを確実に更新・取得したい場合に最適。

まとめ表

特徴 説明 主な用途
アーキテクチャ 分散型NoSQLデータベース。テーブル、アイテム、属性で構成。 高可用性と高スループットが必要なアプリケーション
データ配置 パーティションキーに基づきデータを分散。 均等なデータ分散とスケーラビリティの向上。
結果整合性 デフォルトの整合性モデル。更新後すぐには反映されない場合があるが、高スループットを提供。 データ遅延を許容するアプリケーション。
強整合性 最新データを即座に読み取るモデル。 データ正確性が重要な場合。
トランザクション整合性 複数アイテムの一貫性を保証。ACID特性を提供。 複雑な操作や安全性が求められる場合。

ユースケース例

  • 結果整合性:
    • ソーシャルメディアのフィード。
    • ユーザーランキングのリアルタイム更新。
  • 強整合性:
    • 金融取引や注文処理。
    • インベントリ管理。
  • トランザクション整合性:
    • 複数テーブルをまたがる注文更新。
    • バッチ処理。

Amazon DynamoDBのキー属性とインデックス

Amazon DynamoDBでは、効率的なデータ管理とクエリ実行のためにキー属性とインデックスを利用します。


1. キー属性

1.1 主キー(Primary Key)

  • DynamoDBテーブルでアイテムを一意に識別するための属性。
  • 主キーの種類:
    1. 単一キー (Simple Primary Key):
      • パーティションキー(Partition Key)のみを使用。
      • 各アイテムは一意のパーティションキーを持つ。
      • 例: ユーザーID。
    2. 複合キー (Composite Primary Key):
      • パーティションキーとソートキー(Sort Key)の組み合わせ。
      • パーティションキーが同じでも、異なるソートキーを持つことで一意性を保つ。
      • 例: 注文テーブルで、ユーザーID(パーティションキー)と注文日(ソートキー)。

1.2 主キー設計のポイント

  • パーティションキーの選択:
    • 均等にデータを分散する値を選ぶ。
    • 偏りがあると特定のパーティションが過負荷になる。
  • ソートキーの活用:
    • 時系列データや範囲クエリを活用する場合に便利。

2. インデックス

2.1 グローバルセカンダリインデックス(GSI: Global Secondary Index)

  • 特徴:
    • パーティションキーとソートキーを独立して指定可能。
    • テーブルの主キーとは異なる組み合わせでクエリを実行。
  • 用途:
    • 異なる属性で柔軟な検索を実現。
    • 例: メールアドレスをキーとしてユーザーを検索。

2.2 ローカルセカンダリインデックス(LSI: Local Secondary Index)

  • 特徴:
    • テーブルのパーティションキーを共有し、異なるソートキーを指定。
    • テーブル作成時にのみ設定可能(後から追加不可)。
  • 用途:
    • 同じパーティションキー内で異なる属性でソートする場合。
    • 例: ユーザーIDで検索し、ソートキーを日付順に並べる。

2.3 インデックス設計のポイント

  1. GSI:
    • 柔軟なクエリが可能。
    • 読み取り/書き込みキャパシティを個別に設定可能。
  2. LSI:
    • パーティションキー依存の範囲クエリに最適。
    • テーブルのデザイン段階で慎重に設定が必要。

3. 主キーとインデックスの比較表

種類 特徴 主な用途
単一キー パーティションキーのみでアイテムを識別。 ユニークIDでデータを一意に管理。
複合キー パーティションキーとソートキーの組み合わせでアイテムを識別。 時系列データや特定の属性でのクエリ。
グローバルセカンダリインデックス (GSI) 主キーとは異なるパーティションキーとソートキーを設定可能。 柔軟な検索パターンを実現。
ローカルセカンダリインデックス (LSI) 主キーのパーティションキーを共有し、異なるソートキーでクエリ可能。 同じパーティションキー内で異なる属性でのソート。

4. ユースケース例

  • 単一キー:
    • ユーザー情報をユーザーIDで検索。
  • 複合キー:
    • ユーザーIDと日付を組み合わせて注文履歴を検索。
  • GSI:
    • メールアドレスやその他のユニーク属性で検索。
  • LSI:
    • ユーザーIDごとのイベント履歴を日付順にソート。

Amazon DynamoDBのキャパシティユニット

Amazon DynamoDBでは、データの読み取りおよび書き込みのパフォーマンスを設定するためにキャパシティユニットを使用します。


1. キャパシティモード

DynamoDBでは、2種類のキャパシティモードを提供しています。

1.1 オンデマンドキャパシティモード

  • 特徴:
    • 自動スケーリングでトラフィックに応じて必要なキャパシティを調整。
    • 使用したリクエスト数に応じて料金が発生。
  • 適したユースケース:
    • トラフィックが予測困難なアプリケーション。
    • 開発環境や小規模アプリケーション。

1.2 プロビジョンドキャパシティモード

  • 特徴:
    • 読み取りおよび書き込みキャパシティを手動で設定。
    • ステーブルなトラフィックを持つアプリケーションに最適。
  • スケーリング方法:
    • 自動スケーリング機能を使用してキャパシティを調整可能。
  • 適したユースケース:
    • トラフィックが一定で予測可能なアプリケーション。

2. キャパシティユニットの種類

2.1 読み取りキャパシティユニット (RCU: Read Capacity Unit)

  • 1 RCUの定義:
    • 1秒間に最大4KBのデータを1回の結果整合性読み取りで処理可能。
    • 強整合性読み取りでは2倍のRCUが必要。
    • トランザクション読み取りでは4倍のRCUが必要。

2.2 書き込みキャパシティユニット (WCU: Write Capacity Unit)

  • 1 WCUの定義:
    • 1秒間に最大1KBのデータを1回の書き込みで処理可能。
    • トランザクション書き込みでは2倍のWCUが必要。

3. キャパシティの最適化

3.1 アクセスパターンの分析

  • アプリケーションの読み取り/書き込み頻度を把握し、適切なキャパシティモードを選択。

3.2 キャッシュの活用

  • DynamoDB Accelerator (DAX) を使用して、高速でキャッシュされた読み取りを実現。

3.3 パーティション設計

  • パーティションキーを適切に設計して、負荷を均等に分散。

4. 主なユースケース

キャパシティモード 特徴 主な用途
オンデマンドキャパシティ 自動スケーリングで柔軟な対応が可能。 不規則なトラフィック、開発環境、小規模アプリ。
プロビジョンドキャパシティ 手動でキャパシティを設定し、予測可能なトラフィックに対応。 一定のトラフィックを持つアプリケーション。

Amazon DynamoDBのAPIと主要パラメータ

DynamoDBの主要APIとそのパラメータを以下にまとめます。

API名 説明 主なパラメータ
PutItem テーブルにデータを追加または更新。 TableName, Item, ConditionExpression, ReturnValues
GetItem 主キーを指定してデータを取得。 TableName, Key, ProjectionExpression, ConsistentRead
Query パーティションキーを基準に条件を満たすアイテムを取得。 TableName, KeyConditionExpression, ExpressionAttributeValues, ProjectionExpression, ScanIndexForward
Scan テーブル全体をスキャンして条件を満たすアイテムを取得。 TableName, FilterExpression, ExpressionAttributeValues, ProjectionExpression, Limit
UpdateItem 既存のアイテムを更新。 TableName, Key, UpdateExpression, ExpressionAttributeNames, ExpressionAttributeValues, ReturnValues
DeleteItem 主キーを指定してアイテムを削除。 TableName, Key, ConditionExpression, ReturnValues
BatchWriteItem 複数のアイテムを一括で書き込みまたは削除。 RequestItems, ReturnConsumedCapacity
BatchGetItem 複数のアイテムを一括で取得。 RequestItems, ProjectionExpression, ConsistentRead
CreateTable 新しいテーブルを作成。 TableName, AttributeDefinitions, KeySchema, ProvisionedThroughput

API活用のポイント

  • 条件式を活用:
    • ConditionExpression を使用して、データ競合や誤った更新を防止。
  • 効率的なデータ取得:
    • ProjectionExpression を活用して必要な属性のみ取得し、コストを最適化。
  • バッチ操作:
    • 一括操作(BatchWriteItem, BatchGetItem)を活用して効率化。

その他機能

機能名 概要 主なユースケース
TTL (Time to Live) アイテムに有効期限を設定し、自動で削除する機能。 セッションデータ、キャッシュの自動クリア。
DAX DynamoDB専用のインメモリキャッシュで読み取り操作を高速化。 高頻度の読み取り操作、ランキングや商品カタログの表示。
DynamoDB Streams テーブルのデータ変更をリアルタイムでキャプチャ。 データ変更ログの監視、レプリケーション、リアルタイム通知。
Triggers DynamoDB StreamsとLambdaを組み合わせてデータ変更イベントを処理。 リアルタイム通知、変更データの同期や集計処理。
グローバルテーブル マルチリージョン間でデータを同期し、低レイテンシと高可用性を提供。 グローバルアプリケーション、リージョン障害のフェイルオーバー対策。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?