PMする上で必要になってきたのでおさらい
AWS DynamoDBとは?
AWSが提供するスケーラブルなフルマネージド型NoSQLデータベースサービス。 高い可用性、低レイテンシ、スケーラビリティを備えており、リアルタイムアプリケーションに最適。
DynamoDBの特徴
-
サーバーレス
- インフラ管理が不要。必要に応じて自動スケール。
- プロビジョニング(リソース確保)やパッチ適用が不要。
-
スケーラブル
- 数バイトのデータから数テラバイト規模まで自動スケール。
- スループット(読み取り/書き込み性能)を動的に調整可能。
-
高速なパフォーマンス
- ミリ秒単位の低レイテンシでデータを処理。
- リアルタイムのレスポンスが必要なアプリケーションに適している。
-
データモデルの柔軟性
- キー/値ストア型とドキュメント型の両方に対応。
- JSONや属性を持つ複雑なデータも扱える。
-
フルマネージド
- 高可用性(マルチAZ配置)とデータの耐障害性を自動で提供。
-
イベント駆動
- DynamoDB Streamsを使ってデータの変更をトリガーとして他のサービス(例: Lambda)を実行可能。
DynamoDBの基本構造
1. テーブル
- データを格納する基本単位。
- 各テーブルにはプライマリキーが設定される。
2. アイテム
- テーブル内のデータの1つの単位(行に相当)。
- アイテムは属性を持つ(列に相当)。
3. 属性
- アイテムを構成するデータフィールド(値)。
- 型: 文字列(String)、数値(Number)、ブール値(Boolean)、マップ(Map)、リスト(List)など。
4. プライマリキー
- 各アイテムを一意に識別するキー。
- パーティションキー: 単一キーでアイテムを識別。
- パーティションキー+ソートキー: 複数属性を組み合わせて識別。
DynamoDBの主なユースケース
1. セッションデータの管理
- シナリオ: ユーザーのログインセッション情報を保存。
-
理由:
- 高速なデータ読み書き。
- セッションデータは軽量でスケールが必要。
2. リアルタイムアプリケーション
- シナリオ: チャットアプリ、IoTデバイスのデータ管理。
-
理由:
- ミリ秒単位のレスポンス。
- DynamoDB Streamsでリアルタイム処理。
3. ショッピングカートや在庫管理
- シナリオ: Eコマースサイトでのショッピングカートデータ。
-
理由:
- 柔軟なデータモデル。
- 高可用性でスケール可能。
4. ゲームのリーダーボード
- シナリオ: スコアランキングやプレイヤーデータの管理。
-
理由:
- ソートキーを使った効率的なスコアランキングの取得。
5. データキャッシュ
- シナリオ: 頻繁にアクセスされるデータの保存。
-
理由:
- 高速で低レイテンシの読み取り。
DynamoDBの料金体系
DynamoDBの料金は、以下の項目に基づいて課金されます:
-
プロビジョンドスループット
-
読み取りキャパシティユニット(RCU):
- 1秒間に1つのデータ(最大4KB)を強力整合性で読み取れる単位。
-
書き込みキャパシティユニット(WCU):
- 1秒間に1つのデータ(最大1KB)を書き込める単位。
-
読み取りキャパシティユニット(RCU):
-
オンデマンドモード
- データ読み書きのリクエスト数に基づく課金(使用量が不規則な場合に適)。
-
ストレージ
- 保存されるデータの量に応じて課金($0.25/GB/月)。
-
DynamoDB Streams
- データ変更イベントを使用する場合、ストリームの利用料金が発生。
-
バックアップとリストア
- 自動バックアップ: 無料。
- オンデマンドバックアップ: 保存容量に応じて課金。
DynamoDBの導入手順
1. テーブルの作成
- AWSコンソールで「DynamoDB」を開く。
- 「テーブルを作成」をクリック。
- テーブル名とプライマリキーを指定。
- 例: パーティションキー =
UserID
。
- 例: パーティションキー =
2. データの挿入
- コンソールからデータを直接入力。
- または、AWS SDKやCLIを使ってデータを挿入。
3. データの取得
- プライマリキーでアイテムをクエリ。
- ソートキーを使った範囲検索も可能。
4. DynamoDB Streamsの設定(オプション)
- ストリームを有効にしてデータ変更イベントを処理。
DynamoDBのメリットとデメリット
メリット
-
スケーラビリティ
- 自動スケールで、大量のトラフィックにも対応。
-
高可用性
- マルチAZ配置で耐障害性を確保。
-
サーバーレス
- インフラ管理が不要で、アプリケーション開発に集中できる。
デメリット
-
複雑なクエリには不向き
- SQLのようなJOIN操作がないため、リレーショナルデータベースが必要な場合は適さない。
-
設計が重要
- プライマリキーやアクセスパターンを適切に設計しないと、パフォーマンスが低下。
DynamoDBのベストプラクティス
-
適切なプライマリキー設計
- 頻繁にアクセスするデータを効率的に取得できるキーを設定。
-
オンデマンドモードの活用
- 使用量が不規則な場合は、オンデマンドモードでコスト最適化。
-
DynamoDB Streamsの活用
- データの変更をリアルタイムでトリガーに利用。
-
データモデリングの計画
- アクセスパターンを事前に設計してパフォーマンスを最大化。
感想
NoSQLとRDBの使い分けについて、詳しく理解していないと選定が難しい。その辺りは実際に触ってみないとわからない気がする。