みなさんは、DynamoDB 使っていますか〜?
僕は一度もありません。
アプリケーションエンジニアとしてRDBMSは何度も触ってきたのですが、
NoSQLの代表的なサービスを触る機会が実務で出てきたので、ざっくり理解するところまでに至りたいと思い記事を執筆しています。
特徴
フルマネージドのNoSQLデータベース
AWSがインフラの管理を行うため、ユーザーはインフラのメンテナンスを気にせずに使用可能。
自動スケーリングと高いパフォーマンス
読み書きのスループットを自動でスケールさせ、オンデマンドモードではアクセス量に応じたパフォーマンスが提供されます。
高可用性と耐障害性
データは複数のリージョンやアベイラビリティゾーンに分散して保存されるため、障害耐性が高く、可用性が99.999%を実現しています。
柔軟なデータモデル
各アイテムに異なる属性を持たせることができるスキーマレスデザインを採用しており、データ構造の変更が容易です。
トランザクション対応
ACIDトランザクションをサポートしているため、複数のテーブル間で整合性を維持しながらデータを操作できま
(RDBMSと比較すると弱い
ユースケース
アプリケーション
IoTデバイスやモバイルアプリのバックエンド
リアルタイムのデータを扱い、大量のリクエストを処理する必要があるIoTデバイスやモバイルアプリケーションのデータストアとして適しています。
リアルタイムアナリティクス
DynamoDB Streamsを利用して、データ変更を他のシステムでリアルタイムに処理できます。変更があるたびにLambdaで処理するアーキテクチャが一般的です。
ECサイトやソーシャルアプリのセッション管理
DynamoDBの高速な読み書き性能を活かして、ECサイトのセッション管理やソーシャルアプリのユーザー活動データの保存に利用されます。
IaC(Infrastructure as Code: Terraform)
複数環境でのデプロイ
テスト環境・本番環境用のDynamoDBテーブルを、同じコードで異なる環境にデプロイ可能。これにより、環境間の設定の違いを一元管理しやすくなります。
機能
DynamoDB Streams
データの変更をストリームとして記録し、変更イベントに対してリアルタイムでアクション(例:Lambdaを使用した処理)を実行可能です。
セカンダリインデックス
主キー以外の属性を指定してクエリを実行できるようにするための「グローバルセカンダリインデックス(GSI)」と、同一パーティションキーで異なるソートキーを持つ「ローカルセカンダリインデックス(LSI)」があります。
自動スケーリング
読み書きキャパシティのスループットを動的に調整可能で、ピーク時のトラフィックに合わせて自動でスケーリングされます。
バックアップとリカバリ
DynamoDBはオンデマンドバックアップとポイントインタイムリカバリ(PITR)をサポートし、指定された時点にデータを復元できます。
DAX (DynamoDB Accelerator)
キャッシュ機能であるDAXを利用することで、ミリ秒単位の応答が要求されるアプリケーションのパフォーマンスをさらに向上できます。
トランザクション機能
ACID特性を持つトランザクションをサポートしており、一貫性のあるデータ処理が可能です。
RDBMSとの違いまとめ
項目 | DynamoDB | RDBMS |
---|---|---|
データモデル | スキーマレスのNoSQL。テーブルとアイテム形式。 | リレーショナルモデル。行と列形式で固定スキーマ。 |
スケーラビリティ | 水平スケーリング対応。オンデマンドスケーリングが可能。 | 垂直スケーリングが一般的。水平スケーリングは難しい。 |
トランザクション | ACIDトランザクション対応だが、複雑なトランザクションには非推奨。 | ACIDトランザクションを標準サポート。複数テーブル間の処理が容易。 |
クエリとインデックス | SQL非対応。主キーやインデックスによるクエリが中心。 | SQL対応。JOINを含む複雑なクエリが可能。 |
スキーマの柔軟性 | スキーマレス。柔軟なデータ構造に対応。 | 固定スキーマ。テーブル構造の変更にはスキーマ変更が必要。 |
コスト | オンデマンドやプロビジョンドスループットに基づく柔軟な料金体系。 | ライセンスやインフラ費用が発生。追加リソースにコストがかかる。 |
ユースケース | IoTデータ、モバイルアプリ、リアルタイム分析、セッション管理。 | 銀行業務、ERPシステム、データ分析、複雑なリレーション管理。 |