amazon dynamodb - tutorial - Cómo usar el incremento automático para la identificación de clave primaria en dynamodb
dynamodb key (2)
DynamoDB no proporciona esto fuera de la caja. Puede generar algo en su aplicación, como los UUID, que "deberían" ser lo suficientemente únicos para la mayoría de los sistemas.
Noté que estabas usando Node.js (eliminé tu etiqueta). Aquí hay una biblioteca que proporciona la funcionalidad UUID: node-uuid
Ejemplo de README
var uuid = require(''node-uuid'');
var uuid1 = uuid.v1();
var uuid2 = uuid.v1({node:[0x01,0x23,0x45,0x67,0x89,0xab]});
var uuid3 = uuid.v1({node:[0, 0, 0, 0, 0, 0]})
var uuid4 = uuid.v4();
var uuid5 = uuid.v4();
Soy nuevo en dynamodb. Quiero incrementar automáticamente el valor de id cuando utilizo putitem
con dynamodb.
¿Es posible hacer eso?
Esto es antipatrón en DynamoDB que se construye para escalar en muchas particiones / fragmentos / servidores. DynamoDB no admite claves primarias de incremento automático debido a limitaciones de escala y no se puede garantizar en varios servidores.
La mejor opción es ensamblar la clave primaria a partir de múltiples índices. La clave principal puede ser de hasta 2048 bytes. Hay pocas opciones:
- Use UUID como su clave, posiblemente UUID basado en el tiempo, lo que lo hace único, distribuido uniformemente y tiene un valor de tiempo
- Utilice el número o la marca de tiempo generados aleatoriamente + aleatorio (posiblemente desplazamiento de bits) como: ts << 12 + número aleatorio
- Utilice otro servicio o DynamoDB para generar una identificación única incremental (requiere una llamada adicional)
El siguiente código se incrementará automáticamente en DynamoDB y luego podrá usarlo como clave principal.
var documentClient = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: ''sampletable'',
Key: { HashKey : ''counters'' },
UpdateExpression: ''ADD #a :x'',
ExpressionAttributeNames: {''#a'' : "counter_field"},
ExpressionAttributeValues: {'':x'' : 1},
ReturnValues: "UPDATED_NEW" // ensures you get value back
};
documentClient.update(params, function(err, data) {});
// once you get new value, use it as your primary key
Mi favorito personal es usar timestamp + random inspirado en la generación de ID de Sharding de Instagram en http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram
var EPOCH = 1300000000000;
function generateRowId(subid) {
var ts = new Date().getTime() - EPOCH; // limit to recent
var randid = Math.floor(Math.random() * 512);
ts = (ts * 64); // bit-shift << 6
ts = ts + subid;
return (ts * 512) + (randid % 512);
}
var newPrimaryHashKey = "obj_name:" + generateRowId(4);