amazon-dynamodb - 需要建议:如官方文档所述,将 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.
}
那么基本上我该怎么做呢?
解决方案
另一种方法是将数据存储为“一对一”。所以我可以在顶级域中获得XX,YY,ZZ,但是会增加数据冗余吗?
是的,它会增加数据冗余,这会增加存储成本,但除非与文档的大小相比,重复的数据很重要,否则它不应该成为主要问题。
应该仔细处理 NoSQL 规范化的概念,因为大多数情况下不支持 JOIN,从而导致查询延迟增加。
我发现这个博客在设计 DynamoDB 表结构时很有用。在这里引用博客的要点(实际上是博客的结论):
没有一种万能的指导方针来决定标准化策略。如果您要从关系数据库迁移应用程序,则尤其如此。您为关系模式设计所做的许多假设不适用于像 DynamoDB 这样的 NoSQL 数据库。
最后,您选择的模式主要取决于应用程序的访问模式和数据项的大小。
推荐阅读
- r - 使用隐藏的 html 抓取动态 html 页面
- python - 如何将多个点映射到沿 y 轴的颜色渐变?
- android - 如何在 get 方法改造中发送请求正文
- javascript - 当包含在启用 Typescript 的 Vue.js 项目中时,Vuetify 停止工作
- r - 如何使用“getTree”树进行预测
- c# - c# 带有用户验证的控制台应用程序。它应该显示两个菜单:(1)新用户(2)新用户的旧用户:
- azure-devops - Azure DevOps Pipeline 失败,因为密码带有特殊字符
- notepad++ - 如何更改记事本++中的匹配高亮标签,如崇高?
- python - django all-auth 通过 twitch 进行身份验证
- database - Sqlite:内存:可视化器