AppSync $util.autoId() 和 DynamoDB 分区和排序键设计问题

Posted

技术标签:

【中文标题】AppSync $util.autoId() 和 DynamoDB 分区和排序键设计问题【英文标题】:AppSync $util.autoId() and DynamoDB Partition and Sort Keys Design Questions 【发布时间】:2019-04-18 00:51:27 【问题描述】:

dynamoDB 的分区键和排序键的limits 是这样的,如果我想创建一个包含大量用户(例如整个世界人口)的表,那么我不能只使用唯一的分区键来表示personId,我需要同时使用分区键和排序键来表示 personId。

AppSync 中的$util.autoId() 返回一个 128 位字符串。如果我想将其用作 dynamoDB 表中的主键,则需要将其拆分为两个字符串,一个是分区键,另一个是排序键。

执行此拆分的最佳方法是什么?或者,如果这不是处理设计的最佳方式,我应该如何设计呢?

另外,分区键和排序键的限制是否也适用于二级索引?

关于$util.autoId(),由于它是随机生成的,如果我多次调用它,是否有可能生成两个完全相同的id?

【问题讨论】:

【参考方案1】:

我认为我从你的问题的前提中误解了一些东西,因为在我的大脑中,使用 AppSync 的 $util.autoId() 会给你一个 128 位的 UUID。 UUID 的意义在于它们是独一无二的,因此您绝对可以在世界上每个人拥有一个 UUID。并且 UUID 字符串肯定会符合 Dynamo 分区键要求的最大字符长度限制。

你还问:

如果我多次调用它,它是否有机会产生两个 id是一样的吗?

这是极不可能的。

【讨论】:

关于分区键和排序键的限制,这里的【链接】(docs.aws.amazon.com/amazondynamodb/latest/developerguide/…)说最大长度是2048字节。这听起来明显小于 128 位 UUID。 啊!以十六进制表示的 128 位 UUID 明显短于 2048 字节;它是 32 个字符和四个连字符。 =-)

以上是关于AppSync $util.autoId() 和 DynamoDB 分区和排序键设计问题的主要内容,如果未能解决你的问题,请参考以下文章

AWS Appsync Javascript 查询示例和输入语法

AppSync 查询解析器:是不是需要 expressionNames 和 expressionValues?

AppSync 和推送通知

Amplify 和 AppSync 不更新来自多个来源的突变数据

与 AwsCdk、DynamoDB 和 AppSync 的关系 - Typescript 和 lambda 函数

AppSync 和 GraphQL 枚举突变