如何解决如何组织 DynamoDB 表以处理用户和项目?
我正在开发一个项目,用户可以在其中拥有“项目”(如库存系统)。
这些项目的结构类似于:
item : {
id: "00000000-0000-0000-0000-000000000000",//uuid
name: "Item Name",description: "Lorem ipsum dolor sit amet,consectetur adipiscing ..",image: "image.jpg_00000000-0000-0000-0000-000000000000"
}
主要概念是这些项目将由用户创建(第一个使用它的用户将创建它,然后其他用户可以使用它)。
物品:
id | 姓名 | 描述 | 图片 |
---|---|---|---|
00000000-0000-0000-0000-000000000001 | 项目 01 | Lorem ipsum dolor sat amet,consectetur adipiscing .. | image.jpg_0000-0000-000000-001 |
00000000-0000-0000-0000-000000000002 | 项目 02 | Lorem ipsum dolor sat amet,consectetur adipiscing .. | image.jpg_0000-0000-000000-002 |
00000000-0000-0000-0000-000000000003 | 项目 03 | Lorem ipsum dolor sat amet,consectetur adipiscing .. | image.jpg_0000-0000-000000-003 |
用户数据:
用户名 | id | 日期 | 金额 | 另一个字段 |
---|---|---|---|---|
example01 | 00000000-0000-0000-0000-000000000001 | Date.Now() | 1 | “ABC” |
example02 | 00000000-0000-0000-0000-000000000001 | Date.Now() | 5 | “定义” |
example01 | 00000000-0000-0000-0000-000000000002 | Date.Now() | 3 | “吉” |
由于我想使用 DynamoDB (Nosql),我不确定应该如何组织数据库。 *
在阅读了一些文档和帖子后,我看到 Nosql 的主要思想是避免将数据拆分到不同的表中。甚至有些信息说有时候有重复的数据会更好,但我不认为为每个实例创建对象是一个好的解决方案。
在我看来,我有这样的想法,即使我不确定这是否应该是 DynamoDB 的工作方式:
id | 姓名 | 描述 | 图片 | 用户名 | 日期 | 金额 |
---|---|---|---|---|---|---|
0000000.. | 项目 01 | Lorem ipsum .. | 图像.. | 示例01 | Date.Now()+x | 3 |
示例02 | Date.Now()+y | 15 | ||||
0000000.. | 项目 02 | Lorem ipsum .. | 图像.. | |||
0000000.. | 项目 03 | Lorem ipsum .. | 图像.. | 示例01 | Date.Now()+z | 1 |
在这种情况下,我应该如何构建我的 DynamoDB?
在查看第一个答案中列出的两个视频后更新问题:
- AWS re:Invent 2019: Data modeling with Amazon DynamoDB (CMY304)
- AWS re:Invent 2018: Amazon DynamoDB Deep Dive: Advanced Design Patterns for DynamoDB (DAT401)
我不得不说,在查看了两个视频后,我对如何设计数据库的整个过程有了更清晰的了解。
首先,我的访问模式是:
- 获取项目列表 -> PK: id(按照推荐的语法,这将返回一个 ITEM#uuid 列表)
- 获取物品 -> PK = ITEM#uuid
- 获取用户项目列表 -> PK = USER#example01 AND BEGINS_WITH(SK,'ITEM#')
问题是我还没有看到任何在桌子上处理“项目列表”的例子。 例如,在视频的例子中,用户有“订单”,这些“订单”有“物品”..但没有显示如何“存储”物品。
如果项目只有“id”和“name”,那么每次都将它们存储在 DynamoDB 项目(“行”)中不会有任何问题。有了这个,如果项目更改了名称,我们就会遇到问题,但这可以通过一个简单的脚本来解决。
问题来了,当项目有更多字段时(例如,“描述”,可以更大)。在这种情况下,我不确定每次都保存整个项目是否好。
* 这是一个个人项目,主要目标是学习一些“技术”。我知道在这种情况下使用 sql DB 会更容易。
解决方法
“我应该如何在 DynamoDB 中构建我的数据?”的答案总是取决于您打算如何访问数据。例如,请考虑以下用例:
- 通过用户名获取订单
- 获取过去 24 小时内下的订单
- 获取所有订购商品 X 的用户
在 DynamoDB 中,我们根据应用程序需要如何访问数据(也称为“访问模式”) 存储数据。我上面概述的每种访问模式都可能具有完全不同的数据模型。因此,在不知道您要对数据做什么的情况下,很难回答“我应该如何为我的数据建模”这个问题。
开始学习 DynamoDB 数据建模的最佳方式是watch this talk by Alex Debrie。在不到 45 分钟的时间内,他介绍了 DynamoDB 基础知识并给出了几个数据建模示例(一对一、一对多等)。
DynamoDB 要求您提前批判性地考虑应用程序的访问模式。那么,您要构建什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。