首页 > 解决方案 > 如果大多数列都是唯一项,如何在 DynamoDB 表中定义键

问题描述

我有一个看起来像这样的 DDB 项目

Attribute 1  

Attribute 2

Attribute 3

Attribute 4

Attribute 5

Attribute 6

Attribute 7

Attribute 8

Attribute 9

Attribute 10

Attribute 11

属性 1 - 9 在我的表中构成了一个独特的项目。我的大部分查询将从属性 1-3 开始

I was thinking of 

Hash Key = Attribute1_Attribute2_Attribute3

Range Key = Attribute3_Attribute4_Attribute5_Attribute6_Attribute7_Attribute8

但是当我实施时它看起来很难看。哈希和范围键的转换器在不同的类中重复太多相同的属性。我需要所有列来对属性 3,5 和 7 进行进一步的 GSI。

2nd option 
Hash Key = Attribute1_Attribute2_Attribute3

Range Key = UUID

在第二个选项中,我可以根据哈希键进行查询并为其他查询添加 GSI。

3rd option 
Hash Key = UUID

Range Key = No range key

为复合属性 Attribute1_Attribute2_Attribute3 添加一列,并在所有查询上构建 GSI。

在这种情况下,最佳做法是什么?

标签: database-designamazon-dynamodbdynamodb-queries

解决方案


最好的选择是以这种方式组成哈希键:

Attribute1_Attribute2_Attribute3

如果您不使用它,则不需要排序键。只需将其他属性添加为常规列。每当需要时(根据您的查询),您可以在这些属性上添加额外的 GSI 或创建任意大小的复合 GSI。


如果Attribute1_Attribute2_Attribute3不是唯一的,则使用 auuid作为散列键并在所有其他上设置 GSI。


推荐阅读