首页 > 解决方案 > 如何组织 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"
}

主要概念是这些项目将由用户创建(第一个使用它的用户将创建它,然后它将可供其他用户使用)。

在传统的 SQL DB 模式中,我会创建如下内容:

项目:

ID 姓名 描述 图片
00000000-0000-0000-0000-000000000001 项目 01 Lorem ipsum dolor sit amet, consectetur adipiscing .. image.jpg_0000-0000-000000-001
00000000-0000-0000-0000-000000000002 项目 02 Lorem ipsum dolor sit amet, consectetur adipiscing .. image.jpg_0000-0000-000000-002
00000000-0000-0000-0000-000000000003 项目 03 Lorem ipsum dolor sit amet, consectetur adipiscing .. image.jpg_0000-0000-000000-003

用户数据:

用户名 ID 日期 数量 另一个领域
示例01 00000000-0000-0000-0000-000000000001 日期.now() 1 “美国广播公司”
例子02 00000000-0000-0000-0000-000000000001 日期.now() 5 “定义”
示例01 00000000-0000-0000-0000-000000000002 日期.now() 3 “吉”

由于我想使用DynamoDB (NoSQL),我不确定我应该如何组织数据库。*

在阅读了几篇文档和帖子后,我看到 NoSQL 的主要思想是避免将数据拆分到不同的表中。甚至一些信息说有时拥有重复数据会更好,我不认为为每个实例创建对象是一个好的解决方案。

在我看来,我有这样的东西,即使我不确定这是否应该是 DynamoDB 的工作方式:

ID 姓名 描述 图片 用户名 日期 数量
0000000.. 项目 01 Lorem ipsum .. 图片.. Example01 日期.now()+x 3
Example02 日期.now()+y 15
0000000.. 项目 02 Lorem ipsum .. 图片..
0000000.. 项目 03 Lorem ipsum .. 图片.. Example01 日期.now()+z 1

在这种情况下,我应该如何构建我的 DynamoDB?



查看第一个答案中列出的两个视频后的问题更新:

我不得不说,在查看了这两个视频之后,我清楚地了解了我应该如何设计我的数据库的整个过程。

首先我的访问模式是这些:

问题是我没有看到任何在桌子上处理“项目列表”的例子。例如,在视频的示例中,用户有“订单”,这些“订单”有“物品”。但没有显示如何“存储”物品。

如果项目只有“id”和“name”,则每次将它们存储在 DynamoDB 项目(“行”)中不会有任何问题。有了这个,如果项目改变了名称,我们就会遇到问题,但这可以通过一个简单的脚本来解决。

当项目有更多字段(例如,“描述”,可能更大)时,问题就来了。在这种情况下,我不确定每次都保存整个项目是否会好。

*这是一个个人项目,主要目标是学习一些“技术”。我知道在这种情况下使用 SQL DB 会更容易。

标签: databasedata-structuresnosqlamazon-dynamodb

解决方案


“我应该如何在 DynamoDB 中构建我的数据?”的答案。将始终取决于您打算如何访问数据。例如,考虑以下用例:

  • 按用户名获取订单
  • 获取过去 24 小时内下的订单
  • 获取所有订购商品 X 的用户

在 DynamoDB 中,我们根据应用程序需要如何访问数据(也称为“访问模式”)来存储数据。我上面概述的每种访问模式可能具有完全不同的数据模型。因此,在不知道您要对数据做什么的情况下,很难回答“我应该如何为我的数据建模”这个问题。

开始学习 DynamoDB 数据建模的最佳方式是观看 Alex Debrie 的演讲。在不到 45 分钟的时间里,他描述了 DynamoDB 基础知识并给出了几个数据建模示例(一对一、一对多等)。

DynamoDB 要求您提前批判性地考虑应用程序的访问模式。那么,您要构建什么?


推荐阅读