47

在向表中添加新项目时,是否可以让 DynamoDB 自动生成唯一 ID?

我注意到 Java API 提到了@DynamoDBAutoGeneratedKey,所以我假设有一种方法可以让它与 PHP 一起使用。

如果是,应用程序代码是生成这些 ID 还是在 DynamoDB 端完成?

4

7 回答 7

34

好问题 - 虽然在概念上是可能的,但这似乎目前不能作为 DynamoDB API 级别的功能使用,因为CreateTablePutItem都没有提到这样的功能。

@DynamoDBAutoGeneratedKey您注意到的符号是Java 注释,即 Java SDK 确实提供的语法糖:

在 Java 计算机编程语言中,注解是一种特殊形式的句法元数据,可以添加到 Java 源代码中。

因此,作为Java 开发工具包高级 API中的对象持久性模型的一部分提供@DynamoDBAutoGeneratedKeyAmazon DynamoDB 注释之一(请参阅将对象持久性模型与 Amazon DynamoDB 一起使用):

将哈希键或范围键属性标记为自动生成。对象持久性模型在保存这些属性时会生成一个随机的 UUID。只有字符串属性可以标记为自动生成的键。

于 2012-01-24T11:09:06.897 回答
3

在使用 nodejs 的 javascript 中使用 dynamodb 时。我使用 npm 模块 uuid 来生成唯一密钥。

前任:

id=uuid.v1();

参考:uuid npm

于 2017-11-03T13:32:03.073 回答
2

通过在 Node.js 中使用基于模式的 AWS dynamodb 数据映射器库,将自动生成哈希键 (id)。自动生成的 id 基于 uuid v4。

有关更多详细信息,请查看以下 aws 包。

带注释的数据映射器

Javascript 的数据映射器包

示例片段

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

    @rangeKey({defaultProvider: () => new Date()})
    createdAt: Date;
}
于 2018-01-26T08:18:11.183 回答
1

客户端可以通过选择长随机 id(例如,DynamoDB 支持 128 位整数)或通过选择包含客户端 IP 地址、CPU 编号和当前时间——或者类似的东西。UUID 标准甚至包括执行此操作的标准方法(并且您拥有各种语言的库来在客户端创建此类 UUID),但您实际上并不需要使用标准。有趣的问题是,如果这些项目有随机键,你打算如何找到它们。或者您打算使用二级索引?

于 2019-04-02T19:47:24.683 回答
0

2022 年的答案在这里: https ://dev.to/prabusah_53/aws-lambda-in-built-uuid-382f

不再需要外部库。

于 2022-02-25T18:37:46.530 回答
-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());
于 2015-06-06T01:43:06.753 回答
-6

我正在采取的方法是将当前时间戳用于哈希键(或范围键,如果也使用范围键)。将时间戳存储为整数,表示自“UNIX 纪元”开始以来的毫秒数(在 UTC 时区中)。许多日期/时间库可以为您生成此数字。

这样做的好处是,如果你想在你的表中有一个“创建时间”字段,你的 UUID 已经存储了这个信息。只需调用日期/时间库中的另一种方法即可将时间戳转换为可读格式。

(如果在同一个表中创建具有相同毫秒时间戳的第二个项目,请务必处理将发生的异常;在这种情况下,只需回退并重试操作,稍晚一点,当前时间戳。)

例如:

User table

仅哈希键:用户 ID(此用户创建的时间戳)。

WidgetAttributes table

哈希键加范围键。
hash-key:userID(使用小部件所属用户的 User 表中的 userID)。range-key:attribID(使用创建此小部件属性的时间戳)。

现在您可以在 WidgetAttributes 表上运行“查询”操作来获取某个用户的所有小部件属性;通过使用“大于零”作为范围键的查询参数。

于 2012-11-10T14:10:01.413 回答