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
Run Code Online (Sandbox Code Playgroud)
我们可以很容易崩溃Project
,并Document
为一个Documents
表:
Documents
Hash key Sort key Global Index
project-id document-id user-id
Run Code Online (Sandbox Code Playgroud)
但为什么要停在那里?为什么不用一张桌子来统治他们呢?既然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 ...
Run Code Online (Sandbox Code Playgroud)
然后我们将有一个全局索引,例如,email
用于用户记录查找的document-id
字段,以及另一个用于直接文档查找的字段。 …
是否可以将多个字段作为范围键?
假设我有一个表,其中每一行都由 <A,B,C>
-------------------------------
A | B | C | D | E |
-------------------------------
Run Code Online (Sandbox Code Playgroud)
A
主hash
键在哪里
我想B
和C
作为主range
键。
如何在 DynamoDB 中将超过 2 个字段作为主键?
我有 1000 个 CSV 文件。每个 CSV 文件的大小在 1 到 500 MB 之间,并且采用相同的格式(即相同的列顺序)。我有一个列标题的头文件,它与我的 DynamoDB 表的列名相匹配。我需要将这些文件导入到 DynamoDB 表中。这样做的最佳方式/工具是什么?
我可以将这些 CSV 文件连接成一个单一的巨型文件(尽管我宁愿避免这样做),或者在需要时将它们转换为 JSON。我知道BatchWriteItem的存在,所以我想一个好的解决方案将涉及批量写入。
例子:
first_name,last_name
:
John,Doe
Bob,Smith
Alice,Lee
Foo,Bar
Run Code Online (Sandbox Code Playgroud)