DynamoDB - pobieranie partii
Operacje Batch Retrieve zwracają atrybuty jednego lub wielu elementów. Operacje te zazwyczaj polegają na użyciu klucza głównego do identyfikacji żądanych elementów. PlikBatchGetItem operacje podlegają ograniczeniom poszczególnych operacji, jak również własnym, unikalnym ograniczeniom.
Następujące żądania w operacjach pobierania zbiorczego powodują odrzucenie -
- Poproś o więcej niż 100 pozycji.
- Złóż żądanie przekraczające przepustowość.
Operacje pobierania zbiorczego wykonują częściowe przetwarzanie żądań mogących przekroczyć limity.
For example- żądanie pobrania wielu elementów dostatecznie dużych, aby przekroczyć limity, skutkuje częścią przetwarzania żądania i komunikatem o błędzie informującym o nieprzetworzonej części. Po zwrocie nieprzetworzonych elementów utwórz rozwiązanie algorytmu wycofywania, aby zarządzać tym, zamiast ograniczać tabele.
Plik BatchGetoperacje są ostatecznie wykonywane ze spójnymi odczytami, wymagając modyfikacji w przypadku silnie spójnych. Równolegle wykonują również pobieranie.
Note- Kolejność zwracanych towarów. DynamoDB nie sortuje elementów. Nie wskazuje również na brak żądanych pozycji. Ponadto żądania te zużywają jednostki mocy.
Wszystkie operacje BatchGet wymagają RequestItems parametry, takie jak spójność odczytu, nazwy atrybutów i klucze podstawowe.
Response - Pomyślna operacja skutkuje odpowiedzią HTTP 200, która wskazuje takie cechy, jak zużyte jednostki mocy obliczeniowej, metryki przetwarzania tabeli i wszelkie nieprzetworzone elementy.
Pobieranie zbiorcze za pomocą języka Java
Używanie języka Java w operacjach BatchGet wymaga utworzenia instancji klasy DynamoDB, TableKeysAndAttributes instancja klasy opisująca listę wartości kluczy podstawowych dla elementów i przekazująca obiekt TableKeysAndAttributes do BatchGetItem metoda.
Poniżej znajduje się przykład operacji BatchGet -
DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient (
new ProfileCredentialsProvider()));
TableKeysAndAttributes forumTableKeysAndAttributes = new TableKeysAndAttributes
(forumTableName);
forumTableKeysAndAttributes.addHashOnlyPrimaryKeys (
"Title",
"Updates",
"Product Line 1"
);
TableKeysAndAttributes threadTableKeysAndAttributes = new TableKeysAndAttributes (
threadTableName);
threadTableKeysAndAttributes.addHashAndRangePrimaryKeys (
"ForumTitle",
"Topic",
"Product Line 1",
"P1 Thread 1",
"Product Line 1",
"P1 Thread 2",
"Product Line 2",
"P2 Thread 1"
);
BatchGetItemOutcome outcome = dynamoDB.batchGetItem (
forumTableKeysAndAttributes, threadTableKeysAndAttributes);
for (String tableName : outcome.getTableItems().keySet()) {
System.out.println("Table items " + tableName);
List<Item> items = outcome.getTableItems().get(tableName);
for (Item item : items) {
System.out.println(item);
}
}
Możesz przejrzeć następujący większy przykład.
Note- Poniższy program może zakładać wcześniej utworzone źródło danych. Przed przystąpieniem do wykonania należy nabyć biblioteki pomocnicze i utworzyć niezbędne źródła danych (tabele z wymaganymi cechami lub inne źródła, do których istnieją odniesienia).
Ten program wykorzystuje również Eclipse IDE, plik poświadczeń AWS oraz AWS Toolkit w ramach projektu Eclipse AWS Java.
package com.amazonaws.codesamples.document;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.BatchGetItemOutcome;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.TableKeysAndAttributes;
import com.amazonaws.services.dynamodbv2.model.KeysAndAttributes;
public class BatchGetOpSample {
static DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient (
new ProfileCredentialsProvider()));
static String forumTableName = "Forum";
static String threadTableName = "Thread";
public static void main(String[] args) throws IOException {
retrieveMultipleItemsBatchGet();
}
private static void retrieveMultipleItemsBatchGet() {
try {
TableKeysAndAttributes forumTableKeysAndAttributes =
new TableKeysAndAttributes(forumTableName);
//Create partition key
forumTableKeysAndAttributes.addHashOnlyPrimaryKeys (
"Name",
"XYZ Melt-O-tron",
"High-Performance Processing"
);
TableKeysAndAttributes threadTableKeysAndAttributes =
new TableKeysAndAttributes(threadTableName);
//Create partition key and sort key
threadTableKeysAndAttributes.addHashAndRangePrimaryKeys (
"ForumName",
"Subject",
"High-Performance Processing",
"HP Processing Thread One",
"High-Performance Processing",
"HP Processing Thread Two",
"Melt-O-Tron",
"MeltO Thread One"
);
System.out.println("Processing...");
BatchGetItemOutcome outcome = dynamoDB.batchGetItem(forumTableKeysAndAttributes,
threadTableKeysAndAttributes);
Map<String, KeysAndAttributes> unprocessed = null;
do {
for (String tableName : outcome.getTableItems().keySet()) {
System.out.println("Table items for " + tableName);
List<Item> items = outcome.getTableItems().get(tableName);
for (Item item : items) {
System.out.println(item.toJSONPretty());
}
}
// Confirm no unprocessed items
unprocessed = outcome.getUnprocessedKeys();
if (unprocessed.isEmpty()) {
System.out.println("All items processed.");
} else {
System.out.println("Gathering unprocessed items...");
outcome = dynamoDB.batchGetItemUnprocessed(unprocessed);
}
} while (!unprocessed.isEmpty());
} catch (Exception e) {
System.err.println("Could not get items.");
System.err.println(e.getMessage());
}
}
}