Blu*_*oba 17 many-to-many amazon-dynamodb
参考https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html.我想知道是否有人可以帮助我.
在桌子上,我不明白如何创建排序键?这是一个存储Bill-ID和Invoice-ID的属性吗?还是两个独立的属性?我觉得这是一个灵活的属性,如果是这样,你如何区分彼此?我们如何构建排序键的查询?
只是通过查看前缀"Bill-"或"Invoice-"?DynamoDB的实践似乎使用破折号(" - ")来分隔属性中的值.如果有人可以给我这些事情的用例,我也会感激不尽,但除非在这种情况下重要,否则我会切断正切.
现在,这是非常相关且非常有趣的https://youtu.be/xV-As-sYKyg?t=1897,其中演示者使用一个产品表来存储各种类型的项目:书籍,歌曲专辑和电影; 并且每个都有自己的属性.
我在理解那里使用的排序键时遇到了问题.我知道productID = 1是bookID,productID = 2是专辑.现在让它变得混乱的是我用红色圈出的东西.这些是专辑2的曲目.但是,排序键的结构是"albumID:trackID".现在,"trackID"在哪里?它是否意味着用实际ID替换"trackID"这个词?或者这是一个完全像"albumID:trackID"的文本?
如果我想查询特定的trackID怎么办?我的查询的语法是什么?
谢谢大家!!!:-)
F_S*_*O_K 32
在第一张图片中,您发布的基表中的项目(主键)将如下所示:
First_id(Partition key) Second_id(Sort Key) Dated
------------- ---------- ------
Invoice-92551 Invoice-92551 2018-02-07
Invoice-92551 Bill-4224663 2017-12-03
Invoice-92551 Bill-4224687 2018-01-09
Invoice-92552 Invoice-92552 2018-03-04
Invoice-92552 Bill-4224687 2018-01-09
Run Code Online (Sandbox Code Playgroud)
GSI中的相同项目看起来像这样
Second_id(Partition Key) First_id
---------- ---------------
Invoice-92551 Invoice-92551
Bill-4224663 Invoice-92551
Bill-4224687 Invoice-92551
Invoice-92552 Invoice-92552
Bill-4224687 Invoice-92552
Run Code Online (Sandbox Code Playgroud)
他们以相当混乱的方式吸引了它.
在基表上执行查询时,可以使用带有分区键的查询,Invoice-92551
同时获得"发票"项目以及属于它的所有帐单项目.
想象一下,您正在查看Invoice-92551
应用程序中的发票,您可以看到它有两个相关的账单(Bill-4224663
和Bill-4224687
).如果您单击该帐单,应用程序可能会对GSI进行查询.GSI查询将具有分区键Bill-4224687
.如果您查看我上面绘制的GSI表,您可以看到这将返回两个项目,显示这Bill-4224687
是两个发票的一部分(Invoice-92551
和Invoice-92552
)
在你的第二张图片中,单词'bookID'和'albumID'等应该代表实际的ID(比方说293847和3340876).
我会这样绘制他的例子:
ProductID(Partition Key) TypeID(Sort Key) Title Name
--------- ------ ------ ------
Album1 Album1 Dark Side
Album1 Album1:Track1 Speak to me
Album1 Album1:Track2 Breathe
Movie8 Movie8 Idiocracy
Movie8 Movie8:Actor1 Luke Wilson
Movie8 Movie8:Actor2 Maya Rudolph
Run Code Online (Sandbox Code Playgroud)
以下是您的疑问:
Partition key: Album1
Run Code Online (Sandbox Code Playgroud)
在相册1(暗侧)上提供所有信息(包括曲目)
Partition key: Album1 and Sort Key: Album1:Track2
Run Code Online (Sandbox Code Playgroud)
为您提供有关呼吸的信息.
Partition key: Movie8
Run Code Online (Sandbox Code Playgroud)
给你关于Movie8(Idiocracy)的所有信息(包括演员)
如果我正在构建表格,我会这样做,所以单词电影,专辑等是实际ID的一部分(比如Movie018274和Album983745987),但这不是必需的,它只是使ID更具人性化.
Stu的答案不太正确,该表实际上如下图所示:
First_id(Partition key) Second_id(Sort Key) Dated
------------- ---------- ------
Invoice-92551 Invoice-92551 2018-02-07
Invoice-92551 Bill-4224663 2017-12-03
Invoice-92551 Bill-4224687 2018-01-09
Invoice-92552 Invoice-92552 2018-03-04
Invoice-92552 Bill-4224687 2018-01-09
Bill-4224663 Bill-4224663 2018-12-03
Bill-4224687 Bill-4224687 2018-01-09
Run Code Online (Sandbox Code Playgroud)
在上表中,帐单项目(即分区键= Bill-xxxxx)保存该帐单的通用信息,其中以帐单项目作为排序关键字的发票项目保存该发票特定于给定发票的信息。
为了完全重建帐单,需要一个GSI,它允许您查找帐单的完整信息(即公用记录+发票特定记录):
Second_id(Partition Key) First_id Data
---------- --------------- -----------
Bill-4224663 Bill-4224663 Common bill data
Bill-4224663 Invoice-92551 Bill data for Invoice-92551
Bill-4224687 Bill-4224687 Common bill data
Bill-4224687 Invoice-92551 Bill data for Invoice-92551
Bill-4224687 Invoice-92552 Bill data for Invoice-92552
Invoice-92551 Invoice-92551 Redundant data!
Invoice-92552 Invoice-92552 Redundant data!
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4964 次 |
最近记录: |