Генерация уникального ключа для dynamicodb в лямбда-функции - PullRequest
0 голосов
/ 27 августа 2018

DynamoDB не имеет возможности автоматически генерировать уникальный ключ для вас.

В примерах я вижу людей, создающих uid из комбинации полей, но есть ли способ создать уникальный идентификатор для данных, который не имеет никакой комбинации значений, которые могут выступать в качестве уникального идентификатора? Мои вопросы специально направлены на лямбда-функции.

Один из вариантов, который я вижу, состоит в том, чтобы создать uuid на основе метки времени со счетчиком в конце, вставить его (или проверить, если он существует), и в случае дублирования повторить операцию с приращением до успеха. Но это могло бы означать, что я мог бы потенциально выполнять ограничение по времени выполнения лямбда-функции без создания записи.

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Пакет UUID, доступный на NPM, делает именно это.

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

Вы можете выбрать один из 4 различных алгоритмов генерации:

  • V1 Timestamp
  • V3 Namespace
  • V4 Случайный
  • V5 Пространство имен (снова)

Это даст вам:

"UUID [который] имеет длину 128 битов и может гарантировать уникальность пространство и время. "- RFC4122

Сгенерированный UUID будет выглядеть так: 1b671a64-40d5-491e-99b0-da01ff1f3341
Если он слишком длинный, вы всегда можете закодировать его в Base64, чтобы получить G2caZEDVSR6ZsAAA2gH/Hw, но вы потеряете возможность манипулировать своими данными с помощью информации о времени и пространстве имен, содержащейся в необработанном UUID (что может вас не волновать).

0 голосов
/ 16 мая 2019

awsRequestId выглядит как на самом деле V.4 UUID (Случайный), фрагмент кода ниже:

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 или Ulide (немного лучше по производительности) для генерации различных версий UUID на основе RFC-4122

Для разработчиков Go вы можете использовать эти пакеты из UUID Google , Pborman или Satori . Pborman лучше работает, проверьте эти статьи и тесты для более подробной информации.

Более подробную информацию о спецификации универсального уникального идентификатора можно найти здесь .

0 голосов
/ 27 августа 2018

Мы используем пакет idgen npm для создания идентификаторов. Есть больше вопросов по длине в зависимости от количества увеличить или уменьшить размер.

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

Мы предпочитаем это UUID или GUID, так как это просто цифры. С DynamoDB это все символы для guid / uuid, используя idgen, вы можете создавать больше идентификаторов с меньшим количеством коллизий, используя меньшее количество символов. Так как у каждого персонажа больше диапазонов.

Надеюсь, это поможет.

EDIT1:

Внимание! Начиная с idgen 1.2.0, идентификаторы из 16+ символов будут включать префикс из 7 символов на основе текущего времени в миллисекундах, чтобы уменьшить вероятность коллизий.

...