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: [email protected] ...
foo project:1 title: "The Foo Project"
foo project:1:document:2 document-id: 2 ...
然后我们会有一个全局索引,比如说,email
用于用户记录查找的document-id
字段,另一个用于直接文档查找的字段。
这是它应该如何工作的吗?将如此大相径庭的数据放入同一张表中是否合法?或者第二种,双表设计是更好的方法?
在什么时候添加第二个表是正确的?