AWS SDK for .NET 객체 지속성 모델을 사용하는 일괄 작업 - Amazon DynamoDB

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS SDK for .NET 객체 지속성 모델을 사용하는 일괄 작업

일괄 쓰기 - 여러 항목 추가 및 삭제

단일 요청으로 테이블에서 여러 객체를 입력하거나 삭제하려면 다음과 같은 단계를 수행해야 합니다.

  • DynamoDBContextcreateBatchWrite 메서드를 실행하고 BatchWrite 클래스의 인스턴스를 생성합니다.

  • 입력 또는 삭제할 항목을 지정합니다.

    • 한 개 이상의 항목을 입력하려면, AddPutItem 또는 AddPutItems 메서드를 사용합니다.

    • 한 개 이상의 항목을 삭제하려면 항목의 기본 키 또는 삭제할 항목에 매핑되는 클라이언트 측 객체를 지정합니다. 삭제할 항목의 목록을 지정하려면 AddDeleteItem, AddDeleteItemsAddDeleteKey 메서드를 사용합니다.

  • 지정한 모든 항목을 테이블에서 입력 또는 제거하려면 BatchWrite.Execute 메서드를 호출합니다.

참고

객체 지속성 모델을 사용하는 경우 배치의 작업 수를 원하는 대로 지정할 수 있습니다. 그러나 Amazon DynamoDB는 배치 작업 수 및 배치 작업의 총 배치 크기를 제한합니다. 특정 제한에 대한 자세한 내용은 BatchWriteItem을 참조하십시오. API에서 배치 쓰기 요청이 허용된 쓰기 요청 수 또는 허용된 최대 HTTP 페이로드 크기를 초과했음을 감지하면 배치 작업이 여러 개의 작은 배치 작업으로 분할됩니다. 또한 배치 쓰기에 대한 응답이 처리되지 않은 항목을 반환하면 API는 이러한 처리되지 않은 항목과 함께 다른 배치 요청을 자동으로 보냅니다.

DynamoDB의 ProductCatalog 테이블에 매핑되는 C# 클래스 Book 클래스를 정의한 경우 다음 C# 코드 예제에서는 BatchWrite 객체를 사용하여 두 개의 항목을 업로드하고 ProductCatalog 테이블에서 한 개의 항목을 삭제합니다.

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 클래스의 하나의 인스턴스를 만들고, 이전 섹션에서 설명한 바와 같이 입력 또는 삭제할 항목을 지정합니다.

  • 다음 중 한 가지의 방법을 사용하여 MultiTableBatchWrite의 인스턴스를 만듭니다.

    • 이전 단계에서 만든 BatchWrite 객체 중 하나에서 Combine 메서드를 실행합니다.

    • BatchWrite 객체의 목록을 입력하여 MultiTableBatchWrite 유형의 인스턴스를 만듭니다.

    • DynamoDBContextCreateMultiTableBatchWrite 메서드를 실행하여 BatchWrite 객체의 목록을 전달합니다.

  • 지정된 입력 및 삭제 작업을 여러 테이블에서 실행하는 MultiTableBatchWriteExecute 메서드를 호출합니다.

DynamoDB의 ForumThread 테이블에 매핑되는 ForumThread 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 run 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 테이블에서 세 개의 항목을 검색합니다. 결과에서의 항목 순서는 기본 키를 지정했던 순서와 반드시 일치하지는 않습니다.

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(bookBatch.Results.Count); Book book1 = bookBatch.Results[0]; Book book2 = bookBatch.Results[1]; Book book3 = bookBatch.Results[2];

여러 테이블에서 객체를 가져오려면 다음 단계를 수행합니다.

  • 각각의 유형에 대해 CreateBatchGet 유형의 인스턴스를 만들고, 각 테이블에서 가져오고자 하는 기본 키 값을 지정합니다.

  • 다음 중 하나의 방법을 사용하여 MultiTableBatchGet 클래스의 인스턴스를 만듭니다.

    • 이전 단계에서 만든 BatchGet 객체 중 하나에서 Combine 메서드를 실행합니다.

    • BatchGet 객체의 목록을 입력하여 MultiBatchGet 유형의 인스턴스를 만듭니다.

    • DynamoDBContextCreateMultiTableBatchGet 메서드를 실행하여 BatchGet 객체의 목록을 전달합니다.

  • MultiTableBatchGetExecute 메서드를 호출합니다. 이렇게 하면 개별 BatchGet 객체에서 유형이 지정된 결과가 반환됩니다.

다음 C# 코드 예제에서는 CreateBatchGet 메서드를 사용하여 OrderOrderDetail 테이블에서 여러 항목을 검색합니다.

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 = orderBatch.Results[1]; OrderDetail orderDetail1 = orderDetailBatch.Results[0];