当前位置: 首页 > 知识库问答 >
问题:

Dynamodb表设计模式

江英卓
2023-03-14

我不确定这是否是问这个问题的正确地方。

我是dynamodb的新手,正在尝试创建一个小型web应用程序。我已经阅读了这里的最佳实践http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/BestPractices.html

我的桌子将是:

  1. 建筑物
  2. 租户(一栋建筑可以有尽可能多的租户,由楼层编号确定)
  3. 收件人(每个楼层可以有尽可能多的收件人,基本上是租户的别名)
  4. 快递员
  5. 交付(与特定收件人捆绑的快递员)

我目前设计模式的方法如下所示:

// Tables
// PK: Building Id, SK: name
- Building ID : {
  name: <Building Name>
  Tenants: [
     { TenantId: { Receipients: [{Receipient Id 1, Receipient Id 2...}] }
  ] 
}

// PK: Courier Id, SK: createdAt
- CourierId :  {
 name: <Courier name>
 ...
}

//PK: Not Sure, SK: Not Sure <-- This is where I messed up, looks relational, defeats the purpose?
- Deliveries: {
  receipient id: Courier id
}

为了列出所有交付以及收件人详细信息,我需要按收件人Id列出收件人详细信息。根据LSI文档,这意味着将收件人Id作为构建表中的排序键。

由于您只能拥有表的顶级元素(接收者不是其中之一),因此根据指导方针这似乎是不可能的https://docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/GSI.html

索引键属性可以由基表中的任何顶级字符串、数字或二进制属性组成;不允许使用其他标量类型、文档类型和集合类型。

所以,我希望这可以在不制作另一个表的情况下实现,我应该复制所有的收件人,更新他们表中发生的所有更新。有没有其他替代或更好的方法?

由于快递员与收件人之间似乎是一对一的关系,所以在列出所有快递时保留ID并迭代所有收件人和快递员可以吗?

共有1个答案

方玄天
2023-03-14

DynamoDB可能不是满足您需求的最佳解决方案。据我所知,您有一个关系数据结构,主要在与交付相关的表中。DynamoDB设计用于保存非结构化数据,主要由一个或两个键请求。它不是为了维护关系完整性或提供表连接而设计的。

我不知道你是否有云开发的经验,但是使用云架构体系,每种数据结构都可以有一个数据库。例如:

  1. 您可以在DynamoDB中维护您的建筑和courier数据,并主要通过ids请求使用它;甚至可能在同一张桌子上。可以有不同结构的不同文档/对象

如果您扩展视图并同时使用多个资源,那么还有许多其他解决方案。

 类似资料:
  • 我正在构建一个DynamoDB应用程序,最终将为大量(数百万)用户提供服务。目前该应用程序的项目模式很简单: 当新用户注册时,或者如果用户希望通过电子邮件地址找到另一个用户,我们需要通过电子邮件而不是用户ID来查找用户。对于当前的模式,这很简单:只需使用一个全局二级索引和电子邮件作为分区键。 但是我们希望为每个用户启用多个电子邮件地址,并且DynamoDB操作不支持-类型的。所以我正在权衡几个选项

  • 我对DynamoDB比较陌生,我们正在为我们的一个应用程序设计一个自由形式的搜索GUI。我们使用的主要数据存储是传统的关系数据库,我们计划使用DynamoDB作为数据库顶部的持久“缓存”层,仅用于搜索。 在我们的例子中,我们有3个键来确定客户。 我们将客户存储为上述3个id的组合,如下所示: billingAccountNumber客户ID DynamoDB中的每个项目代表客户在特定时间发生的事件

  • 我目前正在设计一个DynamoDB模式,我不知道我是否在正确的轨道上。 我需要将以下数据存储到DynamoDB表中: 设备ID(编号) 此DynamoDB表的主要查询是通过deviceID和deviceLogType在一个时间范围内查询数据。是 分区键: 排序键: 我的问题是: 上述设计正确吗?

  • 我想了解一下这个例子,从AWS映射关系模型到nosql https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-modeling-nosql-B.html 这里强调的一个关键概念是: 重要的 .... 大多数设计良好的应用程序只需要一个表。。。 因此,示例表如下 它解释了, 您可以定义以下实体,这些实体支持关系订单条目

  • 根据DynamoDB文件:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-general-nosql-design.html “在DynamoDB应用程序中,您应该维护尽可能少的表。大多数设计良好的应用程序只需要一个表。” 但是根据我的经验,由于分区键设计,你总是不得不做相反的事情。 让我们考虑下一个情况。我们

  • 各大设计模式例子参考:CSDN专栏 . C++ 设计模式 系列博文 设计模式工程目录 单例模式 单例模式例子 抽象工厂模式 抽象工厂模式例子 适配器模式 适配器模式例子 桥接模式 桥接模式例子 观察者模式 观察者模式例子 设计模式的六大原则 单一职责原则(SRP,Single Responsibility Principle) 里氏替换原则(LSP,Liskov Substitution Prin