2010-04-10 16 views
6

¿Existe un equivalente a un Seed de identidad en SimpleDB?Amazon SimpleDB Identity Seed equivalent

Si la respuesta es no, ¿cómo maneja la creación de algo como un número de cliente o un número de pedido que evitará la creación de números duplicados?

Mi experiencia es principalmente de SQL Server en el que podría crear una clave principal con una semilla de identidad o usar transacciones en un procedimiento almacenado para incrementar el número.

Gracias por su ayuda!

Respuesta

6

Puede crear claves únicas mediante escrituras condicionales. Simplemente haga un PutAttributes con el próximo número de cliente que desea usar y los datos que desea almacenar. No puede agregar una condición para el nombre del elemento real, pero puede usar un atributo que siempre existe (como la fecha de creación o el grupo de usuarios).

establecer las condiciones:

Expected.1.Name=creation_date 
    Expected.1.Exists=false 

La llamada tendrá éxito sólo si no hay creation_date en un artículo con ese nombre del artículo. Si siempre escribe la fecha de creación, se obtiene el efecto de bloqueo optimista en el nuevo nombre del elemento. Por supuesto, puede usar cualquier atributo que desee, siempre que siempre lo incluya en esa primera inserción condicional.

El rendimiento de la escritura condicional es el mismo que en una escritura normal en la mayoría de las situaciones, pero cuando SimpleDB está bajo mucha carga o altas latencias de red interna, estas llamadas llevarán más tiempo, en comparación con las escrituras normales. Durante los escenarios de falla rara dentro de SimpleDB, las escrituras condicionales fallarán por completo durante un período de tiempo.

Si no puede tolerar esto, tendrá que codificar algún tipo de forma alternativa para obtener sus claves únicas durante las interrupciones. Se podría usar una región SimpleDB diferente solo para la generación de claves, ya que SimpleDB seguirá aceptando las escrituras normales (PutAttributes no condicionales) durante las interrupciones.

+0

¡Gracias por la respuesta! Después de leer esto, volví a la documentación que ahora me queda clara. Se puede encontrar aquí: http://docs.amazonwebservices.com/AmazonSimpleDB/2009-04-15/DeveloperGuide/ConditionalPut.html – Zaffiro

3

Si aún no tiene algo único que funcione, el uso de un GUID para el artículo es probablemente la solución típica.

+0

¡Gracias por su respuesta! Crear un guid funcionaría, pero me gustaría generar algo que sea más legible para los humanos. – Zaffiro