DyanmoDB 最佳实践明确表明:
您应在DynamoDB应用程序中维护尽可能少的表。设计良好的大多数应用程序只需要一张桌子。
我发现这很有趣,因为我所见过的每一个有关DyanmoDB的教程都具有多表设计。
但是,这实际上意味着什么?
让我们考虑一个具有三个主要实体的简单应用程序:用户,项目和文档。一个用户拥有多个项目,一个项目可以有多个文档。我们通常必须在用户的项目和项目的文档上进行查询。读取数量多于写入数量。
天真的教程的表设计将使用三个表:
Users
Hash key
user-id
Projects
Hash key Global Index
project-id user-id
Documents
Hash key Global Index
document-id project-id
我们可以很容易崩溃Project
,并Document
为一个Documents
表:
Documents
Hash key Sort key Global Index
project-id document-id user-id
但是为什么要停在那里?为什么不用一张桌子来统治他们呢?既然User
是一切的根源...
Users
Hash key Sort key
user-id aspect
--------- ---------
foo user email: foo@bar.com ...
foo project:1 title: "The Foo Project"
foo project:1:document:2 document-id: 2 ...
然后,我们将在一个email
用于用户记录查找的字段上创建一个全局索引,在一个document-id
用于直接文档查找的字段上创建一个全局索引。
那应该是这样工作的吗?将这些种类繁多的数据放入同一张表中是否合法?还是第二个两表设计是更好的方法?
在什么时候添加第二张表是正确的?