amazon-web-services - DynamoDB 架构设计:组合排序键与 LSI
问题描述
我查看了很多 DynamoDB 教程和 SO 问题,但没有一个涵盖我的用例。
我有 3列:
- 类别
- 子类别
- 物品
子类别属于一个类别,项目是唯一的唯一值。
我已经读过( Dynamodb 中的3 个字段复合主键(唯一项))我应该根据我想要执行的查询类型来设计我的 DynamoDB 表:
- 获取类别中的所有项目
- 获取子类别中的所有项目
我的第一种方法是:
- 类别作为分区键
- Subcategory_Item 作为排序键
类别 + 子类别不是唯一的,所以这就是我将项目连接到子类别的原因。
由于我通常想一起查询同一类别中的项目,因此最好将同一分区中的相同类别项目也按子类别排序,所以这样(如果我做对了)我的“获取子类别中的所有项目” “会表现良好,我可以使用“ begins_with(子类别)”根据排序键轻松查询它
这种方式的缺点是,在我从 Dynamo 获得数据后,我需要对其进行聚合以将项目名称与子类别名称分开。
我的第二种方法:
- 类别作为分区键
- 项目作为排序键
- 子类别作为属性
- 子类别的本地二级索引
因此,这样“获取类别中的所有项目”查询将很简单,同一类别中的项目也将位于同一分区上,并且由于 LSI,“获取子类别中的所有项目”也将变得简单并且快速地。
我的问题:
- 第二种方法有什么缺点吗?
- 还有比这些更好的方法吗?
解决方案
这种方式的缺点是,在我从 Dynamo 获得数据后,我需要对其进行聚合以将项目名称与子类别名称分开。
为什么?除了串联的排序键值之外,只需将子类别和项目名称作为独立属性包括在内。
我有点惊讶你不需要一个get single item by name
不知道的类别或子类别。
推荐阅读
- java - 局部变量和实例变量同名
- python - 在 Plotly Scatter plot 中,如何用一条线连接两组点?
- powershell - 如何在 PowerShell 的远程连接中正确地将管道值映射到 ForEach-Object
- java - JPA - 具有连接表但缺少目标表的多对多映射
- gcc - 我将如何将 libcsv 库链接到我的 GCC 编译器?
- xamarin.forms - Xamarin Forms imagecircle 插件“ImageCircleRenderer”不包含“Init”的定义
- java - 在 JFrame 中打开 JDialog 时背景变暗?
- python - ES 索引与 python - 结合正常的映射设置,包括。index.mapping.ignore_malformed
- scripting - VBScript:第 1 行字符 1 中的无效字符 800A0408 编译错误
- nlp - GPT3:从下一个词到情感分析、对话、摘要、翻译……?