DynamoDBをNode.jsで初めてつかってみる

Dynamo DB 入門ドキュメント
---

利用バージョン
```API Version:　2012-08-10```

Dynamo DBとは何か？
---

Dynamo DB はAmazonが完全に管理してくれるとてもスケーラブルなNoSQLです。
使い道としては、時系列のログの保存や単純な検索で済むデータ構造の保存に向いています。
テーブルの作成がAWS Consoleからできたり、管理をしなくてもスケールするというのが最大のメリットだと思います。

基本的な説明は、以下がわかりやすいです。
http://qiita.com/hshimo/items/e5ad98b21786d796f1da

これからNode.jsから基本的な機能を使ってみます。

#### インスタンス化

```
AWS.config.update({
	accessKeyId: AWS_ACCESS_KEY,
	secretAccessKey: AWS_SECRET_KEY,
	region: AWS_REGION
});
var dynamodb = new AWS.DynamoDB();
```

#### やりたいこと

1. データのインサート
2. データとの取得

#### インサート

#### 取得

#### メソッド一覧

- batchGetItem(params = {}, callback) ⇒ AWS.Request
BatchGetItemは、1つまたは複数のテーブルから1つまたは複数の項目の取得します。

- batchWriteItem(params = {}, callback) ⇒ AWS.Request
BatchWriteItem操作は、1つ以上のテーブルに複数の項目を置くか、削除されます。

- createTable(params = {}, callback) ⇒ AWS.Request
CreateTable操作は、あなたのアカウントに新しいテーブルを追加します。

- deleteItem(params = {}, callback) ⇒ AWS.Request
主キーによってテーブル内の単一の項目を削除します。

- deleteTable(params = {}, callback) ⇒ AWS.Request
DeleteTableは、テーブルとそのすべての項目を削除します。

- describeTable(params = {}, callback) ⇒ AWS.Request
作成されたテーブルの現在の状況、主キー、スキーマ、および表の索引を含むテーブルに関する情報を返します。

- getItem(params = {}, callback) ⇒ AWS.Request
GetItem関数は、指定された主キーを持つ項目の属性のセットを返します。

- listTables(params = {}, callback) ⇒ AWS.Request
現在のアカウントとエンドポイントに関連付けられたテーブル名の配列を返します。

- putItem(params = {}, callback) ⇒ AWS.Request
新しいアイテムをインサートしたり、古いアイテムを新しいアイテムに更新します。

- query(params = {}, callback) ⇒ AWS.Request
queryは、テーブルの主キーまたは直接そのテーブルまたはインデックスからアイテムにアクセスするためのセカンダリインデックスを使用しています。

- scan(params = {}, callback) ⇒ AWS.Request
scanは、表またはセカンダリインデックス内のすべての項目にアクセスすることにより、1つ以上のアイテムとアイテムの属性を返します。

- updateItem(params = {}, callback) ⇒ AWS.Request
既存のアイテムの属性を編集するか、それが存在しない場合、テーブルに新しい項目を追加します。

- updateTable(params = {}, callback) ⇒ AWS.Request
指定されたテーブルのプロビジョニングされたスループットを更新し、またはテーブルの上に世界的な二次索引を管理します。

- waitFor(state, params = {}, callback) ⇒ AWS.Request
与えられたDynamoDBのリソースを待ちます。

#### 押さえておくメソッド

- batchGetItem(params = {}, callback); //複数件取得
- getItem(params = {}, callback); // １件取得
- putItem(params = {}, callback); // 挿入
- updateItem(params = {}, callback); // 更新
- deleteItem(params = {}, callback); // 削除

以下、ドキュメントGoogle翻訳
---

```
paramsは（map） - オプションのパラメータのマップは、このサービスオブジェクトによって送信されたすべての要求にバインドします。バインドされたパラメータの詳細については、スタートアップガイドの「サービスの操作」を参照してください。
エンドポイント（文字列） - エンドポイントURIは、要求を送信します。デフォルトのエンドポイントが設定された領域から構築されています。エンドポイントは、「。：// {サービス} {地域} .amazonaws.com HTTPS 'のような文字列でなければなりません。
accessKeyId（文字列） - あなたのAWSアクセスキーID。
secretAccessKey（文字列） - あなたのAWS秘密アクセスキー。
はsessionToken（AWS.Credentials） - とのリクエストに署名するためのオプションのAWSセッショントークン。
資格情報（AWS.Credentials） - とのリクエストに署名するAWSの資格情報。あなたは、このオブジェクトを指定するか、または直接accessKeyIdとsecretAccessKeyオプションを指定することができます。
CredentialProvider（資格情報プロバイダ）（AWS.CredentialProviderChain） - 静的な資格情報プロパティが設定されていない場合は資格情報を解決するために使用されるプロバイダのチェーン。
地域（文字列） - にサービス要求を送信するための領域。詳細については、AWS.DynamoDB.regionを参照してください。
MaxRetriesの（整数） - 要求での再試行の最大量。詳細については、AWS.DynamoDB.maxRetriesを参照してください。
maxRedirects（整数） - リダイレクトの最大量は、要求に従うこと。詳細については、AWS.DynamoDB.maxRedirectsを参照してください。
（ブール値）sslEnabled - 要求のためのSSLを有効にするかどうか。
paramValidation（ブール値） - パラメータの検証がオンになっているかどうか。
computeChecksums（ブール値） - サービスはそれを受け入れたとき、ペイロードの体のためのチェックサムを計算するかどうか（現在はS3でサポート）
convertResponseTypes（ブール値） - 応答データを解析するときに型が変換されるかどうか。現在はJSONベースのサービスのためにサポートされています。このオフにすると、大きな応答ペイロードのパフォーマンスを向上させることができます。デフォルトはtrueです。
s3ForcePathStyle（ブール値） - S3オブジェクトのパススタイルのURLを強制するかどうか。
s3BucketEndpoint（ブール値） - （それはルートAPIエンドポイントに対応している場合はfalse）を設け、エンドポイントは、個々のバケットに対処するかどうか。この設定オプションを設定すると、サービスコンストラクタに明示的に提供するエンドポイントが必要であることに注意してください。
httpOptions（マップ） - 低レベルのHTTPリクエストに渡すオプションのセット。現在サポートされているオプションは次のとおりです。
プロキシ[文字列] - プロキシ要求へのURLを介して、
エージェント[http.Agent、https.Agent] - でHTTP要求を実行するためにAgentオブジェクト。接続プールに使用されます。非SSL接続のためのグローバルエージェント（http.globalAgent）にデフォルト設定されます。 SSL接続のための、特別なエージェントオブジェクトは、ピア証明書の検証を有効にするために使用されることに注意してください。この機能は、Node.jsの環境でのみ使用可能です。
タイムアウト[整数] - ソケットの非アクティブのタイムアウト（ミリ秒）後にタイムアウトにソケットを設定します。 2分（1​​20000）がデフォルトになります。
xhrAsync [ブール] - SDKは、非同期HTTPリクエストを送信するかどうか。唯一のブラウザ環境で使用されます。同期要求を送信するためには、falseに設定します。デフォルトはtrueです（上の非同期）。
xhrWithCredentials [ブール値] - XMLHttpRequestオブジェクトの「withCredentials "プロパティを設定します。唯一のブラウザ環境で使用されます。デフォルトはfalseです。
apiVersion（文字列、日付） - （apiVersionsによって上書きされない限り）すべてのサービスで使用することができ、最新の可能なAPIのバージョンを表し、YYYY-MM-DD形式（または日付）のString。できるだけ最新のバージョンを使用するには、「最新」を指定します。
サービスのインスタンスを作成する際に使用するAPIのバージョンとサービス識別子のマップ（小文字のサービスクラス名） - | apiVersions（地図<日付文字列、文字列>）。利用可能な最新バージョンを使用することができ、各個人の「最新」を指定します。
ロガー（#write、#log） - （コンソールオブジェクトなど）（ストリームなど）.WRITEに応答するオブジェクト（）または.logの（）要求に関する情報をログに記録するために、
systemClockOffset（番号） - ミリ秒単位のオフセット値は、すべての署名回に適用します。お使いのシステムは、サービス時間と同期しなくなる可能性がある場合、クロック·スキューを補償するために使用します。この設定オプションは、唯一のグローバルAWS.configオブジェクトに適用することができ、サービス特有の設定でオーバーライドすることはできません。 0ミリ秒にデフォルト設定されます。
signatureVersion（文字列） - （APIの設定を上書きします）との要求に署名する署名のバージョン。可能な値は以下のとおりです。「V2」、「V3」、「V4」。
不動産の詳細

エンドポイント⇒AWS.Endpoint（読み書き）

サービス要求のためのエンドポイントURLを表すエンドポイントオブジェクトを返します。

戻り値：
（AWS.Endpoint） - サービス要求のためのエンドポイントURLを表すエンドポイントオブジェクト。
メソッドの詳細

batchGetItem（paramsは= {}、コールバック）がAWS.Requestを⇒します

BatchGetItem動作は、1つまたは複数のテーブルから1つまたは複数の項目の属性を返します。あなたは、主キーによって要求項目を識別します。

単一の操作は、最大100の項目を含めることができ、データの16メガバイト、最大取得することができます。応答のサイズ制限は、テーブルのプロビジョニングされたスループットを超えた、または内部処理に障害が発生した場合、超過した場合BatchGetItemは、部分的な結果を返します。部分的な結果が返された場合、操作はUnprocessedKeysの値を返します。あなたが取得するには次の項目で始まる操作を再試行して、この値を使用することができます。

あなたは100項目を取得するように依頼しますが、各個々の商品はサイズ300キロバイトである場合、システムは52の​​項目を（17 MBの制限を超えないように）を返します。あなたは結果の次のページを得ることができるので、それはまた、適切なUnprocessedKeys値を返します。必要に応じて、あなたのアプリケーションは、1つのデータ·セットに結果のページを組み立てるために独自のロジックを含めることができます。

アイテムのどれが要求内のすべての表には不十分プロビジョニングスループットが原因で処理できない場合、BatchGetItemはProvisionedThroughputExceededExceptionを返します。項目のうちの少なくとも一方が正常に処理された場合UnprocessedKeysに未読アイテムのキーを戻しながら、その後BatchGetItemは、正常に完了します。

DynamoDBのは、未処理のアイテムを返す場合、あなたはそれらの項目のバッチ操作を再試行する必要があります。しかし、私たちは強くあなたが指数関数的なバックオフアルゴリズムを使用することをお勧めします。あなたはすぐにバッチ操作を再試行した場合、基礎となる読み取りまたは書き込み要求が依然としてによる個々のテーブルの上に絞りに失敗することがあります。あなたは指数バックオフを使用して、バッチ操作を遅らせる場合は、バッチ内の個々の要求は、はるかに成功する可能性があります。

詳細については、バッチ処理とエラーがアマゾンDynamoDBの開発者ガイドに処理を参照してください。

デフォルトでは、BatchGetItemは、要求内のすべてのテーブルの上に読み込み、最終的に一致して実行します。あなたは強く一貫ではなく読み込みたい場合は、いずれかまたはすべてのテーブルに対してtrueにConsistentReadを設定することができます。

応答待ち時間を最小限にするために、BatchGetItemは並列でアイテムを取り出します。

アプリケーションを設計する場合、DynamoDBのは特定の順序で属性を返さないことに注意してください。アイテムによって応答を解析しやすくするために、AttributesToGetパラメータにリクエスト内の項目の主キー値が含まれています。

要求された項目が存在しない場合は、結果に返されません。存在しないアイテムの要求は、リードの種類に応じて、最小リードキャパシティ·ユニットを消費します。詳細については、Amazon DynamoDBのデベロッパガイドのキャパシティー·ユニットの計算を参照してください。

例：

batchGetItem操作を呼び出します
のvarのparams = {
  RequestItems：{/ *必要* /
    someKey：{
      キー：[/ * *必要/
        {
          someKey：{/ * AttributeValueの* /
            B：新しいバッファ（ '...'）|| 'STRING_VALUE」、
            BOOL：真||偽、
            BS：[
              新しいバッファ（ '...'）|| 'STRING_VALUE」、
              / *複数のアイテム* /
            ]、
            L：[
              / *再帰AttributeValueの* /、
              / *複数のアイテム* /
            ]、
            M：{
              someKey：/ *再帰AttributeValueの* /、
              / * anotherKey：... * /
            }、
            N：「STRING_VALUE」、
            NS：[
              「STRING_VALUE」、
              / *複数のアイテム* /
            ]、
            NULL：真||偽、
            S：「STRING_VALUE」、
            SS：[
              「STRING_VALUE」、
              / *複数のアイテム* /
            ]
          }、
          / * anotherKey：... * /
        }、
        / *複数のアイテム* /
      ]、
      AttributesToGet：[
        「STRING_VALUE」、
        / *複数のアイテム* /
      ]、
      ConsistentRead：真||偽、
      ExpressionAttributeNames：{
        someKey：「STRING_VALUE」、
        / * anotherKey：... * /
      }、
      ProjectionExpression： 'STRING_VALUE」
    }、
    / * anotherKey：... * /
  }、
  ReturnConsumedCapacity：「INDEXES | TOTAL | NONE」
};
dynamodb.batchGetItem（paramsは、関数（errは、データ）{
  （ERR）はconsole.log（ERR、err.stack）であれば、 //エラーが発生しました
  他にconsole.log（データ）; //正常な応答
}）;
パラメータ：
paramsは（オブジェクト）（デフォルト：{}） - 
RequestItems - （マップ<地図>）
テーブルごとに1つ以上の表の名前と、そのテーブルから取得するための1つ以上の項目について説明しますマップのマップ。各テーブル名は一度だけBatchGetItem要求ごとに使用することができます。

取得する項目のマップの各要素には、以下で構成されています。

ConsistentRead - trueの場合、強く一貫した読み取りが使用されています。 （デフォルト）falseの場合、最終的に一貫した読み取りが使用されます。
ExpressionAttributeNames - ProjectionExpressionパラメータの属性名の一つまたは複数の置換トークン。以下は、ExpressionAttributeNamesを使用するためのいくつかのユースケースであります：
名前がDynamoDBの予約語との競合属性にアクセスするには。
式に属性名の発生を繰り返すのプレースホルダを作成します。
式の中で誤って解釈されることから、属性名に特殊文字を防ぐために。
属性名を逆参照に式に＃文字を使用します。たとえば、次の属性名を考えてみます。

パーセンタイル値
この属性の名前は、予約語と競合するので、式の中で直接使用することはできません。 （予約語の完全なリストについては、Amazon DynamoDBのデベロッパガイドの予約語を参照してください）​​。この問題を回避するには、ExpressionAttributeNamesのために次のように指定することができます。

{"#P"： "パーセンタイル"}
次に、この例のように、式の中で、この置換を使用することができます。

#P =ヴァル
注：で始まるトークン：キャラクターは、実行時に実際の値のプレースホルダです式属性の値です。
属性名の式の詳細については、アクセス項目はアマゾンDynamoDBの開発者ガイドの属性を参照してください。

キー - テーブル内の特定の項目を定義する主キー属性値の配列。各主キーでは、キー属性のすべてを提供しなければなりません。例えば、ハッシュ型主キーを持つ、あなただけのハッシュ属性を提供する必要があります。ハッシュとレンジタイプの主キーでは、ハッシュ属性と範囲属性の両方を提供する必要があります。
ProjectionExpression - テーブルから取得するために、1つまたは複数の属性を識別する文字列。これらの属性は、スカラー、セット、またはJSONドキュメントの要素を含むことができます。式の属性は、カンマで区切る必要があります。
何の属性名が指定されていない場合は、すべての属性が返されます。要求された属性のいずれかが見つからない場合は、結果に表示されません。

詳細については、Amazon DynamoDBの開発者ガイドにアイテム属性へのアクセスを参照してください。

AttributesToGet - これは、下位互換性のために、従来のパラメータです。新しいアプリケーションでは、代わりにProjectionExpressionを使用する必要があります。 1回のAPI呼び出しで、従来のパラメータと式パラメータを組み合わせて使用​​しないでください。そうしないと、DynamoDBのはにValidationException例外が返されます。
このパラメータを使用すると、型のリストや地図の属性を取得することができます。しかし、それは、リストまたは地図内の個々の要素を取得することはできません。

取得するための1つ以上の属性の名前。何の属性名が提供されていない場合は、すべての属性が返されます。要求された属性のいずれかが見つからない場合は、結果に表示されません。

AttributesToGetプロビジョニングスループット消費には影響がないことに注意してください。 DynamoDBのではなく、アプリケーションに返されるデータの量、アイテムのサイズに基づいて、消費容量の単位を決定します。

キー - 必要 - （配列<マップ<マップ>>）
アイテムとアイテムに関連付けられた属性を定義する主キー属性値。

S - （文字列）
Stringデータ型。

N - （文字列）
Numberデータ型。

B - （バッファ、型指定された配列、ブロブ、文字列）
バイナリ·データ型。

SS - （アレイ<文字列>）
文字セット·データ·タイプ。

NS - （アレイ<文字列>）
番号を設定しデータ型。

BS - （配列<バッファ、型指定された配列、ブロブ、文字列>）
バイナリセット·データ·タイプ。

M - （マップ<地図>）
属性値のマップ。

L - （アレイ<地図>）
属性値のリスト。

NULL - （ブール値）
ヌルデータ型。

BOOL - （ブール値）
Booleanデータ型。

AttributesToGet - （アレイ<文字列>）
テーブルまたはインデックスから取得するための1つまたは複数の属性。何の属性名が指定されていない場合は、すべての属性が返されます。指定された属性のいずれかが見つからない場合は、結果に表示されません。

ConsistentRead - （ブール値）
読み出し動作の整合性。 trueに設定すると、強く一貫した読み取りが使用されます。それ以外の場合は、最終的に一貫した読み取りが使用されます。

ProjectionExpression - （文字列）
テーブルから取得するための1つまたは複数の属性を識別する文字列。これらの属性は、スカラー、セット、またはJSONドキュメントの要素を含むことができます。 ProjectionExpressionの属性はカンマで区切る必要があります。

何の属性名が指定されていない場合は、すべての属性が返されます。要求された属性のいずれかが見つからない場合は、結果に表示されません。

詳細については、Amazon DynamoDBの開発者ガイドにアイテム属性へのアクセスを参照してください。

注：ProjectionExpressionは、レガシーAttributesToGetパラメータを置き換えます。
ExpressionAttributeNames - （マップ<文字列>）
式の属性名のための1つ以上の置換トークン。以下は、ExpressionAttributeNamesを使用するためのいくつかのユースケースであります：

名前がDynamoDBの予約語との競合属性にアクセスするには。
式に属性名の発生を繰り返すのプレースホルダを作成します。
式の中で誤って解釈されることから、属性名に特殊文字を防ぐために。
属性名を逆参照に式に＃文字を使用します。たとえば、次の属性名を考えてみます。

パーセンタイル値
この属性の名前は、予約語と競合するので、式の中で直接使用することはできません。 （予約語の完全なリストについては、Amazon DynamoDBのデベロッパガイドの予約語を参照してください）​​。この問題を回避するには、ExpressionAttributeNamesのために次のように指定することができます。

{"#P"： "パーセンタイル"}
次に、この例のように、式の中で、この置換を使用することができます。

#P =ヴァル
注：で始まるトークン：キャラクターは、実行時に実際の値のプレースホルダです式属性の値です。
式の詳細については属性名、属性名とAmazon DynamoDBのデベロッパガイドの値のプレースホルダの使用を参照してください。

ReturnConsumedCapacity - （文字列）
TOTALに設定した場合、応答は表および索引のConsumedCapacityデータが含まれている値。インデックスに設定した場合、応答はインデックスにConsumedCapacityが含まれています。 NONE（デフォルト）に設定すると、ConsumedCapacityは応答に含まれていません。

可能な値は次のとおりです。
「索引」
「TOTAL」
「無し」
コー​​ルバック（コールバック）：
関数（ERR、データ）{...}
サービスからの応答が返されたときに呼び出されます。コー​​ルバックが供給されていない場合は、要求を開始するために、返されたリクエスト·オブジェクトにあるAWS.Request.send（）を呼び出す必要があります。

コンテキスト（この）：
（AWS.Response） - エラーを含む応答オブジェクト、データプロパティ、および元のリクエストオブジェクト。
パラメータ：
ERR（エラー） - 要求から返されたエラーオブジェクト。リクエストが成功した場合はnullに設定します。
データ（オブジェクト） - 要求から返されるデシリアライズされたデータ。リクエストエラーが発生した場合はnullに設定します。データオブジェクトは、次のプロパティがあります。
レスポンス - （マップ<配列<地図<>>>マップ）
アイテムのリストにテーブル名のマップ。レスポンス内の各オブジェクトは、データ型と属性値からなる属性データのマップと一緒に、テーブル名で構成されています。

S - （文字列）
Stringデータ型。

N - （文字列）
Numberデータ型。

B - （バッファ、型指定された配列、ブロブ、文字列）
バイナリ·データ型。

SS - （アレイ<文字列>）
文字セット·データ·タイプ。

NS - （アレイ<文字列>）
番号を設定しデータ型。

BS - （配列<バッファ、型指定された配列、ブロブ、文字列>）
バイナリセット·データ·タイプ。

M - （マップ<地図>）
属性値のマップ。

L - （アレイ<地図>）
属性値のリスト。

NULL - （ブール値）
ヌルデータ型。

BOOL - （ブール値）
Booleanデータ型。

UnprocessedKeys - （マップ<地図>）
電流応答で処理されなかったテーブルと、それぞれのキーのマップ。 UnprocessedKeys値RequestItemsと同じ形であるので、値は、後続BatchGetItem操作に直接提供することができます。詳細については、リクエストパラメータセクションのRequestItemsを参照してください。

各要素は、で構成されています。

キー - テーブル内の特定の項目を定義する主キー属性値の配列。
AttributesToGet - テーブルまたはインデックスから取得できるようにするために、1つまたは複数の属性。デフォルトでは、すべての属性が返されます。要求された属性が見つからない場合は、結果には表示されません。
ConsistentRead - 読み出し動作の一貫性。 trueに設定すると、強く一貫した読み取りが使用されます。それ以外の場合は、最終的に一貫した読み取りが使用されます。
残りの未処理のキーが存在しない場合、応答が空UnprocessedKeysマップが含まれています。

キー - 必要 - （配列<マップ<マップ>>）
アイテムとアイテムに関連付けられた属性を定義する主キー属性値。

S - （文字列）
Stringデータ型。

N - （文字列）
Numberデータ型。

B - （バッファ、型指定された配列、ブロブ、文字列）
バイナリ·データ型。

SS - （アレイ<文字列>）
文字セット·データ·タイプ。

NS - （アレイ<文字列>）
番号を設定しデータ型。

BS - （配列<バッファ、型指定された配列、ブロブ、文字列>）
バイナリセット·データ·タイプ。

M - （マップ<地図>）
属性値のマップ。

L - （アレイ<地図>）
属性値のリスト。

NULL - （ブール値）
ヌルデータ型。

BOOL - （ブール値）
Booleanデータ型。

AttributesToGet - （アレイ<文字列>）
テーブルまたはインデックスから取得するための1つまたは複数の属性。何の属性名が指定されていない場合は、すべての属性が返されます。指定された属性のいずれかが見つからない場合は、結果に表示されません。

ConsistentRead - （ブール値）
読み出し動作の整合性。 trueに設定すると、強く一貫した読み取りが使用されます。それ以外の場合は、最終的に一貫した読み取りが使用されます。

ProjectionExpression - （文字列）
テーブルから取得するための1つまたは複数の属性を識別する文字列。これらの属性は、スカラー、セット、またはJSONドキュメントの要素を含むことができます。 ProjectionExpressionの属性はカンマで区切る必要があります。

何の属性名が指定されていない場合は、すべての属性が返されます。要求された属性のいずれかが見つからない場合は、結果に表示されません。

詳細については、Amazon DynamoDBの開発者ガイドにアイテム属性へのアクセスを参照してください。

注：ProjectionExpressionは、レガシーAttributesToGetパラメータを置き換えます。
ExpressionAttributeNames - （マップ<文字列>）
式の属性名のための1つ以上の置換トークン。以下は、ExpressionAttributeNamesを使用するためのいくつかのユースケースであります：

名前がDynamoDBの予約語との競合属性にアクセスするには。
式に属性名の発生を繰り返すのプレースホルダを作成します。
式の中で誤って解釈されることから、属性名に特殊文字を防ぐために。
属性名を逆参照に式に＃文字を使用します。たとえば、次の属性名を考えてみます。

パーセンタイル値
この属性の名前は、予約語と競合するので、式の中で直接使用することはできません。 （予約語の完全なリストについては、Amazon DynamoDBのデベロッパガイドの予約語を参照してください）​​。この問題を回避するには、ExpressionAttributeNamesのために次のように指定することができます。

{"#P"： "パーセンタイル"}
次に、この例のように、式の中で、この置換を使用することができます。

#P =ヴァル
注：で始まるトークン：キャラクターは、実行時に実際の値のプレースホルダです式属性の値です。
式の詳細については属性名、属性名とAmazon DynamoDBのデベロッパガイドの値のプレースホルダの使用を参照してください。

ConsumedCapacity - （アレイ<地図>）
動作によって消費リードキャパシティユニット。

各要素は、で構成されています。

テーブル名 - プロビジョニングされたスループットを消費するテーブル。
CapacityUnits - 消費容量単位の総数。
テーブル名 - （文字列）
操作によって影響を受けたテーブルの名前。

CapacityUnits - （フロート）
操作によって消費容量単位の総数。

表 - （マップ）
スループットの量は、操作の影響を受けたテーブルの上に消費しました。

LocalSecondaryIndexes - （マップ<地図>）
スループットの量は、操作の影響を受けた各ローカル索引で消費しました。

戻り値：
（AWS.Request） - その後のイベントコールバックの登録の操作要求へのハンドル。
batchWriteItem（paramsは= {}、コールバック）がAWS.Requestを⇒します

BatchWriteItem操作は、1つ以上のテーブルに複数の項目を置くか、削除されます。 BatchWriteItemへの単一の呼び出しは、多くの25としてプットを含むか、または要求を削除することができ、データの16メガバイト、最大書くことができます。書き込まれる個々のアイテムは、400 KBのように大きくすることができます。

注：BatchWriteItemは、アイテムを更新することはできません。アイテムを更新するには、UpdateItem APIを使用します。
BatchWriteItemで指定された個々のPutItemとDeleteItem操作はアトミックです。しかし、全体としてBatchWriteItemではありません。テーブルのプロビジョニングされたスループットを超えたため、任意の要求された操作が失敗したり、内部処理エラーが発生した場合、失敗した操作がUnprocessedItems応答パラメータで返されます。あなたが調査し、必要に応じて要求を再送信することができます。通常は、ループ内でBatchWriteItemを呼び出します。各繰り返しは、未処理の項目をチェックし、すべての項目が処理されるまで、これらの未処理の項目に新しいBatchWriteItem要求を提出します。

アイテムのいずれもが原因で、要求内のすべての表に十分なプロビジョニングスループットに加工することができない場合、BatchWriteItemはProvisionedThroughputExceededExceptionを返すことに注意してください。

DynamoDBのは、未処理のアイテムを返す場合、あなたはそれらの項目のバッチ操作を再試行する必要があります。しかし、私たちは強くあなたが指数関数的なバックオフアルゴリズムを使用することをお勧めします。あなたはすぐにバッチ操作を再試行した場合、基礎となる読み取りまたは書き込み要求が依然としてによる個々のテーブルの上に絞りに失敗することがあります。あなたは指数バックオフを使用して、バッチ操作を遅らせる場合は、バッチ内の個々の要求は、はるかに成功する可能性があります。

詳細については、バッチ処理とエラーがアマゾンDynamoDBの開発者ガイドに処理を参照してください。

BatchWriteItemを使用すると、効率的に書き込みや削除などアマゾンElastic MapReduceは（EMR）からのような大量のデータを、またはDynamoDBの中に別のデータベースからデータをコピーすることができます。これらの大規模な操作で性能を向上させるために、BatchWriteItemは個々PutItemと同じように動作しないとDeleteItemを呼び出すだろう。たとえば、個々のプットの条件を指定し、要求を削除し、BatchWriteItemは応答して削除されたアイテムを返しませんことはできません。

あなたはJavaなどの同時実行をサポートするプログラミング言語を使用する場合は、並列に項目を書き込むためにスレッドを使用することができます。あなたのアプリケーションは、スレッドを管理するために必要なロジックを含める必要があります。 PHPなどのスレッド化をサポートしていない言語では、一度に指定した項目1を更新または削除する必要があります。両方の状況では、BatchWriteItemは、APIがアプリケーションに複雑さを導入することなく、あなたのスレッドプールのアプローチの力を与えて、並列に入れて指定し、削除操作を実行する代替手段を提供します。

並列処理は、レイテンシは減少しますが、それぞれが置かれ、要求を削除し、それが平行かどうかで処理されるかどうか、書き込み容量ユニットの同じ数を消費する指定します。存在しない項目の削除操作は、1つの書き込み容量ユニットを消費します。

次のうちの1つまたは複数が真の場合、DynamoDBのはバッチ全体の書き込み操作を拒否します：

BatchWriteItem要求で指定された1つまたは複数のテーブルが存在しません。
要求の項目に指定された主キーの属性は、対応するテーブルの主キーのスキーマ内のものと一致していません。
同じBatchWriteItem要求に同じアイテムで複数の操作を実行してみてください。たとえば、同じBatchWriteItem要求で同じ項目を入れて、削除することはできません。
バッチ内の25以上の要求があります。
バッチ内の個々のアイテムは400キロバイトを超えています。
リクエストの合計サイズが16メガバイトを超えています。
例：

batchWriteItem操作を呼び出します
のvarのparams = {
  RequestItems：{/ *必要* /
    someKey：[
      {
        DeleteRequest：{
          キー：{/ *必要* /
            someKey：{/ * AttributeValueの* /
              B：新しいバッファ（ '...'）|| 'STRING_VALUE」、
              BOOL：真||偽、
              BS：[
                新しいバッファ（ '...'）|| 'STRING_VALUE」、
                / *複数のアイテム* /
              ]、
              L：[
                / *再帰AttributeValueの* /、
                / *複数のアイテム* /
              ]、
              M：{
                someKey：/ *再帰AttributeValueの* /、
                / * anotherKey：... * /
              }、
              N：「STRING_VALUE」、
              NS：[
                「STRING_VALUE」、
                / *複数のアイテム* /
              ]、
              NULL：真||偽、
              S：「STRING_VALUE」、
              SS：[
                「STRING_VALUE」、
                / *複数のアイテム* /
              ]
            }、
            / * anotherKey：... * /
          }
        }、
        PutRequest：{
          アイテム：{/ *必要* /
            someKey：{/ * AttributeValueの* /
              B：新しいバッファ（ '...'）|| 'STRING_VALUE」、
              BOOL：真||偽、
              BS：[
                新しいバッファ（ '...'）|| 'STRING_VALUE」、
                / *複数のアイテム* /
              ]、
              L：[
                / *再帰AttributeValueの* /、
                / *複数のアイテム* /
              ]、
              M：{
                someKey：/ *再帰AttributeValueの* /、
                / * anotherKey：... * /
              }、
              N：「STRING_VALUE」、
              NS：[
                「STRING_VALUE」、
                / *複数のアイテム* /
              ]、
              NULL：真||偽、
              S：「STRING_VALUE」、
              SS：[
                「STRING_VALUE」、
                / *複数のアイテム* /
              ]
            }、
            / * anotherKey：... * /
          }
        }
      }、
      / *複数のアイテム* /
    ]、
    / * anotherKey：... * /
  }、
  ReturnConsumedCapacity：「INDEXES | TOTAL | NONE」、
  ReturnItemCollectionMetrics： 'SIZE | NONE」
};
dynamodb.batchWriteItem（paramsは、関数（errは、データ）{
  （ERR）はconsole.log（ERR、err.stack）であれば、 //エラーが発生しました
  他にconsole.log（データ）; //正常な応答
}）;
パラメータ：
paramsは（オブジェクト）（デフォルト：{}） - 
RequestItems - （マップ<配列<地図>>）
テーブルごとに1つ以上の表の名前と、実行される操作のリスト（DeleteRequestまたはPutRequest）の地図。マップの各要素には、以下で構成されています。

DeleteRequest - 指定された項目にDeleteItem操作を実行します。削除する項目がキーサブ要素によって識別されます。
キー - 一意に識別する主キー属性値のマップ！アイテム。このマップの各エントリは、属性名と属性値から成ります。各主キーでは、キー属性のすべてを提供しなければなりません。例えば、ハッシュ型主キーを持つ、あなただけのハッシュ属性を提供する必要があります。ハッシュとレンジタイプの主キーでは、ハッシュ属性と範囲属性の両方を提供する必要があります。
PutRequest - 指定された項目にPutItem操作を実行します。置くべき項目は、アイテムのサブエレメントによって識別されます。
アイテム - 属性とその値のマップ。このマップの各エントリは、属性名と属性値から成ります。属性値がnullであってはなりません。文字列とバイナリ型の属性がゼロよりも大きい長さを持っている必要があります。と設定型属性は空にすることはできません。空の値が含まれている要求はにValidationException例外で拒否されます。
あなたが索引キーの一部であるすべての属性を指定した場合、それらの属性のデータ型は、テーブルの属性定義のスキーマのものと一致しなければなりません。

PutRequest - （マップ）
PutItem操作を実行するための要求。

アイテム - 必要 - （マップ<地図>）
PutItemによって処理される項目の主キーを表す属性値の属性名のマップ。テーブルの主キー属性のすべてを指定する必要があり、それらのデータ型は、テーブルのキーとスキーマのものと一致しなければなりません。いずれかの属性がテーブルのインデックスキーのスキーマの一部である項目に存在する場合、その型は、インデックスキーのスキーマと一致しなければなりません。

S - （文字列）
Stringデータ型。

N - （文字列）
Numberデータ型。

B - （バッファ、型指定された配列、ブロブ、文字列）
バイナリ·データ型。

SS - （アレイ<文字列>）
文字セット·データ·タイプ。

NS - （アレイ<文字列>）
番号を設定しデータ型。

BS - （配列<バッファ、型指定された配列、ブロブ、文字列>）
バイナリセット·データ·タイプ。

M - （マップ<地図>）
属性値のマップ。

L - （アレイ<地図>）
属性値のリスト。

NULL - （ブール値）
ヌルデータ型。

BOOL - （ブール値）
Booleanデータ型。

DeleteRequest - （マップ）
DeleteItem操作を実行するための要求。

キー - 必要 - （マップ<地図>）
削除する項目の主キーを表す属性値の属性名のマップ。テーブルの主キー属性のすべてを指定する必要があり、それらのデータ型は、テーブルのキーとスキーマのものと一致しなければなりません。

ReturnConsumedCapacity - （文字列）
TOTALに設定した場合、応答は表および索引のConsumedCapacityデータが含まれている値。インデックスに設定した場合、応答はインデックスにConsumedCapacityが含まれています。 NONE（デフォルト）に設定すると、ConsumedCapacityは応答に含まれていません。

可能な値は次のとおりです。
「索引」
「TOTAL」
「無し」
ReturnItemCollectionMetrics - （文字列）
SIZEに設定すると、応答が動作中に変更されたアイテムのコレクション、もしあれば、統計情報を含んでいることの値は、応答で返されます。 NONE（デフォルト）に設定した場合、統計情報は返されません。

可能な値は次のとおりです。
"SIZE"
「無し」
コー​​ルバック（コールバック）：
関数（ERR、データ）{...}
サービスからの応答が返されたときに呼び出されます。コー​​ルバックが供給されていない場合は、要求を開始するために、返されたリクエスト·オブジェクトにあるAWS.Request.send（）を呼び出す必要があります。

コンテキスト（この）：
（AWS.Response） - エラーを含む応答オブジェクト、データプロパティ、および元のリクエストオブジェクト。
パラメータ：
ERR（エラー） - 要求から返されたエラーオブジェクト。リクエストが成功した場合はnullに設定します。
データ（オブジェクト） - 要求から返されるデシリアライズされたデータ。リクエストエラーが発生した場合はnullに設定します。データオブジェクトは、次のプロパティがあります。
UnprocessedItems - （マップ<配列<地図>>）
テーブルと処理されなかったこれらのテーブルに対する要求のマップ。 UnprocessedItems値はRequestItemsと同じ形式であるので、あなたは、その後のBatchGetItem動作に直接この値を提供することができます。詳細については、リクエストパラメータセクションのRequestItemsを参照してください。

各UnprocessedItemsエントリはテーブル名で構成され、そのテーブルのために、操作のリストは、（DeleteRequestまたはPutRequest）を実行します。

DeleteRequest - 指定された項目にDeleteItem操作を実行します。削除する項目がキーサブ要素によって識別されます。
キー - アイテムを一意に識別する主キー属性値のマップ。このマップの各エントリは、属性名と属性値から成ります。
PutRequest - 指定された項目にPutItem操作を実行します。置くべき項目は、アイテムのサブエレメントによって識別されます。
アイテム - 属性とその値のマップ。このマップの各エントリは、属性名と属性値から成ります。属性値がnullであってはなりません。文字列とバイナリ型の属性がゼロよりも大きい長さを持っている必要があります。と設定型属性は空にすることはできません。空の値が含まれている要求はにValidationException例外で拒否されます。
あなたが索引キーの一部であるすべての属性を指定した場合、それらの属性のデータ型は、テーブルの属性定義のスキーマのものと一致しなければなりません。

残りの未処理の項目がない場合は、応答が空UnprocessedItemsマップが含まれています。

PutRequest - （マップ）
PutItem操作を実行するための要求。

アイテム - 必要 - （マップ<地図>）
PutItemによって処理される項目の主キーを表す属性値の属性名のマップ。テーブルの主キー属性のすべてを指定する必要があり、それらのデータ型は、テーブルのキーとスキーマのものと一致しなければなりません。いずれかの属性がテーブルのインデックスキーのスキーマの一部である項目に存在する場合、その型は、インデックスキーのスキーマと一致しなければなりません。

S - （文字列）
Stringデータ型。

N - （文字列）
Numberデータ型。

B - （バッファ、型指定された配列、ブロブ、文字列）
バイナリ·データ型。

SS - （アレイ<文字列>）
文字セット·データ·タイプ。

NS - （アレイ<文字列>）
番号を設定しデータ型。

BS - （配列<バッファ、型指定された配列、ブロブ、文字列>）
バイナリセット·データ·タイプ。

M - （マップ<地図>）
属性値のマップ。

L - （アレイ<地図>）
属性値のリスト。

NULL - （ブール値）
ヌルデータ型。

BOOL - （ブール値）
Booleanデータ型。

DeleteRequest - （マップ）
DeleteItem操作を実行するための要求。

キー - 必要 - （マップ<地図>）
削除する項目の主キーを表す属性値の属性名のマップ。テーブルの主キー属性のすべてを指定する必要があり、それらのデータ型は、テーブルのキーとスキーマのものと一致しなければなりません。

ItemCollectionMetrics - （マップ<配列<地図>>）
BatchWriteItemと、各テーブルに、個々のDeleteItemまたはPutItem操作によって影響を受けた任意のアイテムのコレクションに関する情報が処理されたテーブルのリスト。

各エントリには、次のサブ要素で構成されています。

ItemCollectionKey - アイテムコレクションのハッシュ·キー値。これは、アイテムのハッシュキーと同じです。
SizeEstimateRange - アイテムコレクションの大きさの推定値は、GB単位で表されます。これは、推定値の下限と上限を含む2要素配列です。推定値は、テーブル内のすべての項目の大きさに加え、表のローカルセカンダリインデックスのすべてに投影すべての属性のサイズが含まれます。ローカルセカンダリインデックスのサイズが上限に近づいているかどうかを測定するために、この推定値を使用します。
推定値は、時間の経過とともに変更されることがあります。したがって、推定の精度や正確さに依存しません。

ItemCollectionKey - （マップ<地図>）
アイテムコレクションのハッシュ·キー値。この値は、アイテムのハッシュキーと同じです。

S - （文字列）
Stringデータ型。

N - （文字列）
Numberデータ型。

B - （バッファ、型指定された配列、ブロブ、文字列）
バイナリ·データ型。

SS - （アレイ<文字列>）
文字セット·データ·タイプ。

NS - （アレイ<文字列>）
番号を設定しデータ型。

BS - （配列<バッファ、型指定された配列、ブロブ、文字列>）
バイナリセット·データ·タイプ。

M - （マップ<地図>）
属性値のマップ。

L - （アレイ<地図>）
属性値のリスト。

NULL - （ブール値）
ヌルデータ型。

BOOL - （ブール値）
Booleanデータ型。

SizeEstimateRangeGB - （アレイ<フロート>）
ギガバイト単位でアイテムコレクションサイズの推定値。この値は、推定値の下限と上限を含む2要素配列です。推定値は、テーブル内のすべての項目の大きさに加え、その表のローカルセカンダリインデックスのすべてに投影すべての属性のサイズが含まれます。ローカルセカンダリインデックスのサイズが上限に近づいているかどうかを測定するために、この推定値を使用します。

推定値は、時間の経過とともに変更されることがあります。したがって、推定の精度や正確さに依存しません。
```