Amazon dynamodb 如何使用Amazon DynamoDB建模1到N关系以满足单个读写?

Amazon dynamodb 如何使用Amazon DynamoDB建模1到N关系以满足单个读写?,amazon-dynamodb,dynamodb-queries,amazon-dynamodb-index,Amazon Dynamodb,Dynamodb Queries,Amazon Dynamodb Index,我试图从标准的RDBMS背景中学习正确的DynamoDB建模 我尝试反规范化的关系数据库如下所示: two-factorDetail Id(主键) 地位 电话号码(fk) 电话号码 Id(主键) 电话号码 类型 作者尝试 日志 Id(主键) 双因子序列(fk) 事件类型 创建数据 我的单表架构如下所示: 如您所见,同一电话号码可由许多TwoFactorDetail实体使用 考虑以下两种读/写模式: 读取TwoFactorDetail元数据,包括电话号码、电话号码类型和TwoFac

我试图从标准的RDBMS背景中学习正确的DynamoDB建模

我尝试反规范化的关系数据库如下所示:

two-factorDetail

  • Id(主键)
  • 地位
  • 电话号码(fk)
电话号码

  • Id(主键)
  • 电话号码
  • 类型
  • 作者尝试
日志

  • Id(主键)
  • 双因子序列(fk)
  • 事件类型
  • 创建数据
我的单表架构如下所示:

如您所见,同一电话号码可由许多TwoFactorDetail实体使用

考虑以下两种读/写模式:

  • 读取TwoFactorDetail元数据,包括电话号码、电话号码类型和TwoFactorDetail.Id的尝试
  • 按电话号码更新电话号码
正如您在模型中看到的,我使用一种已知的方法来满足读取模式,其中链接到TwoFactorDetailPhoneNumber实体成为该分区中的一个项目。这意味着我可以通过使用以下条件读取特定TwoFactorDetail.Id的所有详细信息,只需一次往返db即可: PK=“DET#12345”和(SK=“DET”或SK以“PHO”开头)

现在我的问题是如何在分区之间保持PhoneNumber元数据的一致性


也就是说,由于电话号码可以在多个双因素详细信息实体之间共享,并且我希望在每个分区中复制此数据以便于读取,因此我不确定如何以智能方式更新与电话号码匹配的所有项目,以便使用更少的请求量。

我的解决方案是按如下方式更改我的表模型:

  • PhoneNumber元数据项作为附加属性移动到TwoFactorDetail元数据项,而不是单独的项
  • PhoneNumber属性上创建一个GSI,使PhneNumber成为分区键,这样我就可以跨分区使用它获取所有TwoFactorDetail实体
这幅图不言自明:

我对这一变化感到高兴,因为我只需一次往返数据库,就可以获得所有TwoFactorDetail元数据

另一方面,我决定这样做,以保持相同的PhoneNumber元数据在two-factordeail实体之间的一致性:

  • 根据电话号码查询主表
  • 根据需要修改检索到的项目的属性
  • 向DynamoDb发送批写入请求