0
0

AWS DynamoDBについて理解を深める

Last updated at Posted at 2024-09-14

DynamoDBとは

Amazon Web Services(AWS)が提供するフルマネージドのNoSQLデータベースサービスです。自動スケーリングと高可用性を提供し、パフォーマンスを維持しながら大規模なアプリケーションに対応できるよう設計されています。DynamoDBのアーキテクチャは手動でのパーティショニングやスケーリングの必要がなく、開発者にとってシームレスなエクスペリエンスを提供します。

DynamoDBの動作

1. リクエストの流れ

リクエストルーター: アプリケーションからのリクエストはまずリクエストルーターに到達します。
認証: ルーターがリクエストを認証します。
Auto Admin: DynamoDBはパーティションとメンテナンスを自動的に管理し、スケーラビリティとパフォーマンスを保証します。
データ書き込み: データはストレージノードに書き込まれ、B-treeに保存されます。各書き込みはレプリケーションログに記録されます。
ログ伝播: レプリケーションログの内容がセカンダリインデックスに反映され、効率的なデータ検索を可能にします。

2. 自動スケーリングとパーティショニング

DynamoDBは大規模なデータセットを処理するためにデータを自動的に複数のノードにパーティショニングします。これにより、データ量に関係なく高可用性とパフォーマンスが維持されます。オートスケーリング機能により、データベースへのトラフィックに応じて読み書きのキャパシティが調整され、コストとパフォーマンスが最適化されます。

DynamoDBとRDBMSの比較:主な制約

DynamoDBには従来のリレーショナルデータベース(RDBMS)に対する多くの利点がありますが、いくつかの制約も存在します。

テーブル間の結合ができない

理由: データがパーティションに分散されているため、RDBMSのようにテーブル間の結合が困難です。
対処方法: データの集約はアプリケーション側で行う必要があります。

外部キーがない

理由: DynamoDBはフレキシブルなスキーマを持ち、キーはパーティションキーとソートキーに限定されます。外部キー制約は使用できません。
対処方法: 関係性はアプリケーションロジックで管理する必要があります。

条件指定は基本的にプライマリキー以外は使用できない

理由: データが分散されているため、プライマリキー以外での検索には制約があります。
対処方法: プライマリキー以外の項目で検索する場合、セカンダリインデックスを作成する必要があります。

副問い合わせができない

理由: データの分散性により、副問い合わせが実行できません。
対処方法: フィルタリングや集約はアプリケーション側で実行します。

GROUP BYなどの集約関数が存在しない

理由: DynamoDBはデータを分散して保存しているため、サーバーサイドでの集約処理がサポートされていません。
対処方法: アプリケーション内で集計処理を行います。

OR、NOTなどの論理演算子がなくANDのみ

理由: クエリは効率的なデータ検索を重視しており、複雑な条件指定(例: OR, NOT)はサポートされていません。
対処方法: クエリのフィルタなどで代替します。

DynamoDBの特徴

  1. データフィルタリング
    フィルタを使用して、クエリやスキャンの結果を特定の条件に絞り込むことが可能です。

2. TTL(Time to Live)

データの保存期間を設定し、自動的に期限切れのデータを削除する機能です。これにより、ストレージコストを削減し、データのクリーンアップを容易にします。

3. DAX(DynamoDB Accelerator)

読み取り専用のインメモリキャッシュを提供し、読み取りパフォーマンスを大幅に向上させます。

4. DynamoDB Streams

テーブル内のデータ変更(追加、更新、削除)をリアルタイムでキャプチャする機能です。これにより、変更を追跡したり、Lambda関数をトリガーするなどの応用が可能です。

5. トリガー

DynamoDB Streamsを使用してLambda関数をトリガーし、テーブルのデータ変更に自動的に反応することができます。

6. グローバルテーブル

複数のAWSリージョンにまたがるマルチリージョン、マルチマスターのデータベースを作成できます。これにより、世界中のユーザーに対して低レイテンシーでデータにアクセスできます。

DynamoDB Streamsの詳細

DynamoDB Streamsは、テーブルのリアルタイム変更をキャプチャするための強力な機能です。

ユースケース:

リアルタイム変更の検出
非同期データ処理
データの複製

書き込みオプション:

  • KEYS_ONLY: 変更された項目のキー属性のみを保存します。
  • NEW_IMAGE: 変更後の項目データ全体を保存します。
  • OLD_IMAGE: 変更前の項目データ全体を保存します。
  • NEW_AND_OLD_IMAGE: 変更前後の項目データ全体を保存し、項目の変更前後の状態を完全に比較できます。

データ保持と暗号化:

ストリームデータは暗号化され、最大24時間保存されます。

ストリームの構成:

ストリームはシャードと呼ばれる単位で構成され、各シャードにストリームレコードが含まれます。各レコードにはDynamoDBテーブルでの変更内容が記録されます。

DynamoDBの主なAPI操作

  • Scan: テーブル全体またはインデックスの項目を取得
  • PutItem: 項目を新規または更新して追加
  • UpdateItem: 項目の一部の属性を更新
  • DeleteItem: 項目を削除
  • BatchWriteItem: 一度に最大25個の項目を一括で追加または削除
  • TransactGetItems: 最大10個の項目を一度にトランザクションで取得
  • TransactWriteItems: 最大100個の書き込みアクションをトランザクションで一括実行
  • GetItem: プライマリキーを使用して単一の項目を取得
  • BatchGetItem: 最大100個の項目を一括で取得
    Query: プライマリキーとソートキーに基づいて項目を検索

まとめ

DynamoDBは、スケーラブルでフルマネージドなNoSQLデータベースで、リアルタイムデータ処理やグローバル展開などさまざまなユースケースに対応しています。従来のリレーショナルデータベースと比較していくつかの制約はありますが、スケーラビリティ、パフォーマンス、柔軟性の点で現代のアプリケーションにとって理想的な選択肢となり得ます。

DynamoDBのアーキテクチャ、機能、および制約を理解することで、その能力を最大限に活用し、アプリケーションのニーズに適応するデータモデルを設計・実装できます。

【参考】

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