

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# DynamoDB の概要
<a name="overview"></a>

Amazon DynamoDB は NoSQL のキーバリューおよびドキュメントデータベースで、高速で予測可能なパフォーマンスとシームレスなスケーラビリティを提供します。フルマネージド型、マルチリージョン、マルチアクティブ、耐久性のあるデータベースです。(DynamoDB のグローバルテーブル機能は、1 つの AWS リージョンで行われた変更を他のすべての選択したリージョンに自動的に同期して、マルチアクティブサポートを提供します）。DynamoDB には、セキュリティ機能、バックアップおよび復元オプション、インターネット規模のアプリケーション用のインメモリキャッシュが組み込まれています。

NoSQL データベースのスキーマレス性により、データベース (読み取りスキーマ) の変更を本番環境にプッシュするために必要な時間とプロセスが短縮され、迅速なアプリケーション開発 (RAD) が可能になります。DynamoDB などの NoSQL データベースは、高性能な読み取り/書き込みオペレーション用に構築されています。

## 機能とメリット
<a name="features"></a>

DynamoDB には、次の機能と利点があります。
+ 管理するサーバーがない — DynamoDB はフルマネージド NoSQL データベースサービスです。つまり、サーバーのメンテナンスオーバーヘッドは発生しません。
+ スキーマレス – DynamoDB は迅速なアプリケーション開発とデプロイをサポートします。
+ 大規模なパフォーマンス – DynamoDB は、高速で予測可能なパフォーマンスとシームレスなスケーラビリティを提供します。
+ ACID サポート – DynamoDB は、データの正確性を維持するために、不可分性、一貫性、分離性、耐久性 (ACID) トランザクションをサポートしています。
+ 高可用性と耐久性 – データはソリッドステートディスク (SSDs) に保存され、 リージョン内の AWS 複数のアベイラビリティーゾーンに自動的にレプリケートされるため、高可用性とデータ耐久性が組み込まれています。
+ 自動スケーリング – DynamoDB は AWS Application Auto Scaling サービスを使用して、トラフィックパターンに応じてプロビジョニングされたスループットキャパシティを動的に調整します。
+ 柔軟な料金オプション – DynamoDB には、オンデマンドキャパシティモードとプロビジョンドキャパシティモードの 2 つのキャパシティモードと特定の請求オプションがあります。
+ Point-in-timeリカバリ – point-in-timeリカバリを使用して継続的なバックアップを有効にして、テーブルを誤って書き込みまたは削除オペレーションから保護し、過去 35 日間の任意の時点にテーブルを復元できます。
+ 有効期限 (TTL) – 指定した期間後に DynamoDB テーブルから項目を自動的に削除できます。
+ グローバルテーブル – 独自のレプリケーションソリューションを構築することなく、複数のレプリカを AWS リージョンにデプロイできます。
+ グローバルセカンダリインデックス – テーブル独自のパーティションキーとソートキーとは異なるパーティションキーとソートキーを使用して、DynamoDB テーブルをクエリできます。
+ DAX – DynamoDB Accelerator (DAX) キャッシュサービスは、読み取りオペレーションにミリ秒未満の応答時間を提供します。
+ DynamoDB Streams – この機能は、DynamoDB テーブルの変更のリアルタイム追跡と通知をサポートするために、ログに項目レベルの変更の時系列シーケンスを提供します。

これらの利点の詳細については、 AWS ウェブサイトの[「Amazon DynamoDB の機能](https://aws.amazon.com/dynamodb/features/)」を参照してください。以下のセクションでは、RDBMS から DynamoDB に移行することでデータベースワークロードのモダナイズに関連する機能について説明します。

### パーティションキー
<a name="features-partition-keys"></a>

DynamoDB はスキーマレスであるため、テーブルのすべての属性を定義する必要はありません。パーティションキー属性は必須で、ソートキーはオプションです。残りの属性は任意で、項目ごとに異なる場合があります。頻繁にアクセスされる項目が同じパーティションに存在しないように、カーディナリティの高いパーティションキーを選択することをお勧めします。この手法は、データアクセスの不均衡やホットパーティションを回避するのに役立ちます。詳細については、DynamoDB ドキュメントの[「パーティションキーを効果的に設計および使用するためのベストプラクティス](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-design.html)」を参照してください。

### インデックス
<a name="features-indexes"></a>

インデックスを使用すると、代替クエリパターンにアクセスでき、クエリを高速化できます。リレーショナルデータベースと DynamoDB のどちらを使用しているかにかかわらず、インデックスは慎重に作成する必要があります。テーブルで書き込みオペレーションが発生するたびに、そのテーブルのすべてのインデックスを更新する必要があります。

グローバルセカンダリインデックスには、ベーステーブルから選択された属性が含まれますが、テーブルのプライマリキーとは異なるプライマリキーによって整理されます。DynamoDB では、グローバルセカンダリインデックスはデフォルトでスパースです。つまり、ソートキーはオプションであり、すべてのテーブル項目に表示されるわけではありません。この機能を利用するには、必要な属性のみを保存および射影するグローバルセカンダリインデックスを作成できます。DynamoDB テーブルには、最大 20 個のグローバルセカンダリインデックスを設定できます。この機能の詳細については、[DynamoDB ドキュメントの「DynamoDB でグローバルセカンダリインデックス](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html)を使用する」を参照してください。 DynamoDB 

### 有効期限
<a name="features-ttl"></a>

DynamoDB テーブルの Time to Live (TTL) プロパティを設定して、項目ごとの (レコード) タイムスタンプを定義し、項目が不要になったタイミングを指定できます。指定されたタイムスタンプの直後に、DynamoDB は追加のキャパシティユニットを消費することなく、テーブルから項目を削除します。この機能の詳細については、[DynamoDB ドキュメントの「DynamoDB の有効期限](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html)」を参照してください。 DynamoDB 

### 料金モデル
<a name="features-pricing"></a>

DynamoDB には、プロビジョンドキャパシティとオンデマンドキャパシティの 2 つの料金モデルがあります。料金モデルの選択は、予測されるワークロードによって異なります。


****  

| **料金モデル** | **ワークロードタイプ** | **コスト** | **読み取り/書き込みスループット** | 
| --- | --- | --- | --- | 
| プロビジョンドキャパシティー | 予測可能 | Lower | 読み込み/書き込みオペレーションの数は、読み込みキャパシティーユニット (RCUs) と書き込みキャパシティーユニット (WCUs。以下に例を示します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/modernization-rdbms-dynamodb/overview.html) 自動スケーリングを有効にして、トラフィックの変化に応じて容量を調整できます。 | 
| オンデマンド容量 | 動的 | より高い | スループット要件を指定しません。DynamoDB はワークロードに自動的に対応します。 読み取りリクエストユニットと書き込みリクエストユニットに関して、アプリケーションがテーブルに対して実行する読み取りと書き込みに対して課金されます。以下に例を示します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/modernization-rdbms-dynamodb/overview.html) | 

これらの 2 つのモデルの詳細については、DynamoDB ドキュメントの[「読み取り/書き込みキャパシティモード](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html)」を参照してください。

### トランザクション
<a name="features-transactions"></a>

DynamoDB は、1 つの AWS アカウントと AWS リージョン内の 1 つ以上のテーブルにわたる不可分性、一貫性、分離性、耐久性 (ACID) トランザクションをサポートします。

テーブル内およびテーブル間で複数の項目の変更を管理するには、DynamoDB トランザクション API `TransactWriteItems`と `TransactGetItems` APIsを使用できます。
+ `TransactWriteItems` は、1 つ以上の `PutItem`、、および `DeleteItem`アクションを含む書き込みセットを含むバッチオペレーションです。 `TransactWriteItems` は、必要に応じて`UpdateItem`、更新を行う前に満たす必要がある前提条件をチェックできます。これらの条件には、書き込みセット内の項目と同じ項目、または異なる項目が含まれる場合があります。いずれかの条件が満たされない場合、トランザクションは拒否されます。
+ `TransactGetItems` は、1 つ以上の`GetItem`アクションを含む読み取りセットを含むバッチオペレーションです。アクティブな書き込みトランザクションの一部である項目に対して`TransactGetItems`リクエストを発行すると、読み取りトランザクションはキャンセルされます。以前にコミットされた値を取得するには、標準の読み取りオペレーションを使用できます。

これらの APIs[「Amazon DynamoDB トランザクション: その仕組み DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html)」を参照してください。 DynamoDB 

**制約事項**

DynamoDB トランザクションの API オペレーションには次の制約があります。
+ トランザクションは 100 個を超える一意の項目を更新できません。
+ トランザクションには、4 MB を超えるデータを含めることはできません。
+ トランザクション内の 2 つのアクションを、同じテーブルの同じ項目に対して実行することはできません。たとえば、1 つのトランザクションで同じ項目に対して `ConditionCheck`と の両方の`Update`アクションを実行することはできません。
+ トランザクションは、複数の AWS アカウントまたはリージョンのテーブルで動作できません。
+ トランザクションオペレーションは、書き込みオペレーションが最初に実行される AWS リージョン内でのみ ACID を保証します。グローバルテーブルのリージョン間では、トランザクションはサポートされていません。
+ オブジェクト永続性モデルはトランザクションをサポートしていません。トランザクション機能を使用するには、[DynamoDB 低レベル API ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.LowLevelAPI.html)を使用してデータベースとテーブルにアクセスする必要があります。

### 大きなコンポーネント
<a name="features-large-components"></a>

DynamoDB のサイズ制限は、項目ごとに 400 KB です。この制限には、属性名 (UTF-8 エンコーディングのバイナリ長) と属性値 (再びバイナリ長) の両方が含まれます。属性名はサイズ制限にカウントされます。例えば、2 つの属性を持つ項目を考えてみます。1 つは値「IN」の「country-code」という名前の属性で、もう 1 つは値「91」のcountry-phone-prefix」という名前の属性です。その項目の合計サイズは 36 バイトです。

**回避策**

項目が多数の属性とプロパティ、または大量のデータに関連付けられている場合、そのサイズは 400 KB を超える可能性があります。この場合、シリアル化された項目を JSON 形式で Amazon Simple Storage Service (Amazon S3) に保存し、Amazon S3 の場所を属性 (`S3Location`) として項目に保存できます。その項目の読み取りおよび書き込みオペレーションは、S3 オブジェクトを取得し、JSON 文字列を更新します。ローカルインデックスとグローバルセカンダリインデックスで使用されるプライマリキー、ソートキー、およびすべての属性は、 `S3Location` 属性とともに テーブルに保存する必要があります。これには、アプリケーション (データアクセスレイヤー) で `S3Location` 属性をチェックし、Amazon S3 から完全な項目データを取得するための追加のロジックが必要です。

### バックアップと復元
<a name="features-backup"></a>

バックアップと復元のサポートは、どのデータベースでも共通する機能です。DynamoDB は、同じアカウント内のバックアップおよび復元オペレーションをネイティブにサポートしますが、他のオプションまたはプロセスを使用して、複数のアカウント間でテーブルのコピーを実行できます。これらのプロセスでは、読み取り/書き込みキャパシティーユニットは消費されません。詳細については、 AWS 規範ガイダンスウェブサイトの[「Amazon DynamoDB のクロスアカウントフルテーブルコピーオプション](https://docs.aws.amazon.com/prescriptive-guidance/latest/dynamodb-full-table-copy-options/welcome.html)」ガイドを参照してください。

**制約事項**

DynamoDB は現在、 を使用してクロスアカウントのバックアップと復元をサポートしていますが[AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html)、アカウントは同じ組織の一部である必要があります。この制限に対処するには、次のいずれかのソリューションを採用します。
+ [AWS SDK](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.html) を使用して、任意のプログラミング言語 (.NET、Java、Python など) でカスタム実装します。アカウント A のソーステーブルから項目をスキャンして、項目 (`BatchWrite`) をアカウント B のテーブルに書き込むことができます。このコードは、サーバー、オンプレミスコンピュータ、または で実行できます AWS Lambda （データベースが小さく、スクリプトの実行に 15 分未満の場合）。詳細については、 AWS 規範ガイダンスウェブサイトの[「カスタム実装を使用してアカウント間で Amazon DynamoDB テーブルをコピー](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation.html)する」パターンを参照してください。
+ の使用 AWS Glue。このオプションの詳細については、 AWS 規範ガイダンスウェブサイトの[「Amazon DynamoDB のクロスアカウントフルテーブルコピーオプション](https://docs.aws.amazon.com/prescriptive-guidance/latest/dynamodb-full-table-copy-options/welcome.html)」ガイドを参照してください。

## 言語と SDK のサポート
<a name="language-sdk"></a>

[AWS SDKs](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.html) は、.NET、Java、JavaScript、Node.js、Python、PHP、Ruby のサービスおよび AWS サポートへのシンプルなプログラミングインターフェイスを提供します。

 AWS SDK を使用して DynamoDB テーブルにアクセスするパターンは、オブジェクト永続性モデル (高レベルインターフェイス）、ドキュメントインターフェイス、低レベルインターフェイスの 3 つから選択できます。詳細については、このガイドの後半の[「アクセスパターン](access-patterns.md)」を参照してください。