在什么时候你需要在 dynamodb 中使用多个 table?

At what point do you need more than one table in dynamodb?

我正在开发一个资产跟踪系统,该系统还管理“项目”的概念。此应用程序的用户对其客户的资产执行维护活动,因此他们需要一个操作日志,其中对资产的操作作为项目中的任务开始。例如,“修复破损的框架”可能是一个任务,其中的操作将具有类似于“使用部分 a、b 和 c 修复框架”的内容,以及完成时间和执行该操作的员工。

应用程序的概念数据模型从具有多个位置的客户开始,每个位置都有多个资产。每个资产都应该有一个关联的操作日志,以便查看以前应用于该资产的操作。

对我来说,根据该数据的逻辑所有权,这些都应该放在一个 table 中。客户拥有位置,位置拥有资产,资产拥有操作。

相信 我应该有第二个 table 用于项目,因为此数据与 Customer/Location/Asset 数据相切。但是,因为我读了很多关于它应该如何成为一个 table 的内容,所以我不确定这种描述是否只存在,因为我对数据建模不正确,因为我无法克服我的 3NF 建模在我的整个职业生涯中都使用过。

单个 table 设计并不禁止您创建多个 table。相反,鼓励每个微服务只使用一个 table(意思是,将您想要一起访问的相关数据存储在同一个 table 中)。

让我们看看专家的一些轶事:

Rick Houlihan tweeted over a year ago

Using a table per entity in DynamoDB is like deploying a new server for each table in RDBMS. Nobody does that. As soon as you segregate items across tables you can no longer group them on a GSI. Instead you must query each table to get related items. This is slow and expensive.

Alex DeBrie responded to a tweet last August

Think of it as one table per service, not across your whole architecture. Each service should own its own table, just like with other databases. The key around single table is more about not requiring a table per entity like in an RDBMS.

据此,你应该自己回答...

  • 数据的相关性如何?
  • 如果您使用关系数据库进行构建,您会将其存储在单独的数据库中吗?
  • 这些实际上是 2 个独立的微服务,还是同一个微服务的一部分?
  • ...

根据对这些(和类似)问题的回答,您可以争论是将其保留在一个 table 中,还是将其拆分为 2 table 个。