amazon-web-services - Dynamodb 架构设计(将关系数据映射到 nosql)
问题描述
试图从 AWS 中了解这个示例,将关系模型映射到 nosql
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-modeling-nosql-B.html
这里强调的一个关键概念是:
重要的
.... 大多数精心设计的应用程序只需要一张表。...
鉴于此,示例表如下
它解释说,
您定义以下支持关系订单输入模式的实体:
HR-员工 - PK:员工 ID,SK:员工姓名
HR-Region - PK:RegionID,SK:区域名称
...
HR-Employee - PK: EmployeeID, SK: Employee Name
但是,示例表中的实体的SK
值不是Employee Name
s。
此外,它建议以下查询
但 GSI-1 没有Employee Name
.
我知道这可能是 AWS 文档中的一个差异,我应该向他们提出(我有,而且他们在跟进方面出了名的糟糕)但我不确定文档是否正确并且我的理解是否错误(我'我倾向于相信后者,因为 AWS 文档通常是准确的)。
有人可以指导我在 nosql 模式映射方面的正确方向吗?上述链接中模式的正确示例(带有发电机表的示例记录)将非常有价值。
解决方案
所以我会试着让你更清楚,让我知道如果有些事情仍然没有意义。
首先,您提到以下事实:
但是,示例表中的实体 HR-Employee - PK: EmployeeID, SK: Employee Name 的 SK 值不是 Employee Names。
SK 值不是“Employee Names”的原因是因为 SK 不仅用于“Employee Names”,还用于其他查询(例如 Region Name、Country Name 等)。将 SK 视为它所代表的确切含义,即排序键。文档似乎错过了他们拥有的额外 SK 的解释,所以让我总结一下你在看什么。
您有 HR-Employee1,员工姓名 = Employee1,QuotaID(猜猜这个键是什么)= QUOTA-2017-Q1,其他键 = HR-CONFIDENTIAL
这些键名实际上并没有在表中定义,它们都在排序键下,并且只是隐含的“员工名称”或“配额ID”或“区域名称”。
这允许您做的是查询员工数据,使用employeeID 作为PK 和员工姓名作为SK,但它还允许您通过使用employeeID 作为PK 和quotaID 作为SK 查询员工配额数据(或任何它)。
这同样适用于您关于 GSI-1 的第二个问题。本质上,他们在这种情况下设计表格的方式是您有一个 SK“SortKey”,如果有意义的话,您可以在其中对各种类型的值进行排序。
推荐阅读
- node.js - 如何在 AWS Elastic Beanstalk 上运行 TypeORM 迁移命令
- python - 是否可以在单个应用程序中运行两个 YOLO (yolov4) 对象检测模型?
- cuda - 在没有实际张量核心的情况下,我如何能够运行张量核心指令?
- inform7 - Inform 7 要求在一定时间范围内输入
- c# - 登录后如何让用户回到原来的页面?
- python - Django TypeError:“datetime.datetime”类型的参数不可迭代
- opencv - 有没有办法使用 OpenCV 函数来执行基于眼睛检测的人脸识别?
- webpack - 如何在 css-loader 中更新 [name]?
- c++ - 配置 Boost.Log v2
- rest - 如何将 XML 发送到 Jaspersoft?(数据适配器)