参考https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html。我想知道是否有人可以帮助我。
在桌面上,我不明白如何创建排序键?这是一个存储Bill-ID和Invoice-ID的属性吗?还是两个独立的属性?我觉得这是一个灵活的属性,如果是这样,你如何区分彼此?我们如何在sort-key上构建查询?
只是通过查看前缀“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怎么办?我的查询的语法是什么?
提前谢谢大家!!! : - )
答案 0 :(得分:26)
在第一张图片中,你发布的基本表格(主键)中的项目如下所示:
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
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
他们以相当混乱的方式吸引了它。
当您对基表进行查询时,您可以使用分区键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
以下是您的疑问:
Partition key: Album1
在相册1(暗侧)
上提供所有信息(包括曲目)Partition key: Album1 and Sort Key: Album1:Track2
为您提供有关呼吸的信息。
Partition key: Movie8
在Movie8(Idiocracy)上提供所有信息(包括演员)
如果我正在构建表格,我会这样做,因此电影,专辑等单词是实际ID的一部分(比如Movie018274和Album983745987),但这不是必需的,它只是使ID更具人性化。
答案 1 :(得分:5)
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
在上表中,“帐单”项目(即分区键= Bill-xxxxx)保存该帐单的通用信息,其中以“帐单”项目作为排序关键字的“发票”项目保存特定于给定发票的帐单信息
为了完全重建帐单,需要一个GSI,该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!