我试图更好地理解在AWS DynamoDB中使用邻接表模式进行多对多(m:n)关系设计。
在https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html处查看AWS文档,我们有一个示例,其中的发票和帐单实体具有m:n关系。
我了解可以通过读取一个分区来获取与特定发票相关的所有账单的详细信息。例如,我可以查询Invoice-92551,并基于分区中的其他项目知道与之关联的2张账单的一些属性。
我的问题是我必须怎么做才能获得这2张账单的完整账单属性。这是否需要使用我从发票分区中派生的ID进行两次其他查询,还是我在这里缺少其他模式?
其他详细信息 引用屏幕快照中Bill项的2种不同描述:
这是否意味着我的发票分区应包括我想通过最少查询访问的任何账单属性?我原本以为Bill分区将包含我想要的大部分内容,但是如果我想通过Invoice来获取它们,那是没有意义的。
答案 0 :(得分:2)
否,没有其他查询-除非您仅询问(“项目”)某些属性,否则查询将检索票据的所有属性及其键。
DynamoDB将每个分区一起存储在单个节点上,因此获取整个分区非常有效。此分区由其“分区键”(您的发票编号)定义。该分区包含一堆“项目”(您的账单),每个项目都有其自己的“排序键”(您的账单ID)和任意数量的“属性”。当DynamoDB读取分区时,它将按顺序读取这些项目及其所有属性,并且可以返回所有项目,除非您特别要求不要这样做。请注意,即使您仅要求它返回这些属性的子集(“投影”),Amazon仍需要从磁盘读取它们,并且您仍将为此I / O付费。