当前位置: 首页 > 知识库问答 >
问题:

DynamoDB分区密钥必须是唯一的吗?

谷泳
2023-03-14

我想为dynamodb中的订单创建一个表,每个订单由(UserID、date、Unique ID、products和total)组成,我想使用按日期排序的UserID查询特定用户的订单,我想知道如何选择分区键?它必须是独一无二的吗?如果是,我如何才能使它独一无二?在mongodb中,我会根据用户ID共享订单。如何使用dynamodb实现同样的效果?

共有1个答案

晏和风
2023-03-14

假设您有一个ID为1的用户a和ID为2的用户B,我假设a和B都可以多次订购。

因此,您可以使用复合键(分区键和排序键的组合)设计表。在具有分区键和排序键的表中,多个项可能具有相同的分区键值。但是,这些项必须具有不同的排序键值。具有相同分区键值的所有项按排序键值的排序顺序存储在一起。

分区键排序键的组合将产生唯一的顺序。这里分区键将是userID,而orderId将是唯一的。因此,您可以使用查询操作按userId查询特定用户的所有订单。对于日期排序,您可以在查询操作中使用过滤器表达式

如果筛选表达式不能帮助您按日期排序,则需要根据createdAt字段(日期字段)使用单独的索引。注意:-索引成本很高。

DynamoDB允许指定辅助索引来帮助进行这种查询。辅助索引可以是全局的,这意味着索引跨散列键跨越整个表,也可以是本地的,这意味着索引将存在于每个散列键分区中,因此要求在进行查询时也指定散列键。

替代设计。

用户userId作为分区键,CreatedAt作为sortKey,yes-seconds差异将导致一个唯一的时间戳,然后您可以在查询中使用键条件表达式。按日期查询DynamoDB

文档-

 类似资料:
  • 昨天我在我的项目中添加了,现在当我离开并回到导航中的元素时,它会重新加载Sky,我得到 警告:儿童(…):遇到两个具有相同密钥的子项,。子密钥必须是唯一的;当两个子项共享密钥时,将只使用第一个子项。 (上面使用的数字50只是一个例子,它每次抛出这个错误~40次,都是不同的id) 这个问题似乎源于我的文件: 因为每次我进入另一个屏幕时,这个组件都会卸载,然后在我回来时重新安装。 当完成时,创建了一组

  • 假设我有一个名为“student_course”的Dynamo DB表。我想存储每个学生在大学学习的课程。一个学生可以一次学习多个课程,一个课程可以一次有多个学生。所以基本上它是一个多映射。 我的数据访问模式只有一个用例- 一次获取一个学生和一门课程的记录,即获取每个学生ID和CourseId组合的数据。它保证对于学生ID和课程ID组合,只有一条记录可用。 为了实现这一点,我可以通过以下两种方式存

  • 我正在使用jQuery,我只是想知道,ID必须在整个页面中始终是唯一的吗?类,我知道,可以重复多少次,你喜欢,ID呢?

  • 问题内容: 示例:以下代码对JSON Spec有效吗? 还是应该始终使用以下语法?(如果是这样,为什么?) 我还没有在JSON规范中找到关于此的任何东西。尽管他们在示例中使用了围绕键的引号。 问题答案: 是的,您需要引号。这是为了使其更简单,并且避免了对javascript保留关键字必须使用另一种转义方法。

  • 只有当新项目的GSI分区键已经存在于另一个项目上时,我才希望PutItem成功。 假设我的表有以下项目(省略一些属性): 我试图把这个项目: 我希望这个PutItem请求失败,因为表还不包含GSI1PK=="e"的项。 如果可能的话,我想用一个条件表达式来解决这个问题。我不想通过在PutItem请求之前查询表来解决这个问题。 以下是我如何尝试通过一个我希望成功的示例(go sdk)实现这一点: 但