DynamoDB Есть ли способ генерировать уникальный autoID? - PullRequest
1 голос
/ 04 мая 2020

Я новичок в DynamoDB Lamda. Я следую некоторому учебнику, но мне нужно, есть ли способ генерировать autoid в Dynamodb?

Это моя лямбда-функция, как вы видите, я передаю QuestionID как жестко закодированный I нужно знать есть ли способ создать уникальный для этого? Я думаю, что могу связать случайную функцию 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);
        }
    });
};

1 Ответ

0 голосов
/ 06 мая 2020

Это не выходит из коробки. Если вам нужна цифра c 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 - это уникальные идентификаторы, которые включают в себя временную метку в начале. Это учитывает как хронологический порядок, так и уникальность.

Тем не менее, вы действительно хотите использовать этот тип данных в качестве ключа раздела? Вам следует использовать некоторые данные, более информативные, например, электронную почту, иначе вы потеряете индекс, полезный для ваших шаблонов доступа.

...