database-design - 如果大多数列都是唯一项,如何在 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。
在这种情况下,最佳做法是什么?
解决方案
最好的选择是以这种方式组成哈希键:
Attribute1_Attribute2_Attribute3
如果您不使用它,则不需要排序键。只需将其他属性添加为常规列。每当需要时(根据您的查询),您可以在这些属性上添加额外的 GSI 或创建任意大小的复合 GSI。
如果Attribute1_Attribute2_Attribute3
不是唯一的,则使用 auuid
作为散列键并在所有其他上设置 GSI。
推荐阅读
- angular - 由于 ESLint,无法更新 Angular CLI
- compare - 在 COBOL 中比较十六进制值时遇到问题
- iframe - iframe 的谷歌标签管理器
- google-photos - Api google photo 方法,用于获取有关共享相册中用户操作的数据
- localization - 基于 CNN 的复制移动伪造定位
- c# - Automapper 执行没有错误,但没有数据从源复制到目标
- flutter-web - seturlstrategy-页面重新加载不起作用:Flutter web 2.0
- python - 如何防止 Matplotlib 在图例中提及相同的行
- c# - 异常处理中间件不处理异常 - 调用 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware (ASP.NET Core WebAPI)
- unity3d - Unity 和 Blender 之间的角色渲染方式不同