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/documento di DynamoDB dalla versione 1 alla versione 2
Questo argomento descrive in dettaglio le modifiche apportate alla versione SDK di alto livello di Java APIs per Amazon DynamoDB dalla versione 1.x (v1) alla (v2). AWS SDK for Java 2.x Per prima cosa trattiamo la object-to-table mappatura API e poi discutiamo del documento per lavorare con i documenti in stile. API JSON
Modifiche di alto livello
I nomi del client di mappatura in ogni libreria differiscono in v1 e v2:
-
v1 - D ynamoDBMapper
-
v2 - Client avanzato per DynamoDB
Interagisci con le due librerie più o meno allo stesso modo: crei un'istanza di un mapper/client e poi fornisci un Java POJO a APIs cui leggere e scrivere questi elementi nelle tabelle DynamoDB. Entrambe le librerie offrono anche annotazioni per la classe di per indicare il modo in cui il client gestisce lePOJO. POJO
Le differenze notevoli quando si passa alla v2 includono:
-
V2 e v1 utilizzano nomi di metodi diversi per le operazioni DynamoDB di basso livello. Per esempio:
v1 v2 caricare getItem save putItem batchLoad batchGetItem -
La V2 offre diversi modi per definire gli schemi delle tabelle e mapparli alle tabelle. POJOs Puoi scegliere tra l'uso di annotazioni o uno schema generato dal codice utilizzando un builder. V2 offre anche versioni mutabili e immutabili degli schemi.
-
Con v2, si crea specificamente lo schema della tabella come uno dei primi passaggi, mentre nella v1, lo schema della tabella viene dedotto dalla classe annotata secondo necessità.
-
La V2 include il APIclient Document nel client
avanzatoAPI, mentre la v1 utilizza un client separato. API -
Tutti APIs sono disponibili nelle versioni sincrone e asincrone nella v2.
Consulta la sezione sulla mappatura di DynamoDB in questa guida per informazioni più dettagliate sul client avanzato v2.
Importa le dipendenze
v1 | v2 |
---|---|
|
|
Nella v1, una singola dipendenza include sia il DynamoDB API di basso livello che la API mappatura/documento, mentre nella v2, si utilizza la dipendenza degli artefatti per accedere alla mappatura/documento. dynamodb-enhanced
API Il modulo contiene una dipendenza transitiva dal modulo di dynamodb
basso livello. dynamodb-enhanced
APImodifiche
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 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 POJO classe Java 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'POJOistanza viene definita come item
o come un tipo specifico, ad esempiocustomer1
. Per gli esempi della versione v2, le istanze denominate table
sono il risultato di una chiamata precedente enhancedClient.table()
che restituisce un riferimento all'DynamoDbTable
istanza.
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, la tabella contiene alcuni dei moduli più utilizzati 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)
La tabella mostra i moduli più comunemente usati:
mapper.load(item) mapper.load(item, config)
Caso d'uso | v1 | Funzionamento DynamoDB | v2 |
---|---|---|---|
Scrivere un file Java POJO in una tabella DynamoDB |
Nella v1, |
PutItem , UpdateItem |
|
Leggere un elemento da una tabella DynamoDB a un Java POJO |
|
GetItem |
|
Eliminare un elemento da una tabella DynamoDB |
|
DeleteItem |
|
Interroga una tabella o un indice secondario DynamoDB e restituisci un elenco impaginato |
|
Query |
Utilizza il valore restituito |
Interroga una tabella o un indice secondario DynamoDB e restituisci un elenco |
|
Query |
Utilizza il valore restituito |
Scansiona una tabella o un indice secondario DynamoDB e restituisci un elenco impaginato |
|
Scan |
Utilizza il valore restituito |
Scansiona una tabella o un indice secondario DynamoDB e restituisci un elenco |
|
Scan |
Utilizza il valore restituito |
Leggi più elementi da più tabelle in un batch |
|
BatchGetItem |
|
Scrivi più elementi su più tabelle in un batch |
|
BatchWriteItem |
|
Elimina più elementi da più tabelle in un batch |
|
BatchWriteItem |
|
Scrittura/elimina più elementi in un batch |
|
BatchWriteItem |
|
Esegui una scrittura transazionale |
|
TransactWriteItems |
|
Effettuare una lettura transazionale |
|
TransactGetItems |
|
Ottieni il numero di elementi corrispondenti di una scansione o di una query |
|
Query , Scan con Select.COUNT |
Non supportato |
Crea una tabella in DynamoDB corrispondente alla classe POJO |
L'istruzione precedente genera una richiesta di creazione della tabella di basso livello; gli utenti devono chiamare |
CreateTable |
|
Esegui una scansione parallela in DynamoDB |
|
Scan con e parametri Segment TotalSegments |
Gli utenti devono gestire i thread di lavoro e chiamare
|
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, nella v2 seguono la convenzione camel case e usano '', non 'DynamoDB'. DynamoDb
Caso d'uso | v1 | v2 |
---|---|---|
Mappa la classe sulla tabella |
|
Il nome della tabella viene definito quando si chiama il DynamoDbEDnhancedClient#table() metodo. |
Designate un membro della classe come attributo della tabella |
|
|
Designare un membro della classe come chiave hash/di partizione |
|
|
Designare un membro della classe è una chiave di intervallo/ordinamento |
|
|
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 generato automaticamente UUID |
|
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 |
|
Nessun equivalente |
Designare una classe che può essere serializzata in un documento DynamoDB (documento in stile -style) o in un documento secondario JSON |
|
Nessuna annotazione equivalente diretta. Usa il documento API avanzato. |
Annotazioni aggiuntive V2
Caso d'uso | v1 | v2 |
---|---|---|
Designate un membro della classe da non memorizzare come NULL attributo 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. Nella v2, la configurazione è specifica dell'oggetto di richiesta per l'operazione.
Caso d'uso | v1 | Impostazione predefinita in v1 | v2 |
---|---|---|---|
|
|||
Strategia di nuovi tentativi di caricamento in batch |
|
riprova gli elementi non riusciti | |
Strategia di ripetizione dei tentativi di scrittura in batch |
|
riprova gli elementi non riusciti | |
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 della paginazione |
Le opzioni sono: LAZY _ |
LAZY_LOADING |
L'impostazione predefinita è solo l'iterazione. Le altre opzioni v1 non sono supportate. |
Richiedi la raccolta delle metriche |
|
null |
Da utilizzare metricPublisher() ClientOverrideConfiguration durante la creazione del client DynamoDB standard. |
Salva il comportamento |
Le opzioni sono |
UPDATE |
Nella v2, si chiama
|
Tipo: fabbrica di convertitori |
|
convertitori di tipo standard |
Impostare sul fagiolo utilizzando
|
Configurazione per operazione
Nella 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);
Nella 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
Nella 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 v2, SDK fornisce un set di convertitori predefiniti per tutti i tipi 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 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 tipi 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);
V2 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 la versione 2.
Cronologia del documento API
Il Documento API supporta l'utilizzo di documenti JSON in stile -style come elementi singoli in una tabella DynamoDB. Il documento v1 API ha un corrispondente API nella v2, ma invece di utilizzare un client separato per il documento API come nella v1, la v2 incorpora le funzionalità del documento API nel client avanzato DynamoDB.
Nella v1, la Item
classe rappresenta un record non strutturato da una tabella DynamoDB. Nella v2, un record non strutturato è rappresentato da un'istanza della classe. EnhancedDocument
La tabella seguente confronta le differenze tra il Documento APIs in v1 e v2.
Caso d'uso | v1 | v2 |
---|---|---|
Crea un client per documenti |
|
|
Fai riferimento a una tabella |
|
|
Work with semi-structured data | ||
Put Item |
|
|
Get Item |
|
|
Work with JSON items | ||
Converti una JSON struttura per usarla con il documento API |
|
|
Metti JSON |
|
|
Leggi JSON |
|
|
APIriferimenti e guide per il documento APIs
v1 | v2 | |
---|---|---|
Riferimento API | Javadoc | Javadoc |
Guida alla documentazione | Guida per gli sviluppatori di Amazon DynamoDB | Documento avanzato API (questa guida) |
FAQ
D: Il blocco ottimistico con un numero di versione funziona allo stesso modo nella v2 e nella v1?
R. Il comportamento è simile, ma la v2 no, non aggiunge automaticamente condizioni per le operazioni di eliminazione. È necessario aggiungere manualmente le espressioni di condizione se si desidera controllare il comportamento di eliminazione.