Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Modifiche nella APIs mappatura di DynamoDB tra la versione 1 e la versione 2 dell'SDK for Java
Crea un cliente
Caso d'uso | V1 | V2 |
---|---|---|
Istanziazione normale |
|
|
Istanziazione minima |
|
|
Con trasformatore di attributi * |
|
|
* Le estensioni in V2 corrispondono all'incirca ai trasformatori di attributi in V1. La Usa le estensioni per personalizzare le operazioni di DynamoDB Enhanced Client sezione contiene ulteriori informazioni sulle estensioni in V2.
Stabilire la mappatura alla tabella/indice DynamoDB
Nella V1, si specifica il nome di una tabella DynamoDB tramite un'annotazione bean. Nella V2, un metodo factorytable()
, produce un'istanza DynamoDbTable
che rappresenta la tabella DynamoDB remota. Il primo parametro del table()
metodo è il nome della tabella DynamoDB.
Caso d'uso | V1 | V2 |
---|---|---|
Mappa la classe Java POJO sulla tabella DynamoDB |
|
|
Mappare su un indice secondario DynamoDB |
La sezione della DynamoDB Developer Guide che illustra il metodo |
La Usa indici secondari sezione di questa guida fornisce ulteriori informazioni. |
Operazioni sulle tabelle
Questa sezione descrive le operazioni APIs che differiscono tra V1 e V2 per la maggior parte dei casi d'uso standard.
Nella V2, tutte le operazioni che coinvolgono una singola tabella vengono chiamate sull'DynamoDbTable
istanza, non sul client avanzato. Il client avanzato contiene metodi che possono indirizzare più tabelle.
Nella tabella denominata Table operations riportata di seguito, un'istanza POJO viene definita come item
o come un tipo specifico comecustomer1
. Per gli esempi V2, le istanze denominate table
sono il risultato di una chiamata precedente enhancedClient.table()
che restituisce un riferimento all'istanza. DynamoDbTable
Tieni presente che la maggior parte delle operazioni V2 può essere richiamata con uno schema di consumo fluido anche se non vengono visualizzate. Ad esempio,
Customer customer = table.getItem(r → r.key(key));
or
Customer customer = table.getItem(r → r.key(k -> k.partitionValue("id").sortValue("email")))
Per le operazioni V1, Table operations (di seguito) contiene alcuni dei moduli più comunemente usati e non tutti i moduli sovraccaricati. Ad esempio, il load()
metodo presenta i seguenti sovraccarichi:
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)
Le operazioni della tabella (di seguito) mostrano i moduli più comunemente usati:
mapper.load(item) mapper.load(item, config)
Caso d'uso | V1 | V2 |
---|---|---|
Scrivere un Java POJO su una tabella DynamoDB Operazione DynamoDB:, |
Nella V1, |
|
Leggere un elemento da una tabella DynamoDB a un Java POJO Funzionamento DynamoDB: |
|
|
Eliminare un elemento da una tabella DynamoDB Funzionamento DynamoDB: |
|
|
Interroga una tabella o un indice secondario DynamoDB e restituisci un elenco impaginato Funzionamento DynamoDB: |
|
Usa il valore restituito |
Interroga una tabella o un indice secondario DynamoDB e restituisci un elenco Funzionamento DynamoDB: |
|
Usa il valore restituito |
Scansiona una tabella o un indice secondario DynamoDB e restituisci un elenco impaginato Funzionamento DynamoDB: |
|
Usa il valore restituito |
Scansiona una tabella o un indice secondario DynamoDB e restituisci un elenco Funzionamento DynamoDB: |
|
Usa il valore restituito |
Leggi più elementi da più tabelle in un batch Funzionamento DynamoDB: |
|
|
Scrive più elementi su più tabelle in un batch Funzionamento DynamoDB: |
|
|
Eliminare più elementi da più tabelle in un batch Funzionamento DynamoDB: |
|
|
Scrittura/elimina più elementi in un batch Funzionamento DynamoDB: |
|
|
Eseguire una scrittura transazionale Funzionamento DynamoDB: |
|
|
Effettuare una lettura transazionale Funzionamento DynamoDB: |
|
|
Ottieni un conteggio degli elementi corrispondenti di una query Funzionamento DynamoDB: con |
|
|
Ottieni un conteggio degli elementi corrispondenti di una scansione Funzionamento DynamoDB: con |
|
|
Crea una tabella in DynamoDB corrispondente alla classe POJO Funzionamento DynamoDB: |
L'istruzione precedente genera una richiesta di creazione della tabella di basso livello; gli utenti devono chiamare |
|
Esegui una scansione parallela in DynamoDB
|
|
Gli utenti devono gestire i thread di lavoro e le chiamate
|
Integra Amazon S3 con DynamoDB per archiviare collegamenti S3 intelligenti |
|
Non è supportato perché abbina Amazon S3 e DynamoDB. |
Classi e proprietà della mappa
Sia in V1 che in V2, si mappano le classi alle tabelle utilizzando annotazioni in stile bean. V2 offre anche altri modi per definire schemi per casi d'uso specifici, come lavorare con classi immutabili.
Annotazioni Bean
La tabella seguente mostra le annotazioni bean equivalenti per un caso d'uso specifico utilizzate in V1 e V2. Uno scenario Customer
di classe viene utilizzato per illustrare i parametri.
Le annotazioni, così come le classi e le enumerazioni, in V2 seguono la convenzione camel case e utilizzano '', non 'DynamoDB'. DynamoDb
Caso d'uso | V1 | V2 |
---|---|---|
Mappa la classe sulla tabella |
|
Il nome della tabella viene definito quando si chiama il DynamoDbEnhancedClient#table() metodo. |
Designate un membro della classe come attributo della tabella |
|
|
Designare un membro della classe è una chiave hash/partition |
|
|
Designare un membro della classe è fondamentale range/sort |
|
|
Designare un membro della classe come chiave di hash/partizione dell'indice secondaria |
|
|
Designare un membro della classe come chiave di ordinamento/intervallo di indice secondaria |
|
|
Ignora questo membro della classe durante la mappatura su una tabella |
|
|
Designare un membro della classe come attributo chiave UUID generato automaticamente |
|
L'estensione che lo fornisce non viene caricata per impostazione predefinita; è necessario aggiungere l'estensione a client builder. |
Designare un membro della classe come attributo timestamp generato automaticamente |
|
L'estensione che lo fornisce non viene caricata per impostazione predefinita; è necessario aggiungere l'estensione a client builder. |
Designare un membro della classe come attributo di versione con incremento automatico |
|
L'estensione che lo fornisce viene caricata automaticamente. |
Designate un membro della classe come richiedente una conversione personalizzata |
|
|
Designate un membro della classe da memorizzare come tipo di attributo diverso |
|
Usa un' |
Designare una classe che può essere serializzata in un documento DynamoDB (documento in stile JSON) o in un documento secondario |
|
Utilizzate l'API Enhanced Document. Consulta le seguenti risorse:
|
Annotazioni aggiuntive V2
Caso d'uso | V1 | V2 |
---|---|---|
Designate un membro della classe da non memorizzare come attributo NULL se il valore Java è nullo | N/D |
|
Designate un membro della classe come oggetto vuoto se tutti gli attributi sono nulli | N/D |
|
Designate un'azione speciale di aggiornamento per un membro della classe | N/D |
|
Designate una classe immutabile | N/D |
|
Designare un membro della classe come attributo del contatore ad incremento automatico | N/D |
L'estensione che fornisce questa funzionalità viene caricata automaticamente. |
Configurazione
Nella V1, in genere si controllano comportamenti specifici utilizzando un'istanza di. DynamoDBMapperConfig
È possibile fornire l'oggetto di configurazione quando si crea il mapper o quando si effettua una richiesta. In V2, la configurazione è specifica dell'oggetto di richiesta per l'operazione.
Caso d'uso | V1 | Impostazione predefinita in V1 | V2 |
---|---|---|---|
|
|||
Strategia di load/write ripetizione dei tentativi in batch |
|
Riprova gli elementi non riusciti | Configura la strategia di riprova sul dispositivo sottostante. DynamoDBClient Vedi Configurare il comportamento dei tentativi in AWS SDK for Java 2.x in questa guida. |
Letture coerenti |
|
EVENTUAL |
Per impostazione predefinita, le letture coerenti sono false per le operazioni di lettura. Sostituisci con .consistentRead(true) sull'oggetto della richiesta. |
Schema di conversione con set di marshallers/unmarshallers |
Le implementazioni statiche forniscono la retrocompatibilità con le versioni precedenti. |
V2_COMPATIBLE |
Non applicabile. Si tratta di una funzionalità legacy che si riferisce al modo in cui le versioni precedenti di DynamoDB (V1) memorizzavano i tipi di dati e questo comportamento non verrà mantenuto nel client avanzato. Un esempio di comportamento in DynamoDB V1 è l'archiviazione dei valori booleani come numero anziché come booleano. |
Nomi delle tabelle |
Le implementazioni statiche forniscono la retrocompatibilità con le versioni precedenti |
usa annotation o guess from class |
Il nome della tabella viene definito quando si chiama il |
Strategia di caricamento dell'impaginazione |
Le opzioni sono: LAZY_ |
LAZY_LOADING |
|
Richiedi la raccolta delle metriche |
|
null |
Da utilizzare metricPublisher() ClientOverrideConfiguration durante la creazione del client DynamoDB standard. |
Salva il comportamento |
Le opzioni sono |
UPDATE |
In V2, si chiama
|
Tipo: fabbrica di convertitori |
|
convertitori di tipo standard |
Impostare sul fagiolo utilizzando
|
Configurazione per operazione
In V1, alcune operazioni, ad esempioquery()
, sono altamente configurabili tramite un oggetto «espressione» inviato all'operazione. Per esempio:
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, invece di utilizzare un oggetto di configurazione, si impostano i parametri sull'oggetto di richiesta utilizzando un builder. Per esempio:
QueryEnhancedRequest emailBw = QueryEnhancedRequest.builder() .queryConditional(QueryConditional .sortBeginsWith(kb -> kb .sortValue("my"))).build(); customerTable.query(emailBw);
Condizionali
In V2, le espressioni condizionali e di filtraggio vengono espresse utilizzando un Expression
oggetto, che incapsula la condizione e la mappatura di nomi e filtri.
Caso d'uso | Operazioni | V1 | V2 |
---|---|---|---|
Condizioni previste per gli attributi | save (), delete (), query (), scan () |
|
Obsoleto; da usare al suo posto. ConditionExpression |
Espressione della condizione | delete () |
|
|
Espressione filtro | interrogazione (), scansione () |
|
|
Espressione di condizione per la query | interrogazione () |
|
|
Conversione del tipo
Convertitori predefiniti
Nella versione 2, l'SDK fornisce un set di convertitori predefiniti per tutti i tipi più comuni. È possibile modificare i convertitori di tipo sia a livello generale del provider che per un singolo attributo. Puoi trovare un elenco dei convertitori disponibili nel riferimento AttributeConverter
Imposta un convertitore personalizzato per un attributo
Nella V1, è possibile annotare un metodo getter con @DynamoDBTypeConverted
per specificare la classe che esegue la conversione tra il tipo di attributo Java e un tipo di attributo DynamoDB. Ad esempio, è possibile applicare una stringa CurrencyFormatConverter
che converte tra un Currency
tipo Java e una stringa DynamoDB come mostrato nel seguente frammento.
@DynamoDBTypeConverted(converter = CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
L'equivalente V2 dello snippet precedente è mostrato di seguito.
@DynamoDbConvertedBy(CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
Nota
In V1, puoi applicare l'annotazione all'attributo stesso, a un tipo o a un'annotazione definita dall'utente, V2 supporta l'applicazione dell'annotazione solo al getter.
Aggiungi una fabbrica o un fornitore di convertitori di tipi
Nella V1, puoi fornire il tuo set di convertitori di tipo o sostituire i tipi che ti interessano aggiungendo una fabbrica di convertitori di tipo alla configurazione. Il type converter factory si estende e DynamoDBTypeConverterFactory
le sostituzioni vengono eseguite ottenendo un riferimento al set predefinito ed estendendolo. Il seguente frammento mostra come eseguire questa operazione.
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);
La versione 2 offre funzionalità simili tramite l'annotazione. @DynamoDbBean
È possibile fornire una singola AttributeConverterProvider
o una catena di messaggi ordinatiAttributeConverterProvider
. Tieni presente che se fornisci la tua catena di fornitori di convertitori di attributi, sostituirai il fornitore di convertitori predefinito e dovrai includerlo nella catena per utilizzare i suoi convertitori di attributi.
@DynamoDbBean(converterProviders = {
ConverterProvider1.class,
ConverterProvider2.class,
DefaultAttributeConverterProvider.class})
public class Customer {
...
}
La sezione sulla conversione degli attributi di questa guida contiene un esempio completo per V2.