Amazon DynamoDB
開発者ガイド (API バージョン 2012-08-10)

AWS SDK for .NET オブジェクト永続性モデルを使用したバッチオペレーション

バッチ書き込み: 複数の項目の書き込みおよび削除

単一のリクエストでテーブルに対して複数のオブジェクトを入力または削除するには、次の手順を実行します。

  • CreateBatchWriteDynamoDBContext メソッドを実行して、BatchWrite クラスのインスタンスを作成します。

  • 入力または削除する項目を指定します。

    • 1 つ以上の項目を入力するには、AddPutItem または AddPutItems メソッドを使用します。

    • 1 つ以上の項目を削除するには、項目のプライマリキーを指定するか、削除する項目にマッピングするクライアント側オブジェクトを指定します。削除する項目のリストを指定するには、AddDeleteItemAddDeleteItems、および AddDeleteKey メソッドを使用します。

  • 指定したすべての項目をテーブルに入力またはテーブルから削除するには、BatchWrite.Execute メソッドを呼び出します。

注記

オブジェクト永続性モデルを使用する場合には、バッチ内で任意の数のオペレーションを指定できます。ただし DynamoDB では、1 つのバッチ内のオペレーションの数と、1 つのバッチオペレーションでのバッチの合計サイズが制限されています。制限の具体的な詳細については、BatchWriteItem を参照してください。許容されている書き込みリクエスト数、または許容されている HTTP ペイロードの最大サイズをバッチ書き込みリクエストが超えたことを API が検出すると、バッチが複数の小さなバッチに分割されます。さらに、バッチ書き込みに対する応答で、未処理の項目が返された場合には、API がそれら未処理の項目を使用して、別のバッチリクエストを自動的に送信します。

DynamoDB の ProductCatalog テーブルにマッピングされる、C# クラスの Book クラスを定義しているとします。次の C# コードスニペットでは、BatchWrite オブジェクトを使用して、ProductCatalog テーブルに 2 つの項目をアップロードし、1 つの項目を削除しています。

DynamoDBContext context = new DynamoDBContext(client); var bookBatch = context.CreateBatchWrite<Book>(); // 1. Specify two books to add. Book book1 = new Book { Id = 902, ISBN = "902-11-11-1111", ProductCategory = "Book", Title = "My book3 in batch write" }; Book book2 = new Book { Id = 903, ISBN = "903-11-11-1111", ProductCategory = "Book", Title = "My book4 in batch write" }; bookBatch.AddPutItems(new List<Book> { book1, book2 }); // 2. Specify one book to delete. bookBatch.AddDeleteKey(111); bookBatch.Execute();

複数のテーブルを対象にオブジェクトを入力または削除するには、次の手順を実行します。

  • それぞれの型について BatchWrite クラスの 1 つのインスタンスを作成し、前述のセクションで説明したように、入力または削除する項目を指定します。

  • 次のいずれかの方法を使用して、MultiTableBatchWrite のインスタンスを作成します。

    • 前述のステップで作成したいずれかの Combine オブジェクトで、BatchWrite メソッドを実行します。

    • MultiTableBatchWrite オブジェクトのリストを入力して、BatchWrite 型のインスタンスを作成します。

    • CreateMultiTableBatchWriteDynamoDBContext メソッドを実行して、BatchWrite オブジェクトのリストを渡します。

  • 指定された入力および削除オペレーションを各種のテーブルで実行する、ExecuteMultiTableBatchWrite メソッドを呼び出します。

DynamoDB で Forum および Thread テーブルにマッピングされる、Forum および Thread C# クラスを定義しているとします。さらに、Thread クラスでバージョニングが有効になっているとします。バッチオペレーションではバージョニングがサポートされていないため、次の C# コードスニペットに示すように、バージョニングを明示的に無効にする必要があります。このコードスニペットでは、MultiTableBatchWrite オブジェクトを使用して複数のテーブルを更新しています。

DynamoDBContext context = new DynamoDBContext(client); // Create BatchWrite objects for each of the Forum and Thread classes. var forumBatch = context.CreateBatchWrite<Forum>(); DynamoDBOperationConfig config = new DynamoDBOperationConfig(); config.SkipVersionCheck = true; var threadBatch = context.CreateBatchWrite<Thread>(config); // 1. New Forum item. Forum newForum = new Forum { Name = "Test BatchWrite Forum", Threads = 0 }; forumBatch.AddPutItem(newForum); // 2. Specify a forum to delete by specifying its primary key. forumBatch.AddDeleteKey("Some forum"); // 3. New Thread item. Thread newThread = new Thread { ForumName = "Amazon S3 forum", Subject = "My sample question", KeywordTags = new List<string> { "Amazon S3", "Bucket" }, Message = "Message text" }; threadBatch.AddPutItem(newThread); // Now execute multi-table batch write. var superBatch = new MultiTableBatchWrite(forumBatch, threadBatch); superBatch.Execute();

実例については、「例: AWS SDK for .NET オブジェクト永続性モデルを使用したバッチ書き込みオペレーション」を参照してください。

注記

DynamoDB バッチ API では、バッチ内の書き込み数と、バッチのサイズが制限されています。詳細については、「BatchWriteItem」を参照してください。.NET オブジェクト永続性モデル API を使用する場合は、任意の数のオペレーションを指定できます。ただし、バッチ内のオペレーションの数またはサイズが制限を超えた場合には、.NET API がバッチ書き込みリクエストを小さいバッチに分割して、複数のバッチ書き込みリクエストを DynamoDB に送信します。

バッチ取得: 複数の項目の取得

単一のリクエストでテーブルから複数の項目を取り出すには、次の手順を実行します。

  • CreateBatchGet クラスのインスタンスを作成します。

  • 取り出すプライマリキーのリストを指定します。

  • Execute メソッドを呼び出します。応答では、項目が Results プロパティによって返されます。

次の C# コードのサンプルでは、ProductCatalog テーブルから 3 つの項目を取り出しています。結果内の項目の順序は、必ずしもプライマリキーを指定した順序と同じではありません。

DynamoDBContext context = new DynamoDBContext(client); var bookBatch = context.CreateBatchGet<ProductCatalog>(); bookBatch.AddKey(101); bookBatch.AddKey(102); bookBatch.AddKey(103); bookBatch.Execute(); // Process result. Console.WriteLine(devBatch.Results.Count); Book book1 = bookBatch.Results[0]; Book book2 = bookBatch.Results[1]; Book book3 = bookBatch.Results[2];

複数のテーブルからオブジェクトを取り出すには、次の手順を実行します。

  • それぞれの型について CreateBatchGet 型のインスタンスを作成し、各テーブルから取り出すプライマリキーの値を指定します。

  • 次のいずれかの方法を使用して、MultiTableBatchGet クラスのインスタンスを作成します。

    • 前述のステップで作成したいずれかの Combine オブジェクトで、BatchGet メソッドを実行します。

    • MultiBatchGet オブジェクトのリストを入力して、BatchGet 型のインスタンスを作成します。

    • CreateMultiTableBatchGetDynamoDBContext メソッドを実行して、BatchGet オブジェクトのリストを渡します。

  • ExecuteMultiTableBatchGet メソッドを呼び出すと、個々の BatchGet オブジェクトに結果が返されます。

次の C# コードスニペットでは、CreateBatchGet メソッドを使用して、Order および OrderDetail テーブルから複数の項目を取り出しています。

var orderBatch = context.CreateBatchGet<Order>(); orderBatch.AddKey(101); orderBatch.AddKey(102); var orderDetailBatch = context.CreateBatchGet<OrderDetail>(); orderDetailBatch.AddKey(101, "P1"); orderDetailBatch.AddKey(101, "P2"); orderDetailBatch.AddKey(102, "P3"); orderDetailBatch.AddKey(102, "P1"); var orderAndDetailSuperBatch = orderBatch.Combine(orderDetailBatch); orderAndDetailSuperBatch.Execute(); Console.WriteLine(orderBatch.Results.Count); Console.WriteLine(orderDetailBatch.Results.Count); Order order1 = orderBatch.Results[0]; Order order2 = orderDetailBatch.Results[1]; OrderDetail orderDetail1 = orderDetailBatch.Results[0];