首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在lambda函数中为dynamodb生成唯一键

在lambda函数中为dynamodb生成唯一键
EN

Stack Overflow用户
提问于 2018-08-27 13:09:30
回答 6查看 23.9K关注 0票数 7

DynamoDB没有自动为您生成唯一密钥的选项。

在示例中,我看到人们从一个字段组合中创建一个uid,但是是否有一种方法可以为数据创建一个唯一的ID,它没有任何可以作为唯一标识符的值的组合?我的问题专门针对lambda函数。

我看到的一个选项是基于时间戳创建一个uuid,在末尾有一个计数器,插入它(或者检查它是否存在),在重复的情况下用增量重试直到成功。但是,这意味着我可以在不创建条目的情况下运行lambda函数的执行时间限制。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-08-28 09:47:40

NPM上可用的UUID包正是这样做的。

https://www.npmjs.com/package/uuid

您可以在4种不同的生成算法之间进行选择:

  • V1时间戳
  • V3命名空间
  • V4随机
  • V5名称空间(再次)

这将给你:

“一个128位长的UUID,可以保证空间和时间的唯一性。”- RFC4122

生成的UUID如下所示:1b671a64-40d5-491e-99b0-da01ff1f3341

如果时间太长,可以在Base64中对其进行编码以获得G2caZEDVSR6ZsAAA2gH/Hw,但是您将失去通过原始UUID中包含的时间和命名空间信息来操作数据的能力(这对您可能并不重要)。

票数 9
EN

Stack Overflow用户

发布于 2019-11-04 23:39:11

如果使用的是Node.js 8.x,则可以使用uuid模块。

代码语言:javascript
复制
var AWS = require('aws-sdk'),
    uuid = require('uuid'),
    documentClient = new AWS.DynamoDB.DocumentClient();
[...]
        Item:{
            "id":uuid.v1(),
            "Name":"MyName"
        },

如果您使用的是Node.js 10.x,则可以使用不带uuid模块的awsRequestId。

代码语言:javascript
复制
    var AWS = require('aws-sdk'),
        documentClient = new AWS.DynamoDB.DocumentClient();
[...]
    Item:{
        "id":context.awsRequestId,
        "Name":"MyName"
    },
票数 21
EN

Stack Overflow用户

发布于 2019-05-16 03:40:45

awsRequestId看起来像它的实际V.4 UUID (随机),代码片段如下:

代码语言:javascript
复制
exports.handler = function(event, context, callback) {
    console.log('remaining time =', context.getRemainingTimeInMillis());
    console.log('functionName =', context.functionName);
    console.log('AWSrequestID =', context.awsRequestId);
    callback(null, context.functionName);
};

如果您想自己生成这些,仍然可以使用https://www.npmjs.com/package/uuid乌利 (性能稍微好一点)来生成基于RFC-4122的不同版本的UUID。

对于Go开发人员,您可以使用谷歌的UUID普伯曼佐里中的这些包。Pborman的性能更好,请查看这些条款和基准以获得更多细节。

有关通用唯一标识符规范的更多信息可以找到这里

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52040153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档