如何在 dynamodb 中设计电子学习平台的数据库架构?

how to design db schema of an e-learning platform in dynamodb?

我正在为在线电子学习平台设计 No-SQL 数据库模式,计划将其存储在 AWS DynamoDB 中 这类似于 Udemy,用户可以访问和查看所有可用课程,并且用户可以购买不止一门课程。

截至目前,我正在考虑如下架构

用户

课程

但我只是从项目大小限制的角度考虑,如果将来单个用户购买了很多课程,或者如果单个课程中有很多模块和视频,这会自动增加 AWS Dynamo DB 中的项目大小最大 400KB,我看到博客建议拆分项目,但也想在此处查看您的输入。 所以我的问题是

  1. 明智的数据库架构是否符合我的想法?
  2. 当条目很多且项目大小很大时,有什么更好的方法?

我也在探索 GraphQL,这样前端的调用就会有更少的延迟,但担心的是数据库设计和大项目。

如果有人对此有任何想法或宝贵建议,请告诉我:)

提前致谢。

在单个项目中对一对多关系(例如,用户与购买的课程)进行建模是一种常见的模式。但是,如果关系的多方可以变大,您可能需要一种不同的方法。听起来您的用例不适合这种特定模式。

绕过此限制的一种方法是在 项目集合 中对关系进行建模。例如,您可以在同一分区内对用户和购买的课程进行建模。将数据放在一起可以更轻松地在单个 query 操作中获取数据。

在此数据模型中,我创建了一个名为 courses 的全局二级索引,使用属性 GSIPK 作为二级索引的主键。这样一来,您只需查询 courses GSI 即可获取所有课程。

请记住,这只是您可以用来对数据建模的众多方法之一。从 AWS Re:Invent 查看 this talk 关于 DynamoDB 数据建模的信息。它对一些有助于您设计数据模型的关键概念进行了精彩的演练。