DynamoDB
サービス概要
高速で予測可能なパフォーマンスとシームレスなスケーラビリティのフルマネージド型の NoSQL データベースサービス。
特徴
- 分散データベースの運用とスケーリングに伴う管理作業(ハードウェアのプロビジョニング、設定と構成、レプリケーション、ソフトウェアのパッチ適用、クラスタースケーリングなど)を自分で行う必要がなくなる。
- 十分な数のサーバー間でデータとトラフィックを自動的に分散し、一貫した高速なパフォーマンスを維持。
- 保管時の暗号化。
- 任意の量のデータを保存および取得できるデータベーステーブルを作成し、任意のレベルのリクエストトラフィックを処理。
- ポイントインタイムリカバリを使用すれば、過去 35 日間の任意の時点にテーブルを復元可能。
- Key-Valueストア=「値」とそれを取得するための「キー」だけを格納するというシンプルな構造。
- DynamoDB Acceleration
- 可用性が高くフルマネージドなDynamoDB用 インメモリキャッシ。1秒あたり100万回単位のリクエストに数ミリ秒の応答時間で処理が可能。DynamoDBに格納されたデータの読み込み回数を減らすことができるため、読み込みスループットが向上。
類似サービスとの比較
| RDS | DynamoDB | Redshift | ElastiCache | |
|---|---|---|---|---|
| 概要 | ・リレーショナルデータベース。 ・主なDBエンジンをサポート、ツールがそのまま使えるため、オンプレからの移行に便利。 ・データベースソフトウェアのパッチは自動パッチが可能。 |
・NoSQL データベースサービス。 ・結果整合性 ・write直後のreadでは整合性が取れない場合あり。 ・「強い整合性」オプションを指定すると性能は落ちる。 ・レコードのサイズに上限あり。 ・リージョンサービスでありプライベートネットワークからはNAT経由でアクセスする必要あり。 |
・データウェアハウスタイプ ・スケーラブル ・高パフォーマンス |
・メモリーキャッシュタイプ ・Memcached:Key-Value Store形式のメインメモリキャッシュ。マルチノートのキャッシュクラスタ。 ・Redis:Memcached:Key-Value Store形式のメインメモリキャッシュ。 |
| 場所 | AZ サービス(VPC内に配置) | リージョン | AZ サービス | AZ サービス(VPC内に配置) |
| バックアップ | スケージュールで1日1回取得可能(手動可)※ただし、バックアップ中はI/O停止、止めたくない場合はマルチAZ利用する必要あり | - | - | (memcached)バックアップ機能はなし(Redis)Snapshotによる永続化 |
| ユースケース | OS以下レイヤの管理不要、高可用性な、既存データベースの利用など | 大量のオンライントランザクション処理など | 大容量データの分析など | DBの負荷低減用のメモリキャッシュ |
★NoSQLとRDBMS
| NoSQL | RDBMS | |
|---|---|---|
| 特性 | ・Basically Available(基本利用可能) ・Soft-state(柔軟な状態) ・Eventual Consistency(結果整合性) |
・Atomicity(原子性) ・Consistency(一貫性) ・Isolation(独立性) ・Durability(永続性) |
| 処理 | トランザクション処理にあたり、データの更新においては、古いデータが存在する時間を許容。 | トランザクション処理にあたり、即時に一貫したデータの整合性を保証し、処理が途中で失敗した場合は、ロールバックし、処理がなかったことになる。 |
| スケールアウト | スキーマを固定しないシンプル構造のため、水平的に分散スケールアウトが可能 | 整合性をもってデータを更新するため、水平的に分散スケールアウトするのが困難。 |
ベストプラクティス
- DynamoDBストリームを有効にすると、作成したLambda関数にストリームARNを関連させることができる。Lambdaがストリームをポーリングすることで、新しいレコードを検出し、Lambda関数を呼び出す。
- DynamoDBのテーブルは、パーティションキー全体でアクティビティが均一になるアプリケーション設計をする。テーブルはスキーマを持たないため、開発の自由度があがる。また、キーバリューの構造はキーをもとにして、データを分散格納できるため、水平にスケールが可能。
- DynamoDBでThlottlingExceptionとLimitExceedExceptionのエラーが返されたときは、アプリケーションでリクエストを再試行することで解決できる。
- フルマネージドによる高い拡張性、データへの1桁ミリ秒のレイテンシー、マルチリージョン/マルチマスターの高い信頼性を実現するNoSQLDBはDynamoDB。
- DynamoDBは、データベースとして、JSONドキュメントの保存、インデックスの可用性、Auto Scalingが必要な場合にも適している。
- DynamoDBでは結果整合性に基づく処理をするため、多くのトラフィックを処理可能だが、一方それらの読み込みを可能にするため、古いデータの読み込みが発生してしまう。DynamoDBの読み込みオペレーションのオプションのConsistReadパラメータをTrueにすることで強力な整合性のある読み込みを可能とし、回避できる。
- DynamoDBに一時的なアクセス集中がある場合、以下の手段により、対応が可能。
- SQSメッセージからDynamoDBに書き込みをするように連携
- DynamoDBに対してAutoScalingを適用
- 新規テーブル作成の際、Read,Writeに対して、プロビジョニングスループットを指定する。
- クロスリージョンレプリケーションが可能なテーブルを作成することにより、グローバルユーザー向けにスケールしたアプリケーションの構築やDR対策に利用できる。
- キャパシティユニットを適切に設定することでコストを抑えることができる。