Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Cambios en el APIs mapeo de DynamoDB entre la versión 1 y la versión 2 del SDK for Java
Crear un cliente
Caso de uso | V1 | V2 |
---|---|---|
Instanciación normal |
|
|
Instanciación mínima |
|
|
Con el transformador de atributos * |
|
|
* Las extensiones de la V2 corresponden aproximadamente a los transformadores de atributos de la V1. La Use extensiones para personalizar las operaciones de DynamoDB Enhanced Client sección contiene más información sobre las extensiones de la V2.
Establecer el mapeo a la tabla/índice de DynamoDB
En la versión 1, se especifica el nombre de una tabla de DynamoDB mediante una anotación de bean. En la versión 2, un método de fábricatable()
, produce una instancia DynamoDbTable
que representa la tabla remota de DynamoDB. El primer parámetro del table()
método es el nombre de la tabla de DynamoDB.
Caso de uso | V1 | V2 |
---|---|---|
Asigne la clase POJO de Java a la tabla de DynamoDB |
|
|
Asignación a un índice secundario de DynamoDB |
La sección de la Guía para desarrolladores de DynamoDB que trata del método |
En la Usar índices secundarios sección de esta guía se proporciona más información. |
Operaciones de tabla
Esta sección describe las operaciones APIs que difieren entre la V1 y la V2 en la mayoría de los casos de uso estándar.
En la versión 2, todas las operaciones que implican una sola tabla se invocan en la DynamoDbTable
instancia, no en el cliente mejorado. El cliente mejorado contiene métodos que pueden dirigirse a varias tablas.
En la tabla denominada Operaciones de tabla que aparece a continuación, se hace referencia a una instancia de POJO como un tipo específico, por ejemplo. item
customer1
En los ejemplos de la versión 2, la instancia nombrada table
es el resultado de una llamada anterior enhancedClient.table()
que devuelve una referencia a la DynamoDbTable
instancia.
Tenga en cuenta que la mayoría de las operaciones de la V2 se pueden llamar con un patrón de consumo fluido, incluso cuando no se muestran. Por ejemplo:
Customer customer = table.getItem(r → r.key(key));
or
Customer customer = table.getItem(r → r.key(k -> k.partitionValue("id").sortValue("email")))
Para las operaciones V1, las operaciones de tabla (a continuación) contienen algunos de los formularios más utilizados y no todos los formularios sobrecargados. Por ejemplo, el load()
método presenta las siguientes sobrecargas:
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 tabla de operaciones (a continuación) muestra los formularios más utilizados:
mapper.load(item) mapper.load(item, config)
Caso de uso | V1 | V2 |
---|---|---|
Escribir un POJO de Java en una tabla de DynamoDB Funcionamiento de DynamoDB:, |
En la versión 1, |
|
Leer un elemento de una tabla de DynamoDB en un POJO de Java Funcionamiento de DynamoDB: |
|
|
Eliminar un elemento de una tabla de DynamoDB Funcionamiento de DynamoDB: |
|
|
Consulte una tabla o índice secundario de DynamoDB y devuelva una lista paginada Funcionamiento de DynamoDB: |
|
Utilice lo devuelto |
Consulte una tabla o índice secundario de DynamoDB y devuelva una lista Funcionamiento de DynamoDB: |
|
Utilice lo devuelto |
Escanea una tabla o índice secundario de DynamoDB y devuelve una lista paginada Funcionamiento de DynamoDB: |
|
Utilice lo devuelto |
Escanea una tabla o índice secundario de DynamoDB y devuelve una lista Funcionamiento de DynamoDB: |
|
Utilice lo devuelto |
Lee varios elementos de varias tablas en un lote Funcionamiento de DynamoDB: |
|
|
Escriba varios elementos en varias tablas de un lote Funcionamiento de DynamoDB: |
|
|
Eliminar varios elementos de varias tablas en un lote Funcionamiento de DynamoDB: |
|
|
Escribir/eliminar varios elementos de un lote Funcionamiento de DynamoDB: |
|
|
Realice una escritura transaccional Funcionamiento de DynamoDB: |
|
|
Realice una lectura transaccional Funcionamiento de DynamoDB: |
|
|
Obtenga un recuento de los elementos coincidentes de una consulta Funcionamiento de DynamoDB: con |
|
|
Obtenga un recuento de los elementos coincidentes de un escaneo Funcionamiento de DynamoDB: con |
|
|
Cree una tabla en DynamoDB correspondiente a la clase POJO Funcionamiento de DynamoDB: |
La instrucción anterior genera una solicitud de creación de tabla de bajo nivel; los usuarios deben llamar al cliente |
|
Realice un escaneo paralelo en DynamoDB Funcionamiento |
|
Los usuarios deben gestionar los hilos de trabajo y llamar a cada
|
Integre Amazon S3 con DynamoDB para almacenar enlaces S3 inteligentes |
|
No es compatible porque combina Amazon S3 y DynamoDB. |
Clases y propiedades del mapa
Tanto en la V1 como en la V2, las clases se asignan a las tablas mediante anotaciones tipo frijol. La versión 2 también ofrece otras formas de definir esquemas para casos de uso específicos, como trabajar con clases inmutables.
Anotaciones Bean
La siguiente tabla muestra las anotaciones de bean equivalentes para un caso de uso específico que se utilizan en las versiones V1 y V2. Se utiliza un escenario de Customer
clase para ilustrar los parámetros.
Las anotaciones, así como las clases y las enumeraciones, de la versión 2 siguen la convención camel case y utilizan '', no 'DynamoDB'. DynamoDb
Caso de uso | V1 | V2 |
---|---|---|
Asigne una clase a una tabla |
|
El nombre de la tabla se define al llamar al DynamoDbEnhancedClient#table() método. |
Designe un miembro de la clase como atributo de la tabla |
|
|
Designar a un miembro de la clase es hash/partition clave |
|
|
Designar a un miembro de la clase es range/sort clave |
|
|
Designe a un miembro de la clase como clave de hash o partición del índice secundario |
|
|
Designe a un miembro de la clase como una clave de clasificación/rango de índice secundario |
|
|
Ignore este miembro de la clase al mapearlo a una tabla |
|
|
Designar un miembro de la clase como atributo clave UUID generado automáticamente |
|
La extensión que lo proporciona no se carga de forma predeterminada; debe agregarla al generador de clientes. |
Designe un miembro de la clase como atributo de marca de tiempo generado automáticamente |
|
La extensión que lo proporciona no se carga de forma predeterminada; debe agregarla al generador de clientes. |
Designar un miembro de la clase como atributo de versión con incremento automático |
|
La extensión que proporciona esto se carga automáticamente. |
Designe a un miembro de la clase para que requiera una conversión personalizada |
|
|
Designe un miembro de la clase para almacenarlo como un tipo de atributo diferente |
|
Utilice una |
Designe una clase que se pueda serializar en un documento o subdocumento de DynamoDB (documento de estilo JSON) |
|
Utilice la API de documentos mejorada. Consulte los siguientes recursos:
|
Anotaciones adicionales en la versión 2
Caso de uso | V1 | V2 |
---|---|---|
Designe un miembro de la clase para que no se almacene como atributo NULL si el valor de Java es nulo | N/A |
|
Designe un miembro de la clase como objeto vacío si todos los atributos son nulos | N/A |
|
Designe una acción de actualización especial para un miembro de la clase | N/A |
|
Designe una clase inmutable | N/A |
|
Designe un miembro de la clase como atributo de contador que se incrementa automáticamente | N/A |
La extensión que proporciona esta funcionalidad se carga automáticamente. |
Configuración
En la versión 1, por lo general, se controlan comportamientos específicos mediante una instancia deDynamoDBMapperConfig
. Puede proporcionar el objeto de configuración al crear el mapeador o al realizar una solicitud. En la versión 2, la configuración es específica del objeto de solicitud de la operación.
Caso de uso | V1 | Predeterminado en la V1 | V2 |
---|---|---|---|
|
|||
Estrategia de load/write reintento por lotes |
|
Reintentar los elementos fallidos | Configure la estrategia de reintento en la subyacente. DynamoDBClient Consulte Configure el comportamiento de reintento en el AWS SDK for Java 2.x en esta guía. |
Lecturas consistentes |
|
EVENTUAL |
De forma predeterminada, las lecturas consistentes son falsas para las operaciones de lectura. Reemplace con .consistentRead(true) en el objeto de solicitud. |
Esquema de conversión con conjuntos de marshallers/unmarshallers |
Las implementaciones estáticas proporcionan compatibilidad con versiones anteriores. |
V2_COMPATIBLE |
No se usa. Se trata de una función antigua que hace referencia a la forma en que las primeras versiones de DynamoDB (V1) almacenaban los tipos de datos, y este comportamiento no se conservará en el cliente mejorado. Un ejemplo de comportamiento en DynamoDB V1 es almacenar los valores booleanos como número en lugar de como booleanos. |
Nombres de tablas |
Las implementaciones estáticas proporcionan compatibilidad con versiones anteriores |
usa anotaciones o adivina de la clase |
El nombre de la tabla se define al llamar al |
Estrategia de carga de paginación |
Las opciones son: LAZY_, |
LAZY_LOADING |
|
Solicita la recopilación de métricas |
|
null |
Úselo metricPublisher() ClientOverrideConfiguration al crear el cliente estándar de DynamoDB. |
Guarde el comportamiento |
Las opciones son |
UPDATE |
En la versión 2, se llama
|
fábrica de convertidores de tipos |
|
convertidores de tipo estándar |
Colóquelo en el frijol utilizando
|
Configuración previa a la operación
En la versión 1, algunas operaciones, por ejemploquery()
, son altamente configurables mediante un objeto de «expresión» enviado a la operación. Por ejemplo:
DynamoDBQueryExpression<Customer> emailBwQueryExpr = new DynamoDBQueryExpression<Customer>() .withRangeKeyCondition("Email", new Condition() .withComparisonOperator(ComparisonOperator.BEGINS_WITH) .withAttributeValueList( new AttributeValue().withS("my"))); mapper.query(Customer.class, emailBwQueryExpr);
En la versión 2, en lugar de utilizar un objeto de configuración, se establecen los parámetros del objeto de solicitud mediante un generador. Por ejemplo:
QueryEnhancedRequest emailBw = QueryEnhancedRequest.builder() .queryConditional(QueryConditional .sortBeginsWith(kb -> kb .sortValue("my"))).build(); customerTable.query(emailBw);
Condicionales
En la versión 2, las expresiones condicionales y de filtrado se expresan mediante un Expression
objeto, que encapsula la condición y la asignación de nombres y filtros.
Caso de uso | Operaciones | V1 | V2 |
---|---|---|---|
Condiciones de atributo esperadas | guardar (), eliminar (), consultar (), escanear () |
|
Obsoleto; utilícelo ConditionExpression en su lugar. |
Expresión de condición | eliminar () |
|
|
Expresión de filtro | consultar (), escanear () |
|
|
Expresión de condición para la consulta | consulta () |
|
|
Conversión de tipos
Convertidores predeterminados
En la versión 2, el SDK proporciona un conjunto de convertidores predeterminados para todos los tipos habituales. Puede cambiar los convertidores de tipos tanto a nivel de proveedor general como para un único atributo. Puedes encontrar una lista de los convertidores disponibles en la referencia de la AttributeConverter
Configura un conversor personalizado para un atributo
En la versión 1, puede anotar un método de captación @DynamoDBTypeConverted
para especificar la clase que convierte entre el tipo de atributo de Java y un tipo de atributo de DynamoDB. Por ejemplo, se puede aplicar una CurrencyFormatConverter
que convierta entre un Currency
tipo Java y una cadena de DynamoDB, como se muestra en el siguiente fragmento de código.
@DynamoDBTypeConverted(converter = CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
A continuación se muestra el equivalente en V2 del fragmento anterior.
@DynamoDbConvertedBy(CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
nota
En la versión 1, puede aplicar la anotación al atributo en sí, a un tipo o a una anotación definida por el usuario, mientras que en la versión 2 solo se puede aplicar la anotación al captador.
Añada un conversor de tipos, fábrica o proveedor
En la versión 1, puede proporcionar su propio conjunto de convertidores de tipos o anular los tipos que le interesen añadiendo una fábrica de convertidores de tipos a la configuración. La fábrica de convertidores de tipos se amplía DynamoDBTypeConverterFactory
y las anulaciones se realizan tomando una referencia al conjunto predeterminado y ampliándolo. En el siguiente fragmento se muestra cómo hacerlo.
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 versión 2 proporciona una funcionalidad similar a través de la anotación@DynamoDbBean
. Puede proporcionar un único pedido AttributeConverterProvider
o una cadena de AttributeConverterProvider
s. Tenga en cuenta que si suministra su propia cadena de proveedores de convertidores de atributos, anulará el proveedor de convertidores predeterminado y deberá incluirlo en la cadena para poder utilizar sus convertidores de atributos.
@DynamoDbBean(converterProviders = {
ConverterProvider1.class,
ConverterProvider2.class,
DefaultAttributeConverterProvider.class})
public class Customer {
...
}
La sección sobre conversión de atributos de esta guía contiene un ejemplo completo de la versión 2.