Amazon DynamoDB は、完全に管理された NoSQL データベースサービスで、高速かつ予測可能なパフォーマンスとシームレスな拡張性を提供します。AWS Management Console で数回クリックするだけで、新しい Amazon DynamoDB データベーステーブルを開き、ダウンタイムやパフォーマンス低下を発生させずにテーブルのリクエスト容量を拡大/縮小できるほか、リソースの使用状況とパフォーマンス基準を視覚的に確認できます。Amazon DynamoDB を使用すると、分散データベースの運用と AWS に拡張するための管理負荷を軽減できます。顧客はハードウェアのプロビジョニング、設定と構成、レプリケーション、ソフトウェア修正プログラムの適用、クラスタ拡張などについて心配する必要がありません。
Amazon DynamoDB は、データベース管理、パフォーマンス、拡張性、および信頼性に関する主な問題に対処することを目的としています。開発者は、任意の量のデータを格納および取得できるデータベーステーブルを作成し、任意のレベルのリクエストトラフィックを処理できます。DynamoDB は、高速処理を維持しながら、テーブルのデータとトラフィックを十分な数のサーバーに自動的に分散し、顧客が指定したリクエスト容量と、格納されているデータ量を処理します。また、すべてのデータ項目を SSD(Solid State Drive)に格納し、リージョン内の複数のアベイラビリティゾーン間で自動的にレプリケートするので、高い可用性とデータ堅牢性を実現します。
Amazon DynamoDB を使用すると、使用したリソースのコストを支払うだけでよく、高い可用性を備えた分散データベースクラスタの運用と拡張に伴う管理負荷を軽減できます。
Amazon DynamoDB を使用するには、次の手順に従うだけです:
拡張性 – Amazon DynamoDB は、スループットと保存容量をシームレスに拡張できるように設計されています。
高速で予測可能なパフォーマンス – 通常、Amazon DynamoDB のサービス側の平均遅延の単位はミリ秒で、しかも 1 桁です。サービスは SSD(Solid State Drive)で実行され、規模に関係なく一貫性、高速性を維持できるよう構築されています。
管理が容易 – Amazon DynamoDB は完全に管理されたサービスです。データベーステーブルを作成すれば、それ以外の作業はサービスで処理されます。ハードウェアまたはソフトウェアのプロビジョニング、設定と構成、ソフトウェアの修正、信頼できる分散型データベースクラスタの操作、拡張による複数のインスタンスでのデータのパーティション化などについて心配する必要はありません。
組み込みのフォールトトレランス – Amazon DynamoDB にはフォールトトレランスが組み込まれ、リージョンの複数のアベイラビリティゾーンでデータを同期的に自動レプリケートすることで、高い可用性を実現するほか、個別のコンピュータや施設での障害発生時にデータを保護します。
柔軟性 – Amazon DynamoDB には固定されたスキーマはなく、各データ項目の属性の数はそれぞれ異なっている場合があります。複数のデータ型(文字列、数値、およびセット)により充実したデータモデルを利用できます。
強い整合性、アトミックカウンタ – 非リレーショナルデータベースとは異なり、Amazon DynamoDB では、強い整合性のある読み込みを使用して常に最新の値を読み込めるため、開発が容易です。Amazon DynamoDB でサポートされるネイティブなデータ型は複数あります(数値、文字列、および複数の値を持つ属性)。また、アトミックカウントがネイティブにサポートされているので、1 回の API 呼び出しで数値属性をアトミックにインクリメントまたはデクリメントできます。
コスト効率が良い – Amazon DynamoDB は、あらゆる規模の負荷にコスト効率よく対応できるように設計されています。無料で開始でき、1 か月あたり 4 千万を超えるデータベース処理を無料使用範囲としてご利用いただけます。この制限を超えて使用したリソースについてのみ、リーズナブルな 1 時間あたりの料金をお支払いいただきます。管理が簡単で、リクエスト料金も手ごろなので、ご自身でリレーショナルデータベースまたは非リレーショナルデータベースを稼働するのに比べると、負荷に対する総所有コスト(TCO)をかなり低く抑えることができます。
安全 – Amazon DynamoDB では、実績のある暗号化方法を使用してユーザーを認証し、データへの不正アクセスを防ぎます。また、AWS Identity and Access Management(IAM)との統合により、組織内のユーザーのアクセスを細かく管理することもできます。
統合された監視 – Amazon DynamoDB では、AWS Management Console にテーブルの主要処理の基準が表示されます。また、Amazon CloudWatch も統合されているため、Amazon DynamoDB ごとにリクエストスループットと遅延を確認し、リソースの使用を簡単に追跡できます。
Elastic MapReduce 統合 – Amazon DynamoDB には、Amazon Elastic MapReduce(Amazon EMR)も統合されています。Amazon EMR を使用すると、AWS でホスト型従量課金制 Hadoop フレームワークを使用し、大きなデータセットに対して複雑な分析を実行できます。Amazon DynamoDB を開始すると、Amazon EMR を使用して DynamoDB に格納されているデータセットを分析し、その結果を Amazon Simple Storage Service(Amazon S3)にアーカイブする処理を簡単に行えます。その際、DynamoDB にある元のデータセットはそのまま維持されます。また、Amazon EMR を使用して複数のストア(Amazon DynamoDB、Amazon RDS、および Amazon S3)のデータにアクセスし、この結合されたデータセットに対して複雑な分析を実行して、その分析結果を Amazon S3 に格納することもできます。
使用料金は従量課金制となっています。最低料金は不要です。Simple Monthly Calculator を使って月額料金をお見積もりください。
無料使用範囲*
AWS の無料使用範囲の一環として、AWS のお客様は Amazon DynamoDB を無料で開始していただけます。DynamoDB の保存容量 100 MB までは無料で、さらに書き込み最大 5 回/秒、読み込み最大 10 回/秒のスループット容量を無料で使用できます。
Amazon DynamoDB テーブルを作成または更新するときに、読み込みと書き込み用に予約する容量を指定します。Amazon DynamoDB では、低遅延で一貫したスループットパフォーマンスを実現するために必要なコンピュータリソースを予約します。
予約した容量に基づいて 1 時間ごとに定額が課金されます。
1 ユニットの書き込み容量で、最大 1KB の項目に対して 1 秒あたり 1 回の書き込みを行うことができます。同様に、1 ユニットの読み込み容量で、最大 1KB の項目に対して強い整合性のある読み込みを 1 秒あたり 1 回(結果的に整合性のある読み込みについては 1 秒あたり 2 回)行うことができます。項目のサイズが大きくなるほど、多くの容量が必要になります。必要な読み込みおよび書き込み容量のユニット数を計算するには、必要な 1 秒あたりの読み込みまたは書き込み回数を見積もり、項目のサイズ(KB に切り上げ)を掛け合わせます。
書き込みに必要な容量のユニット数 = 1 秒あたりの項目書き込み回数 x 項目のサイズ(KB に切り上げ)
読み込みに必要な容量のユニット数¹ = 1 秒あたりの項目読み込み回数 x 項目のサイズ(KB に切り上げ)
¹結果的に整合性のある読み込みを使用する場合は、1 秒あたりの読み込み数の観点からスループットが 2 倍になります。
項目のサイズが 1KB を下回る場合は、読み込み容量のユニットごとに 1 秒あたり 1 読み込み、書き込み容量のユニットごとに 1 秒あたり 1 書き込みの容量が割り当てられます。たとえば、項目のサイズが 512 バイトで、1 秒あたり 100 個の項目をテーブルから読み込む必要がある場合は、100 ユニットの読み込み容量をプロビジョニングする必要があります。
項目のサイズが 1KB を上回る場合は、必要な読み込み容量と書き込み容量のユニット数を計算する必要があります。たとえば、項目のサイズが 1.5KB で、秒あたり 100 個の読み込みを行う必要がある場合は、「100(秒あたりの読み込み)x 2(1.5KB を切り上げした数値)= 200(読み込み容量のユニット数)」のように計算されます。
必要な読み込み容量のユニット数は、API 呼び出し数ではなく、1 秒あたりに読み込まれる項目数によって決まります。たとえば、1 秒あたり 500 個の項目をテーブルから読み込む必要があり、項目のサイズが 1KB 以下の場合は、500 ユニットの読み込み容量が必要です。個別の GetItem 呼び出しを 500 回行う場合でも、10 個の項目を返す BatchGetItems 呼び出しを 50 回を行う場合でも同じです。
リクエストスループットは、プロビジョニングされた容量を超えると調整されます。ただし、AWS Management Console にはプロビジョニングされたスループット容量と使用されているスループット容量が図で表されるので、トラフィックの変化を予測しながら簡単にリクエストを変更することができます。プロビジョニングされたスループットおよび適切な値の選択の詳細については、こちらのよくある質問の回答を参照してください。
テーブルに必要な容量ユニット数を見積もる方法の詳細については、こちらのドキュメントを参照してください。
Amazon DynamoDB はインデックス化されたデータストアであり、データが使用するディスク容量は、アップロードしたデータの RAW サイズを上回ります。Amazon DynamoDB では、アップロードするデータの RAW バイトサイズと各項目の保存オーバーヘッド 100 バイトをインデックス用にアカウントに足して、請求可能なデータサイズを測定します。Amazon DynamoDB で保存容量を「プロビジョニング」する必要はありません。前述したように、使用した分のみが課金されます。
データ「受信(イン)」および「送信(アウト)」は、Amazon DynamoDB への転送および Amazon DynamoDB からの転送を示しています。Amazon DynamoDB と同じリージョンの他の Amazon Web Services の間で転送されたデータは無料です(例: $0.00/GB)。リージョン間で転送されるデータ(例: 米国東部(北バージニア)リージョンでの Amazon DynamoDB と欧州(アイルランド)リージョンでの Amazon EC2 の間)は、転送の両側でインターネットデータ転送料金が課金されます。
* 無料使用範囲は毎月計算され、自動的に請求額に適用されます。無料範囲は積み立てられません。
** AWS 無料使用範囲の一環として、AWS のお客様は、すべての AWS サービスを総合して、1 か月につき 15GB のデータ送信を 1 年間無料でご利用いただけます。
*** データ送信(アウト)レート範囲は、Amazon EC2、Amazon S3、Amazon RDS、Amazon SimpleDB、Amazon DynamoDB、Amazon SQS、Amazon SNS、AWS Storage Gateway、Amazon VPC 間の発信データ転送の総計です。
Amazon DynamoDB ではテーブルを使用してデータを整理します。テーブルには項目が格納され、項目には 1 つ以上の属性があります。
属性は名前と値のペアです。名前は文字列である必要がありますが、値には文字列、数値、文字列セット、または数値セットを使用できます。属性の例を以下に示します:
"ImageID" = 1
"Title" = "flower"
"Tags" = "flower", "jasmine", "white"
"Ratings" = 3, 4, 2
項目は属性のコレクションで構成され、プライマリキーによって識別されます。項目の属性は、名前と値のペアのコレクションです。項目の属性は数が少ないことがあり、同じテーブル内の他の項目の属性とは無関係です。また、プライマリキー属性を除き、省略することができます。従来のデータベースとは違い、プライマリキーに依存するという点以外、テーブルにはスキーマは存在しません。項目はテーブルに格納されています。項目をテーブルに追加するには、少なくとも 1 つの属性をプライマリキーとして指定する必要があります。プライマリキーは DynamoDB テーブルに対して項目を一意に識別します。以下の図では、ImageID 属性がプライマリキーとして指定されています:
テーブルの名前は「my table」で、項目には名前がありません。プライマリキーで項目が定義され、"ImageID"=1 というプライマリキーを持つ項目を定義しています。
テーブルには項目が含まれ、領域ごとに情報が整理されます。テーブルのすべての項目で同じプライマリキースキームが使用されています。テーブルを作成するときにプライマリキーに使用する属性名を指定します。テーブルの各項目には一意のプライマリキー値が必要です。DynamoDB にデータを書き込むには、まずテーブルを作成し、テーブル名とプライマリキーを指定します。以下に比較的大きなサイズのテーブルを示します。このテーブルもプライマリキーとして ImageID を使用し、項目を識別しています。
| テーブル: My Images | |||||||
| プライマリキー | その他の属性 | ||||||
| ImageID = 1 | ImageLocation = https://s3.amazonaws.com/bucket/img_1.jpg | Date = 1260653179 | Title = flower | Tags = Flower, Jasmine | Width = 1024 | Depth = 768 | |
| ImageID = 2 | ImageLocation = https://s3.amazonaws.com/bucket/img_2.jpg | Date = 1252617979 | Rated = 3, 4, 2 | Tags = Work, Seattle, Office | Width = 1024 | Depth = 768 | |
| ImageID = 3 | ImageLocation = https://s3.amazonaws.com/bucket/img_3.jpg | Date = 1285277179 | Price = 10.25 | Tags = Seattle, Grocery, Store | Author = you | Camera = phone | |
| ImageID = 4 | ImageLocation = https://s3.amazonaws.com/bucket/img_4.jpg | Date = 1282598779 | Title = Hawaii | Author = Joe | Colors = orange, blue, yellow | Tags = beach, blanket, ball | |
DynamoDB では、テーブルごとに、データアクセスに使用する定義済みプライマリキーが必要です。このプライマリキーによって各項目が一意に識別されます(ID =1、ID = 2、ID = 3 など)。プライマリキーは、テーブルでインデックス化されている唯一の部分で、複数のサーバーにわたってデータをハッシュパーティション化するときにも使用されます。このプライマリキーは、テーブルを作成するときに指定します。
各項目は名前と値のペアのコレクションです。項目のテーブルを作成するときに、名前と値の 1 つのペアをプライマリキーとして指定します。テーブルのすべての項目にプライマリキー属性の値が必要で、その名前の値は Amazon DynamoDB によって一意であることが保証されます。インデックスはプライマリキーに基づいて作成されます。
複合プライマリキーを使用すると、一意のプライマリインデックスを形成する 2 つの属性をテーブルで指定できます。テーブルのすべての項目にこの両方の属性が必要です。1 つは「ハッシュパーティション属性」として、もう 1 つは「範囲属性」として機能します。たとえば、「UserID」(ハッシュ属性、複数のサーバーにわたる負荷のパーティション化に使用)と「Time」(範囲属性)で構成される複合プライマリキーを持つ「Status Updates」テーブルがあるとします。クエリを実行すると、1)UserID 値と Time 値の組み合わせによって識別される特定の項目、2)特定のハッシュ「バケット」(この場合は UserID)のすべての項目、3)特定の時間範囲内にある特定の UserID のすべての項目のいずれかを取得できます。「Time」に対する範囲クエリは、UserID ハッシュバケットが指定されている場合にのみサポートされます。
Amazon DynamoDB には、Amazon Elastic MapReduce(Amazon EMR)も統合されています。Amazon EMR を使用すると、AWS でホスト型従量課金制 Hadoop フレームワークを使用し、大きなサイズのデータセットに対して複雑な分析を実行できます。EMR を DynamoDB と共に使用する方法をいくつか次に示します。
EMR を使用して DynamoDB に格納されているデータを分析し、分析結果を S3 に格納できます。元のデータは DynamoDB に保存されたままです。
たとえば、顧客からの注文を Amazon DynamoDB を使用して格納している場合は、月ごとに新規の注文テーブルを作成できます。また、EMR のマルチテーブルクエリ機能を使用して DynamoDB の様々なテーブルを結合し、たとえば「特定の顧客の過去 3 か月間の注文内容」などを確認することができます。その後、EMR を使用して、確認した情報を後で使用できるよう S3 に格納できます。その際、DynamoDB の毎月の顧客注文テーブルのデータはそのまま維持されます。
EMR を使用して DynamoDB のデータを S3 にバックアップできます。
前述の顧客からの注文を例に説明すると、月ごとの注文テーブルに頻繁に書き込みを行わなくなったら、そのテーブルを、低コストでテーブルを保存できる S3 にバックアップし、DynamoDB からは削除できます。後述するように、S3 に格納されたデータは分析用データとして簡単に使用できます。
また、Amazon EMR を使用して複数のストア(Amazon DynamoDB、Amazon RDS、および Amazon S3)のデータにアクセスし、この結合されたデータセットに対して複雑な分析を実行して、その分析結果を Amazon S3 に格納することもできます。
たとえば、顧客からの注文を Amazon DynamoDB を使用して格納している場合は、月ごとに新規の注文テーブルを作成し、毎月末に、6 か月以上前に行われた注文を Amazon EMR を使用して Amazon S3 にアーカイブできます。これにより、あまりアクセスされない注文を Amazon S3 にアーカイブしてコストを削減し、頻繁にアクセスされる注文のみを DynamoDB に保持することができます。EMR を使用すると、DynamoDB に格納された最近の注文や Amazon S3 に格納されたアーカイブ済み注文テーブルに対して分析を実行し、「過去 48 か月間の顧客 Y のウィジェット X の注文数」などを確認できます。