Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Änderungen in der DynamoDB-Zuordnung APIs zwischen Version 1 und Version 2 des SDK for Java
Erstellen Sie einen Client
Anwendungsfall | V1 | V2 |
---|---|---|
Normale Instanziierung |
|
|
Minimale Instanziierung |
|
|
Mit dem Attribut Transformator * |
|
|
* Erweiterungen in V2 entsprechen in etwa den Attributtransformatoren in V1. Der Verwenden Sie Erweiterungen, um DynamoDB Enhanced Client-Operationen anzupassen Abschnitt enthält weitere Informationen zu Erweiterungen in V2.
Zuordnung zur DynamoDB-Tabelle/zum DynamoDB-Index einrichten
In V1 geben Sie einen DynamoDB-Tabellennamen über eine Bean-Annotation an. In V2 erzeugt eine Factory-Methode,table()
, eine Instanz von, DynamoDbTable
die die Remote-DynamoDB-Tabelle darstellt. Der erste Parameter der table()
Methode ist der DynamoDB-Tabellenname.
Anwendungsfall | V1 | V2 |
---|---|---|
Ordnen Sie die Java-POJO-Klasse der DynamoDB-Tabelle zu |
|
|
Einem DynamoDB-Sekundärindex zuordnen |
Der Abschnitt im DynamoDB Developer Guide, in dem die |
Der Verwenden Sie sekundäre Indizes Abschnitt in diesem Handbuch enthält weitere Informationen. |
Tabellenoperationen
In diesem Abschnitt werden Operationen beschrieben APIs , die sich in den meisten Standardanwendungsfällen zwischen V1 und V2 unterscheiden.
In V2 werden alle Operationen, die eine einzelne Tabelle betreffen, auf der DynamoDbTable
Instanz aufgerufen, nicht auf dem erweiterten Client. Der erweiterte Client enthält Methoden, die auf mehrere Tabellen abzielen können.
In der folgenden Tabelle mit dem Namen Tabellenoperationen wird eine POJO-Instanz als item
oder als ein bestimmter Typ bezeichnet, z. B. customer1
In den V2-Beispielen sind die genannten Instanzen table
das Ergebnis eines vorherigen AufrufsenhancedClient.table()
, der einen Verweis auf die DynamoDbTable
Instanz zurückgibt.
Beachten Sie, dass die meisten V2-Operationen mit einem fließenden Benutzermuster aufgerufen werden können, auch wenn sie nicht angezeigt werden. Zum Beispiel
Customer customer = table.getItem(r → r.key(key));
or
Customer customer = table.getItem(r → r.key(k -> k.partitionValue("id").sortValue("email")))
Für V1-Operationen enthalten Tabellenoperationen (unten) einige der häufig verwendeten Formulare und nicht alle überladenen Formulare. Die load()
Methode weist beispielsweise die folgenden Überladungen auf:
mapper.load(Customer.class, hashKey)
mapper.load(Customer.class, hashKey, rangeKey)
mapper.load(Customer.class, hashKey, config)
mapper.load(Customer.class, hashKey, rangeKey, config)
mapper.load(item)
mapper.load(item, config)
Die Tabellenoperationen (unten) zeigen die am häufigsten verwendeten Formen:
mapper.load(item) mapper.load(item, config)
Anwendungsfall | V1 | V2 |
---|---|---|
Schreiben Sie ein Java-POJO in eine DynamoDB-Tabelle DynamoDB-Betrieb:, |
In V1 bestimmen |
|
Ein Element aus einer DynamoDB-Tabelle in ein Java-POJO lesen DynamoDB-Betrieb: |
|
|
Löschen Sie ein Element aus einer DynamoDB-Tabelle DynamoDB-Betrieb: |
|
|
Fragen Sie eine DynamoDB-Tabelle oder einen sekundären Index ab und geben Sie eine paginierte Liste zurück DynamoDB-Betrieb: |
|
Verwenden Sie die zurückgegebenen Daten |
Eine DynamoDB-Tabelle oder einen sekundären Index abfragen und eine Liste zurückgeben DynamoDB-Betrieb: |
|
Verwenden Sie die zurückgegebenen Daten |
Scannen Sie eine DynamoDB-Tabelle oder einen sekundären Index und geben Sie eine paginierte Liste zurück DynamoDB-Betrieb: |
|
Verwenden Sie die zurückgegebenen Daten |
Scannen Sie eine DynamoDB-Tabelle oder einen sekundären Index und geben Sie eine Liste zurück DynamoDB-Betrieb: |
|
Verwenden Sie die zurückgegebenen Daten |
Lesen Sie mehrere Elemente aus mehreren Tabellen in einem Stapel DynamoDB-Betrieb: |
|
|
Schreiben Sie mehrere Elemente in einem Stapel in mehrere Tabellen DynamoDB-Betrieb: |
|
|
Löschen Sie mehrere Elemente aus mehreren Tabellen in einem Stapel DynamoDB-Betrieb: |
|
|
Schreiben/löschen Sie mehrere Elemente in einem Stapel DynamoDB-Betrieb: |
|
|
Führen Sie einen transaktionalen Schreibvorgang durch DynamoDB-Betrieb: |
|
|
Führen Sie einen transaktionalen Lesevorgang durch DynamoDB-Betrieb: |
|
|
Ruft die Anzahl der übereinstimmenden Elemente einer Abfrage ab DynamoDB-Betrieb: mit |
|
|
Ermittelt die Anzahl der übereinstimmenden Elemente eines Scans DynamoDB-Betrieb: mit |
|
|
Erstellen Sie eine Tabelle in DynamoDB, die der POJO-Klasse entspricht DynamoDB-Betrieb: |
Die vorherige Anweisung generiert eine Low-Level-Anforderung zur Tabellenerstellung; Benutzer müssen den DynamoDB-Client aufrufen |
|
Führen Sie einen parallel Scan in DynamoDB durch DynamoDB-Operation: |
|
Benutzer müssen die Worker-Threads verwalten und jedes Segment aufrufen
|
Integrieren Sie Amazon S3 mit DynamoDB, um intelligente S3-Links zu speichern |
|
Wird nicht unterstützt, da es Amazon S3 und DynamoDB verbindet. |
Ordnen Sie Klassen und Eigenschaften zu
Sowohl in V1 als auch in V2 ordnen Sie Klassen Tabellen mithilfe von Anmerkungen im Bean-Stil zu. V2 bietet auch andere Möglichkeiten, Schemas für bestimmte Anwendungsfälle zu definieren, z. B. die Arbeit mit unveränderlichen Klassen.
Bean-Anmerkungen
Die folgende Tabelle zeigt die entsprechenden Bean-Annotationen für einen bestimmten Anwendungsfall, die in V1 und V2 verwendet werden. Ein Customer
Klassenszenario wird verwendet, um Parameter zu veranschaulichen.
Anmerkungen — ebenso wie Klassen und Aufzählungen — in V2 folgen der Camel-Case-Konvention und verwenden '', nicht 'DynamoDB'. DynamoDb
Anwendungsfall | V1 | V2 |
---|---|---|
Klasse der Tabelle zuordnen |
|
Der Tabellenname wird beim Aufrufen der DynamoDbEnhancedClient#table() Methode definiert. |
Benennen Sie ein Klassenmitglied als Tabellenattribut |
|
|
Die Benennung eines Klassenmitglieds ist ein Schlüssel hash/partition |
|
|
Die Benennung eines Klassenmitglieds ist ein Schlüssel range/sort |
|
|
Ein Klassenmitglied als sekundären Index-Hash-/Partitionsschlüssel bezeichnen |
|
|
Ein Klassenmitglied als sekundären Indexbereich/Sortierschlüssel bezeichnen |
|
|
Ignorieren Sie dieses Klassenmitglied bei der Zuordnung zu einer Tabelle |
|
|
Benennen Sie ein Klassenmitglied als automatisch generiertes UUID-Schlüsselattribut |
|
Die Erweiterung, die dies bereitstellt, wird standardmäßig nicht geladen. Sie müssen die Erweiterung zu Client Builder hinzufügen. |
Kennzeichnen Sie ein Klassenmitglied als automatisch generiertes Zeitstempelattribut |
|
Die Erweiterung, die dies bereitstellt, wird standardmäßig nicht geladen. Sie müssen die Erweiterung zu Client Builder hinzufügen. |
Kennzeichnen Sie ein Klassenmitglied als automatisch inkrementiertes Versionsattribut |
|
Die Erweiterung, die dies bereitstellt, wird automatisch geladen. |
Weisen Sie einem Klassenmitglied zu, für das eine benutzerdefinierte Konvertierung erforderlich ist |
|
|
Legen Sie ein Klassenmitglied fest, das mit einem anderen Attributtyp gespeichert werden soll |
|
Verwenden Sie eine |
Bestimmen Sie eine Klasse, die in ein DynamoDB-Dokument (Dokument im JSON-Stil) oder Unterdokument serialisiert werden kann |
|
Verwenden Sie die erweiterte Dokument-API. Weitere Informationen finden Sie in den folgenden Ressourcen:
|
V2 zusätzliche Anmerkungen
Anwendungsfall | V1 | V2 |
---|---|---|
Bestimmen Sie ein Klassenmitglied, das nicht als NULL-Attribut gespeichert werden soll, wenn der Java-Wert Null ist | N/A |
|
Bestimmen Sie ein Klassenmitglied als leeres Objekt, wenn alle Attribute Null sind | N/A |
|
Legen Sie eine spezielle Aktualisierungsaktion für ein Klassenmitglied fest | N/A |
|
Bestimmen Sie eine unveränderliche Klasse | N/A |
|
Kennzeichnen Sie ein Klassenmitglied als automatisch inkrementiertes Zählerattribut | N/A |
Die Erweiterung, die diese Funktionalität bereitstellt, wird automatisch geladen. |
Konfiguration
In V1 steuern Sie im Allgemeinen bestimmte Verhaltensweisen, indem Sie eine Instanz von DynamoDBMapperConfig
verwenden. Sie können das Konfigurationsobjekt entweder angeben, wenn Sie den Mapper erstellen oder wenn Sie eine Anfrage stellen. In V2 ist die Konfiguration spezifisch für das Anforderungsobjekt für den Vorgang.
Anwendungsfall | V1 | Standard in V1 | V2 |
---|---|---|---|
|
|||
Strategie zur load/write Wiederholung von Batch |
|
Fehlgeschlagene Artikel erneut versuchen | Konfigurieren Sie die Wiederholungsstrategie für das Basisprodukt. DynamoDBClient Weitere Informationen finden Sie Konfigurieren Sie das Wiederholungsverhalten in der AWS SDK for Java 2.x in diesem Handbuch. |
Konsistente Lesevorgänge |
|
EVENTUAL |
Standardmäßig ist der Wert für konsistente Lesevorgänge für Lesevorgänge falsch. Überschreiben .consistentRead(true) Sie mit im Anforderungsobjekt. |
Konvertierungsschema mit Sätzen von Marshallern/Unmarshallern |
Statische Implementierungen bieten Abwärtskompatibilität mit älteren Versionen. |
V2_COMPATIBLE |
Nicht zutreffend. Dies ist ein veraltetes Feature, das sich darauf bezieht, wie die frühesten Versionen von DynamoDB (V1) Datentypen gespeichert haben. Dieses Verhalten wird im erweiterten Client nicht beibehalten. Ein Beispiel für ein Verhalten in DynamoDB V1 ist das Speichern von Booleschen Werten als Zahl statt als Boolean. |
Tabellennamen |
Statische Implementierungen bieten Abwärtskompatibilität mit älteren Versionen |
verwende Anmerkungen oder Vermutungen aus der Klasse |
Der Tabellenname wird beim Aufrufen der |
Strategie beim Laden der Seitennummerierung |
Die Optionen sind: LAZY_ |
LAZY_LOADING |
|
Erfassung von Metriken anfordern |
|
null |
Verwenden Sie metricPublisher() inClientOverrideConfiguration , wenn Sie den standardmäßigen DynamoDB-Client erstellen. |
Verhalten speichern |
Die Optionen sind |
UPDATE |
In V2 rufen Sie
|
Geben Sie Converter Factory ein |
|
Wandler vom Typ Standard |
Auf die Bohne setzen mit
|
Konfiguration pro Vorgang
In Version 1 sind einige Operationen, wie z. B.query()
, mithilfe eines „Ausdrucks“ -Objekts, das der Operation übergeben wird, in hohem Maße konfigurierbar. Zum Beispiel:
DynamoDBQueryExpression<Customer> emailBwQueryExpr = new DynamoDBQueryExpression<Customer>() .withRangeKeyCondition("Email", new Condition() .withComparisonOperator(ComparisonOperator.BEGINS_WITH) .withAttributeValueList( new AttributeValue().withS("my"))); mapper.query(Customer.class, emailBwQueryExpr);
In V2 verwenden Sie kein Konfigurationsobjekt, sondern legen Parameter für das Anforderungsobjekt mithilfe eines Builders fest. Zum Beispiel:
QueryEnhancedRequest emailBw = QueryEnhancedRequest.builder() .queryConditional(QueryConditional .sortBeginsWith(kb -> kb .sortValue("my"))).build(); customerTable.query(emailBw);
Bedingungen
In V2 werden Bedingungs- und Filterausdrücke mithilfe eines Expression
Objekts ausgedrückt, das die Bedingung und die Zuordnung von Namen und Filtern kapselt.
Anwendungsfall | Operationen | V1 | V2 |
---|---|---|---|
Erwartete Attributbedingungen | speichern (), löschen (), abfragen (), scannen () |
|
Veraltet; stattdessen verwendenConditionExpression . |
Ausdruck der Bedingung | löschen () |
|
|
Filterausdruck | abfragen (), scannen () |
|
|
Bedingungsausdruck für die Abfrage | abfrage () |
|
|
Typkonvertierung
Standardkonverter
In V2 bietet das SDK eine Reihe von Standardkonvertern für alle gängigen Typen. Sie können Typkonverter sowohl auf der Gesamtanbieterebene als auch für ein einzelnes Attribut ändern. Eine Liste der verfügbaren Konverter finden Sie in der AttributeConverter
Legen Sie einen benutzerdefinierten Konverter für ein Attribut fest
In V1 können Sie eine Getter-Methode mit annotieren, @DynamoDBTypeConverted
um die Klasse anzugeben, die zwischen dem Java-Attributtyp und einem DynamoDB-Attributtyp konvertiert. Beispielsweise kann eine, CurrencyFormatConverter
die zwischen einem Currency
Java-Typ und einem DynamoDB-String konvertiert, angewendet werden, wie im folgenden Codeausschnitt gezeigt.
@DynamoDBTypeConverted(converter = CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
Das V2-Äquivalent des vorherigen Snippets ist unten dargestellt.
@DynamoDbConvertedBy(CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
Anmerkung
In V1 können Sie die Anmerkung auf das Attribut selbst, einen Typ oder eine benutzerdefinierte Anmerkung anwenden. V2 unterstützt das Anwenden der Anmerkung nur auf den Getter.
Fügen Sie einen Typkonverter, eine Fabrik oder einen Anbieter hinzu
In V1 können Sie Ihren eigenen Satz von Typkonvertern bereitstellen oder die Typen, die Ihnen wichtig sind, überschreiben, indem Sie der Konfiguration eine Typkonverter-Factory hinzufügen. Die Typkonverter-Factory wird erweitertDynamoDBTypeConverterFactory
, und Überschreibungen werden vorgenommen, indem ein Verweis auf den Standardsatz abgerufen und dieser erweitert wird. Der folgende Ausschnitt zeigt, wie das geht.
DynamoDBTypeConverterFactory typeConverterFactory =
DynamoDBTypeConverterFactory.standard().override()
.with(String.class, CustomBoolean.class, new DynamoDBTypeConverter<String, CustomBoolean>() {
@Override
public String convert(CustomBoolean bool) {
return String.valueOf(bool.getValue());
}
@Override
public CustomBoolean unconvert(String string) {
return new CustomBoolean(Boolean.valueOf(string));
}}).build();
DynamoDBMapperConfig config =
DynamoDBMapperConfig.builder()
.withTypeConverterFactory(typeConverterFactory)
.build();
DynamoDBMapper mapperWithTypeConverterFactory = new DynamoDBMapper(dynamo, config);
V2 bietet durch die Anmerkung eine ähnliche Funktionalität. @DynamoDbBean
Sie können ein einzelnes AttributeConverterProvider
oder eine Kette von bestellten AttributeConverterProvider
s angeben. Beachten Sie, dass Sie, wenn Sie Ihre eigene Kette von Anbietern für Attributkonverter angeben, den Standardkonverter-Anbieter überschreiben und ihn in die Kette aufnehmen müssen, um die zugehörigen Attributkonverter verwenden zu können.
@DynamoDbBean(converterProviders = {
ConverterProvider1.class,
ConverterProvider2.class,
DefaultAttributeConverterProvider.class})
public class Customer {
...
}
Der Abschnitt zur Attributkonvertierung in diesem Handbuch enthält ein vollständiges Beispiel für V2.