DynamoDB是否可以生成唯一的自动ID?"/>
DynamoDB是否可以生成唯一的自动ID?
我是DynamoDB Lamda的新手,我正在关注一些教程,但我需要用任何方法在Dynamodb中生成autoid吗?
这是我的lambda函数,正如您看到的那样,我将QuestionID传递为硬编码,我需要知道有什么方法可以为此创建唯一的吗?我想我可以将Math随机函数与时间戳链接起来,但是我真的想知道创建它的更好的选择。
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({region: 'us-east-2', apiVersion: '2012-08-10'});
exports.handler = (event, context, callback) => {
const params = {
Item: {
"QuestionID": {
S: "dasf787af8safa"
},
"Would": {
S: "2ass8"
},
"Rather": {
S: "asda"
},
"wouldClick": {
N: "2"
},
"ratherClick": {
N: "2"
}
},
TableName: "Would-You-Rather"
};
dynamodb.putItem(params, function(err, data) {
if (err) {
console.log(err);
callback(err);
} else {
console.log(data);
callback(null, data);
}
});
};
回答如下:它不是开箱即用的。如果您想使用数字PK,则可以利用以下方法:
client.update_item(
TableName='JiraTable', Key={
'PK': { 'S': 'PROJECT#my-project'
'SK': { 'S': 'PROJECT#my-project' }
}, }
UpdateExpression="SET #count = #count + :incr",
ExpressionAttributeNames={ "#count": "IssueCount", },
ExpressionAttributeValues={
":incr": { "N": "1" }
},
ReturnValues='UPDATED_NEW'
)
current_count = resp['Attributes']['IssueCount']['N']
resp = client.put_item(
TableName='JiraTable',
Item={
'PK': { 'S': 'PROJECT#my-project' },
'SK': { 'S': f"ISSUE#{current_count}"},
'IssueTitle': {'S':'Build DynamoDB data model'}
}
)
如果您确实要使用UUID,那么您确实可以确定,我建议您KSUID。 KSUID是唯一的标识符,在开头包含时间戳。这允许按时间顺序排列以及唯一性。
尽管如此,您是否真的要使用这种类型的数据作为分区键?您应该利用一些更具信息性的数据(例如电子邮件),否则您将丢失对访问模式有用的索引。
更多推荐
DynamoDB是否可以生成唯一的自动ID?
发布评论