Подтвердить что ты не робот

UUID для DynamoDB?

Можно ли заставить DynamoDB автоматически генерировать уникальные идентификаторы при добавлении новых элементов в таблицу?

Я заметил, что Java API упоминает @DynamoDBAutoGeneratedKey, поэтому я предполагаю, что это способ заставить это работать с PHP.

Если да, то код приложения генерирует эти идентификаторы или выполняется на стороне DynamoDB?

4b9b3361

Ответ 1

Хороший вопрос - хотя это концептуально возможно, похоже, в настоящее время он не доступен как функция уровня API DynamoDB, поскольку CreateTable и PutItem относятся к такой функциональности.

Нотация @DynamoDBAutoGeneratedKey, которую вы заметили, представляет собой аннотацию Java, то есть синтаксический сахар, предлагаемый Java SDK:

Аннотация, написанная на языке программирования Java, является специальной форма синтаксических метаданных, которые могут быть добавлены в исходный код Java.

Как таковой @DynamoDBAutoGeneratedKey является одним из аннотаций Amazon DynamoDB, предлагаемым как часть модели сохранения объектов в Java-API высокого уровня Java (см. Использование модели сохранения объектов с помощью Amazon DynamoDB):

Помечает ключ хеша или свойство ключа диапазона как автоматически сгенерированный. Модель сохранения объектов создаст случайный UUID при сохранении этих атрибутов. Только свойства String могут быть помечены как автоматически сгенерированные ключи.

Ответ 2

Используя основанную на схеме библиотеку AWS DynamodB Data Mapper в Node.js, ключ (id) хеша будет сгенерирован автоматически. Автоматически сгенерированные идентификаторы основаны на uuid v4.

Для более подробной информации, посмотрите на следующий пакет aws.

Data Mapper с аннотацией

Пакет Data Mapper для Javascript

Образец сниппета

@table('my_table')
class MyDomainClass {
    @autoGeneratedHashKey()
    id: string;

    @rangeKey({defaultProvider: () => new Date()})
    createdAt: Date;
}

Ответ 3

Во время работы с dynamodb в javascript с nodejs. Я использую модуль upm для npm для генерации уникального ключа.

Пример:

ID = uuid.v1();

: uuid npm

Ответ 4

Клиент может создать (для всех намерений и целей) уникальный идентификатор, либо выбрав длинный случайный идентификатор (например, DynamoDB поддерживает 128-битные целые числа), либо выбрав идентификатор, который содержит IP-адрес клиента, номер ЦП и текущий время - или что-то в этом роде. Стандарт UUID даже включает стандартный способ сделать это (и у вас есть библиотеки на разных языках для создания таких UUID на стороне клиента), но вам на самом деле не нужно использовать стандарт. И интересный вопрос, как вы планируете найти эти предметы, если у них есть случайные ключи. Или вы планируете использовать вторичный индекс?

Ответ 5

Вот еще один хороший метод, взятый из mkyong

http://www.mkyong.com/java/how-to-get-current-timestamps-in-java/

Я скорректировал его метод, чтобы получить миллисекунды вместо фактической даты

java.util.Date date= new java.util.Date();
System.out.println(new Timestamp(date.getTime()).getTime());

Ответ 6

Подход, который я принимаю, - использовать текущую временную метку для хеш-ключа (или клавишу диапазона, если также использовать клавишу диапазона). Храните метку времени как целое число, представляющее количество миллисекунд с момента начала "UNIX-эпохи" (в часовом поясе UTC). Многие библиотеки времени и времени могут предоставить вам этот номер.

Это имеет то преимущество, что если вы хотите иметь в своей таблице поле "время создания", ваш UUID уже сохраняет эту информацию. Просто вызовите другой метод в вашей библиотеке даты/времени, чтобы преобразовать метку времени в читаемый формат.

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

Например:

User table

только хэш-ключ: userID (временная метка создания этого пользователя).

WidgetAttributes table

хэш-ключ плюс ключ диапазона.
hash-key: userID (используйте идентификатор пользователя из таблицы пользователя пользователя, которому принадлежит виджет). range-key: attribID (используйте временную метку создания этого атрибута виджета).

Теперь вы можете запускать операции "запроса" в таблице WidgetAttributes, чтобы получить все атрибуты виджета для определенного пользователя; используя "больше нуля" в качестве параметра запроса для ключа диапазона.