unused provided keys keyconditionexpression expressions expressionattributenames dynamodb amazon-web-services amazon-dynamodb uuid

amazon-web-services - provided - expressionattributenames dynamodb



UUID para DynamoDB? (5)

¿Es posible hacer que DynamoDB genere automáticamente identificaciones únicas al agregar nuevos elementos a una tabla?

Noté que la API de Java menciona @DynamoDBAutoGeneratedKey, así que supongo que también hay una forma de que esto funcione con PHP.

De ser así, ¿el código de la aplicación genera estos ID o se hace en el lado de DynamoDB?


Al trabajar con dynamodb en javascript con nodejs. Uso el módulo npm uuid para genrate clave única.

Ex:

id = uuid.v1 ();

referir: uuid npm



Buena pregunta: si bien conceptualmente es posible, parece que actualmente no está disponible como una función de nivel API de DynamoDB, ya que ni CreateTable ni PutItem referencia a dicha funcionalidad.

La notación @DynamoDBAutoGeneratedKey que ha notado es una anotación Java , es decir, el azúcar sintáctico ofrecido por Java SDK de hecho:

Una anotación, en el lenguaje de programación de Java, es una forma especial de metadatos sintácticos que se pueden agregar al código fuente de Java.

Como tal, @DynamoDBAutoGeneratedKey es una de las anotaciones de Amazon DynamoDB que se ofrece como parte del Object Persistence Model dentro de la API de alto nivel de Java SDK (consulte Uso del Object Persistence Model con Amazon DynamoDB ):

Marca una clave de acceso directo o la propiedad de la tecla de rango como generadas automáticamente. El Object Persistence Model generará un UUID aleatorio al guardar estos atributos. Solo las propiedades de String se pueden marcar como claves generadas automáticamente.


El enfoque que estoy tomando es usar la marca de tiempo actual para la tecla hash (o la tecla rango, si también usa una tecla de rango). Almacene la marca de tiempo como un número entero, que representa el número de milisegundos desde el inicio de la "época UNIX" (en la zona horaria UTC). Muchas bibliotecas de fecha / hora pueden producir este número por usted.

Esto tiene la ventaja de que si desea tener un campo de "tiempo de creación" en su tabla, su UUID ya almacena esta información. Simplemente llame a otro método en su biblioteca de fecha / hora para convertir la marca de tiempo en un formato legible.

(Asegúrese de manejar la excepción que ocurrirá si se crea un segundo elemento en la misma tabla con la misma marca de tiempo de milisegundos; simplemente retroceda y vuelva a intentar la operación en ese caso, con una marca de tiempo actual ligeramente posterior).

Por ejemplo:

User table

hash-key only: userID (marca de tiempo de la creación de este usuario).

WidgetAttributes table

hash-key plus range-key.
hash-key: userID (usa el ID de usuario de la tabla User del usuario al que pertenece el widget). range-key: attribID (usa la marca de tiempo de la creación de este atributo de widget).

Ahora puede ejecutar operaciones de "consulta" en la tabla WidgetAttributes para obtener todos los atributos de widget para un determinado usuario; utilizando "mayor que cero" como el parámetro de consulta para la tecla de rango.


Mediante el uso de la biblioteca de asignadores de datos dynamodb de AWS basada en esquemas en Node.js , la clave Hash (id) se generará automáticamente. Los ID generados automáticamente se basan en uuid v4.

Para más detalles, eche un vistazo al siguiente paquete aws.

Data Mapper con anotación

Paquete Data Mapper para Javascript

Muestra snipet

@table(''my_table'') class MyDomainClass { @autoGeneratedHashKey() id: string; @rangeKey({defaultProvider: () => new Date()}) createdAt: Date; }