【AWS】Amazon DynamoDBについて解説します。
Amazon DynamoDB は、あらゆる規模で高性能かつ低レイテンシのデータアクセスを必要とするインターネットスケールのアプリケーションに向けた、クラウド内の NoSQL ドキュメントデータベースサービスです。今回はDynamoDBについてまとめていきます。
■Amazon DynamoDB概要
Amazon DynamoDBは、どのような規模でも信頼性が高いパフォーマンスを維持できる、非リレーショナルデータベース(NoSQL)です。完全マネージド型マルチリージョン、マルチマスターで耐久性があるデータベースで、セキュリティ、バックアップ及び復元と、インターネット規模のアプリケーション用のメモリ内キャッシュが組み込まれています。
- スケールに応じたパフォーマンス
- DynamoDBは、規模に関係なく一貫した数ミリ秒台の応答時間を実現することで、世界最大規模のアプリケーションの一部をサポートしています。事実上無限のスループットとストレージでアプリケーションを構築できます。
- サーバー管理が不要
- DynamoDBはサーバーレスであり、プロビジョニング、パッチ適用、管理するサーバーはなく、インストール、保守、運用するソフトウェアもありません。DynamoDBは、テーブルを自動的にスケールアップ/ダウンして容量を調整し、パフォーマンスを維持します。可用性とフォールトトレランス機能が組み込まれているため、こうした機能のためにアプリケーションを構築する必要はありません。
- エンタープライズ対応
- DynamoDBは、ビジネスクリティカルなアプリケーションを大規模に構築できるようにACIDトランザクションをサポートしています。デフォルトですべてのデータを暗号化しており、すべてのテーブルに対してきめ細かいIDとアクセスコントロールを提供します。
- 【DynamoDBの特徴】
- ・フルマネージドサービス
- ・データの格納と取得に特化されている(高度な最適化)
- ・表結合など柔軟なクエリを発行するのは不得意
- ・「値」とそれを取得するための「キー」だけを格納するというシンプルな機能を持った「Key Valueストア」
- ・半構造化データをドキュメントとして保存する「ドキュメントデータベース」でもある
- ・1桁ミリ秒単位のレイテンシーを要求するアプリケーションにも対応
- ・期限切れになった項目を自動的にテーブルから削除することも可能
■一般的なユースケース
DynamoDBは以下が要件を持つシステムと相性が良いです。
- ・ミリ単位のアクセスレイテンシーが求められる
- ・データの拡張性が求められる
そのため、モバイル、ウェブ、ゲーム、広告技術、loTのようなサービスのバックエンドとしてよく利用されています。
また、Lambdaとも相性が良く、APIGateway+Lambdaと合わせて利用されることが多いです。
■料金体系
DynamoDBの料金を決める要素は大きく3つあります。中でも一番肝心なのはキャパシティーユニットですが、容量の見積もりは簡単ではありません。CloudWatchにて見積もりを検討し、余裕を持って設定することが重要になります。
- 【キャパシティーユニット】
- 簡単に言うと、読み込み / 書き込み容量です。DynamoDBでは、キャパシティーユニットを事前に設定して、読み込み / 書き込み容量の上限を決めることにより料金が決定する仕組みです。1キャパシティーユニットは1秒間に決められた回数の読み込み / 書き込み容量を提供し、利用している時間分料金がかかります。実際に読み込み / 書き込みした量に応じて料金がかかるわけではないことに注意が必要です。そのため、利用料を事前に推測してキャパシティーユニットを設定しましょう。
- 【ストレージ容量】
- DynamoDBに保存されているデータの容量に応じて課金されます。基本的な料金設定については非常にシンプルです。
- ・毎月最初の25GBの保管は無料
- ・それ以降は月額0.285USD/GB
- ストレージについてはS3と比べるとわかりやすいですが、実は料金はS3(月額0.025USD/GB)の約10倍です。この点からも、大きなデータの保存には向かないことがわかります。大きいデータについてはS3に保存し、保存先についての情報のみDynamoDBに入れるなど、データ量を少なくする工夫が必要です。
- 【データ転送量】
- これについては、AWSのどのサービスでも概ね同様なものが多いですが、データのアウトに料金がかかるため、不要なデータの取り出しは少なくするよう工夫が必要です。
- ・データ転送受信(イン):0.00USD/GB
- ・データ転送送信(アウト):月額0.14USD/GB ※1GB/月まで無料
- Getltemを行う際に、ProjectionExpressionを指定することにより、必要な要素を絞ることができるので、1つのアイテムに大量のデータが紐づいている場合には、これを有効活用するのも選択肢のひとつになります。
- ※他にもDAXやストリームなどもありますが、利用は必須ではありません。
■オンデマンドバックアップ
DynamoDBオンデマンドバックアップ機能を使用し、テーブルの完全なバックアップを作成して、規制やコンプライアンス要件を満たすために長期間の保存とアーカイブを実施することができます。テーブルのデータは、AWSマネジメントコンソールでワンクリックするか、単一のAPIコールを使用するだけで、バックアップ及び復元することができ、またこの作業により、テーブルのパフォーマンスや可用性に影響を及ぼすことはありません。
オンデマンドバックアップおよび復元プロセスは、アプリケーションのパフォーマンスや可用性を低下させずにスケーリングすることができます。さらに、新しい独自の分散型技術を使用しており、テーブルのサイズに関係なく、数秒でバックアップを完了することができます。
■ポイントインタイムリカバリ
DynamoDBは、テーブルのオンデマンドバックアップを作成するか、ポイントインタイムリカバリを使用して連続バックアップを有効にすることができます。ポイントインタイムリカバリを使用することで、オペレーションによってDynamoDBテーブルが誤って上書きされたり削除されたりしないように対策が可能になります。
ポイントインタイムリカバリを有効化すると、オンデマンドバックアップの作成、維持、スケジュールを心配する必要がなくなります。また、ポイントインタイムリカバリオペレーションが、パフォーマンスやAPIレイテンシーに影響を及ぼすことはなく、過去35日間の任意の時点にテーブルを復元することができ、テーブルの増分バックアップが維持されます。
■まとめ
AWSのデータベースサービスは複数あり、それぞれで最適な用途や、利用する人によっても適した環境は異なってきます。もちろん、特徴や仕様、様々な設定などもあるためDynamoDBはRDSと同じように使うことはできません。データベースについてもしっかり知識を持ち、適材適所で正しく使っていきましょう。