最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

DynamoDB是否可以生成唯一的自动ID?

IT培训 admin 14浏览 0评论

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?

我是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是唯一的标识符,在开头包含时间戳。这允许按时间顺序排列以及唯一性。

尽管如此,您是否真的要使用这种类型的数据作为分区键?您应该利用一些更具信息性的数据(例如电子邮件),否则您将丢失对访问模式有用的索引。

发布评论

评论列表 (0)

  1. 暂无评论