首页 > 解决方案 > 需要建议:如官方文档所述,将 DynamoDB 构建为新模型

问题描述

目前,我的数据库有 3 个集合。基本上,我的数据结构如下所示。

xx: { 
   yy: { 
      zz: {
      }
   }
}

其中“xx”、“yy”、“zz”是单独的集合。我已经使用键映射了xx > yy >> zz 。

xx: { 
     KEY: "123"
}

YY: { 
      xx_Key : "123",
      KEY : "456"
}

zz: { 
      yy_key: "456",
      KEY: "789"
}

1,问题是我怎样才能把这3个表变成一个表,但是需要对每个'xx','yy','zz'做每一个操作。由于 dynamoDB 只允许 GSI 在顶层。那么我该如何对这些进行 CRUD 操作呢?


2,另一种方法是将数据存储为“一对一”。所以我可以在顶级域中获得XX,YY,ZZ ,但是会增加数据冗余吗?基本上改变的数据将是,

Entry1: { 
  XX: "123",
  YY:"456",
  ZZ: "789"
}

Entry2: { 
  XX: "123",
  YY:"456",
  ZZ: "790" //Change in value here. But same xx & yy repeated.
}

那么基本上我该怎么做呢?

标签: amazon-dynamodb

解决方案


另一种方法是将数据存储为“一对一”。所以我可以在顶级域中获得XX,YY,ZZ,但是会增加数据冗余吗?

是的,它会增加数据冗余,这会增加存储成本,但除非与文档的大小相比,重复的数据很重要,否则它不应该成为主要问题。

应该仔细处理 NoSQL 规范化的概念,因为大多数情况下不支持 JOIN,从而导致查询延迟增加。

我发现这个博客在设计 DynamoDB 表结构时很有用。在这里引用博客的要点(实际上是博客的结论):

没有一种万能的指导方针来决定标准化策略。如果您要从关系数据库迁移应用程序,则尤其如此。您为关系模式设计所做的许多假设不适用于像 DynamoDB 这样的 NoSQL 数据库。

最后,您选择的模式主要取决于应用程序的访问模式和数据项的大小。


推荐阅读