node.js - DynamoDB 有没有办法生成唯一的 autoID?
问题描述
我是 DynamoDB Lamda 的新手,我正在学习一些教程,但我需要有什么方法可以在 Dynamodb 中生成 autoid 吗?
这是我的 lambda 函数,因为您看到我将 QuestionID 作为硬编码传递我需要知道有没有办法为此创建唯一的?我想我可以将数学随机函数与时间戳联系起来,但我真的很想知道创建它的更好选择。
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 是在开头包含时间戳的唯一标识符。这允许按时间顺序排序以及唯一性。
尽管如此,您真的想使用这种类型的数据作为您的分区键吗?您应该利用一些信息更丰富的数据,例如电子邮件,否则您会丢失对您的访问模式有用的索引。
推荐阅读
- kotlin - 为什么在 kotlin 中将集合设置为 null 是非法的
- groovy - 在常规中从当前日期开始添加 14 天,但当前格式为 [Sat Sep 26 06:02:18 UTC 2020]
- javascript - 如何在 jQuery 中搜索带有 utf-8 字符的 JSON,如 SQL LIKE %value% 语句
- javascript - Canvas toDataURL() 仅在 Firefox 浏览器中返回空白图像
- python - 如何将某些 numpy 数组的目标值更改为另一个值(如果目标值列表可用)?
- python - Python加法指针
- cypress - 是否可以将赛普拉斯配置为以全屏模式启动?
- flutter - 颤振中未定义的名称“导航器”
- flutter - 如何在 Flutter 中向 TabBar 动态添加选项卡?
- amazon-web-services - 为什么 AppSync 解析器响应模板在调试显示结果时返回 null?