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用于直接文档查找的字段上创建一个全局索引。
那应该是这样工作的吗?将这些种类繁多的数据放入同一张表中是否合法?还是第二个两表设计是更好的方法?
在什么时候添加第二张表是正确的?