Amazon DynamoDB

Amazon DynamoDB

概要と特徴

項目 説明
サービス名 Amazon DynamoDB (アマゾン ダイナモディービー)
提供元 Amazon Web Services (AWS)
種類 NoSQLデータベース (Not only SQL)
特徴 フルマネージド(サーバー管理不要)なキーバリューおよびドキュメントデータベース。高いスケーラビリティ、パフォーマンス、耐久性、可用性を備えている。サーバーレス (Serverless) で利用可能。
データモデル キーバリュー型 (Key-Value) およびドキュメント型 (Document)
トランザクション ACIDトランザクション (ACID Transactions) をサポート

分類

  • データベースの種類: NoSQLデータベース
  • データモデル: キーバリュー型、ドキュメント型
  • 管理形態: フルマネージドサービス (Fully Managed Service)

上位概念・下位概念

概念 具体例 説明
上位概念 クラウドコンピューティング (Cloud Computing) インターネット経由でコンピューティングリソースを提供するサービス形態。DynamoDBはこのサービス群の一つ。
上位概念 AWS (Amazon Web Services) Amazonが提供するクラウドサービスの総称。DynamoDBはこの中の一サービス。
上位概念 NoSQLデータベース リレーショナルデータベース(RDB)以外のデータモデルを持つデータベースの総称。
下位概念 テーブル (Table) DynamoDBにおけるデータ格納単位。
下位概念 アイテム (Item) テーブル内の1つの行(レコード)に相当。
下位概念 属性 (Attribute) アイテム内の個々のデータ(カラム)に相当。

メリット

  • スケーラビリティ (Scalability): データ量やトラフィックの増加に自動的かつ無制限にスケール可能。
  • パフォーマンス (Performance): どのような規模でも一貫した1桁ミリ秒 (Single-digit Millisecond) のレイテンシを提供。
  • 運用負荷の軽減: フルマネージドであり、サーバー管理、パッチ適用、バックアップなどの作業が不要。
  • 耐久性 (Durability)・可用性 (Availability): データを複数のアベイラビリティゾーン (AZ) にわたって自動的に複製。耐久性は99.999999999% (イレブンナイン) を実現。
  • コスト効率: オンデマンド (On-Demand) やプロビジョニング済みキャパシティ (Provisioned Capacity) など、柔軟な料金モデルがある。

デメリット

  • 複雑なクエリへの制限: リレーショナルデータベース (RDB) のような複雑なJOIN操作や柔軟なクエリは困難。
  • スキーマ設計の重要性: アプリケーションのアクセスパターンを考慮したテーブル設計(特にパーティションキーとソートキーの選定)が極めて重要。不適切な設計はパフォーマンスの低下を招く。
  • 完全な互換性がない: 標準的なSQL(構造化照会言語)ではないため、RDBからの移行には学習コストと設計変更が必要。

既存との比較

比較対象 Amazon DynamoDB (NoSQL) リレーショナルデータベース (RDB) 例: Amazon RDS
データモデル キーバリュー型、ドキュメント型。非構造化・半構造化データ向き。 テーブル形式。厳密なスキーマ定義が必要。
スケーリング 水平スケーリング(シャーディング)。無制限に近いスケールが可能。 垂直スケーリングが基本。水平スケーリングは複雑。
クエリ プライマリキーまたはインデックスに基づくシンプルなクエリが中心。 複雑なJOIN、集計、柔軟なクエリが可能。
トランザクション 特定のアイテムやテーブル内での操作に限定的 (ACID)。 複数のテーブルにまたがる複雑なトランザクションに適している。
レイテンシ 規模に関わらず一貫して低い(ミリ秒単位)。 規模が大きくなるとレイテンシが増加する傾向がある。

競合

  • Azure Cosmos DB (Microsoft)
  • Google Cloud Firestore (Google Cloud Platform)
  • MongoDB Atlas (MongoDB)
  • Cassandra (オープンソース、またはDataStaxなどの商用版)

導入ポイント

  1. アクセスパターンの特定: アプリケーションのクエリ (Query) およびデータ更新 (Update) のパターンを徹底的に分析する。
  2. キー設計の最適化: パーティションキー (Partition Key) とソートキー (Sort Key) を用いて、ワークロードを均等に分散し、効率的なデータ取得を可能にするように設計する。
  3. グローバルセカンダリインデックス (GSI) の活用: プライマリキー以外の属性で検索が必要な場合にGSIを作成する。
  4. キャパシティモードの選択: トラフィックの変動が大きい場合はオンデマンド、安定している場合はプロビジョニング済みキャパシティを選択し、コストを最適化する。

注意点

  • ホットパーティション: 特定のパーティションキーへのアクセスが集中すると、パフォーマンスが低下する(スロットリングの原因)。これを避けるための設計が必須。
  • データ構造の柔軟性: スキーマレスだが、データの一貫性を保つため、アプリケーション側での整合性管理が必要。
  • 高額なGSI利用: GSIの使用はコストが高くなる可能性があるため、インデックス設計には注意が必要。

今後

  • サーバーレス化の推進: AWS Lambdaなどのサーバーレス機能との連携がさらに強化される。
  • 開発者体験の向上: ツールやSDKの改善による開発の容易化。
  • 継続的な新機能の追加: 機械学習 (ML) やデータ分析 (Analytics) サービスとの連携強化。

関連キーワード

  • AWS Lambda
  • API Gateway
  • DynamoDB Streams
  • Global Tables
  • DAX (DynamoDB Accelerator)
  • Eventually Consistent (結果整合性)
  • Strongly Consistent (強い整合性)
  • Partition Key
  • Sort Key
  • Local Secondary Index (LSI)
  • Global Secondary Index (GSI)
  • Write Capacity Unit (WCU)
  • Read Capacity Unit (RCU)
  • Throttling (スロットリング)