在向表中添加新项目时,是否可以让 DynamoDB 自动生成唯一 ID?
我注意到 Java API 提到了@DynamoDBAutoGeneratedKey,所以我假设有一种方法可以让它与 PHP 一起使用。
如果是,应用程序代码是生成这些 ID 还是在 DynamoDB 端完成?
在向表中添加新项目时,是否可以让 DynamoDB 自动生成唯一 ID?
我注意到 Java API 提到了@DynamoDBAutoGeneratedKey,所以我假设有一种方法可以让它与 PHP 一起使用。
如果是,应用程序代码是生成这些 ID 还是在 DynamoDB 端完成?
好问题 - 虽然在概念上是可能的,但这似乎目前不能作为 DynamoDB API 级别的功能使用,因为CreateTable和PutItem都没有提到这样的功能。
@DynamoDBAutoGeneratedKey
您注意到的符号是Java 注释,即 Java SDK 确实提供的语法糖:
在 Java 计算机编程语言中,注解是一种特殊形式的句法元数据,可以添加到 Java 源代码中。
因此,作为Java 开发工具包高级 API中的对象持久性模型的一部分提供@DynamoDBAutoGeneratedKey
的Amazon DynamoDB 注释之一(请参阅将对象持久性模型与 Amazon DynamoDB 一起使用):
将哈希键或范围键属性标记为自动生成。对象持久性模型在保存这些属性时会生成一个随机的 UUID。只有字符串属性可以标记为自动生成的键。
通过在 Node.js 中使用基于模式的 AWS dynamodb 数据映射器库,将自动生成哈希键 (id)。自动生成的 id 基于 uuid v4。
有关更多详细信息,请查看以下 aws 包。
示例片段
@table('my_table')
class MyDomainClass {
@autoGeneratedHashKey()
id: string;
@rangeKey({defaultProvider: () => new Date()})
createdAt: Date;
}
客户端可以通过选择长随机 id(例如,DynamoDB 支持 128 位整数)或通过选择包含客户端 IP 地址、CPU 编号和当前时间——或者类似的东西。UUID 标准甚至包括执行此操作的标准方法(并且您拥有各种语言的库来在客户端创建此类 UUID),但您实际上并不需要使用标准。有趣的问题是,如果这些项目有随机键,你打算如何找到它们。或者您打算使用二级索引?
2022 年的答案在这里: https ://dev.to/prabusah_53/aws-lambda-in-built-uuid-382f
不再需要外部库。
这是另一个取自 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());
我正在采取的方法是将当前时间戳用于哈希键(或范围键,如果也使用范围键)。将时间戳存储为整数,表示自“UNIX 纪元”开始以来的毫秒数(在 UTC 时区中)。许多日期/时间库可以为您生成此数字。
这样做的好处是,如果你想在你的表中有一个“创建时间”字段,你的 UUID 已经存储了这个信息。只需调用日期/时间库中的另一种方法即可将时间戳转换为可读格式。
(如果在同一个表中创建具有相同毫秒时间戳的第二个项目,请务必处理将发生的异常;在这种情况下,只需回退并重试操作,稍晚一点,当前时间戳。)
例如:
User table
仅哈希键:用户 ID(此用户创建的时间戳)。
WidgetAttributes table
哈希键加范围键。
hash-key:userID(使用小部件所属用户的 User 表中的 userID)。range-key:attribID(使用创建此小部件属性的时间戳)。
现在您可以在 WidgetAttributes 表上运行“查询”操作来获取某个用户的所有小部件属性;通过使用“大于零”作为范围键的查询参数。