问题标签 [amazon-dynamodb-data-modeling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
33 浏览

amazon-web-services - 类似 IAM 的服务的 DynamoDB 多对多关系

因此,我尝试构建像 Amazon IAM 一样的 IAM 服务,但更简单。公司有用户、组和策略。正如您可以想象的那样,用户、组和策略彼此之间具有多对多的关系。行动:

  • 可以将策略添加到组
  • 可以将用户添加到组或策略

现在的问题是,如果用户尝试登录,那么我必须提出 3 个请求:

  • 从用户分区获取组和策略
  • 获取该列表中的所有策略表单组
  • 获取所有政策

然后我必须为每次登录做 3 次往返。有一个更好的方法吗?或以不同的方式设计关系。

0 投票
2 回答
58 浏览

amazon-web-services - DynamoDB 一对一

你好 stackoverflow 社区,

这个问题是关于对涉及的多个实体的一对一关系进行建模。

假设我们有一个关于学生的应用程序。每个Student都有:

  • Profile(姓名、出生日期……)
  • Grades(数学成绩,地理......)
  • Address(城市,街道......)。

要求:

  1. 和唯一每次Profile都属于一个(即一对一)。GradesAddressStudent
  2. AStudent必须具有 allProfile和数据(例如GradesAddress没有学生没有成绩)。
  3. 所有字段都可能发生更新,但配置文件数据大多保持不变。
  4. 我们基于 aStudent而不是通过查询地址或其他内容来访问数据(查询可以是“给我学生 John 的成绩”,或“给我学生 John 的个人资料和地址”等)。
  5. 所有字段加在一起都低于 DynamoDB 的 400kb 阈值。

问题是你会如何设计它?将所有数据作为单行/项目或将其拆分为Profile,GradesAddress项目?

0 投票
1 回答
197 浏览

amazon-web-services - DynamoDB 上聊天应用的单表设计,检查方向是否正确

我是 NoSQL 的新手,特别是 DynamoDB 单表设计。在互联网上浏览了很多关于单表设计的视频和文章,最后我为我计划在未来构建的聊天应用程序整理了一个小设计。

到目前为止我想到的访问模式是 -

  1. 通过用户 ID 获取用户详细信息。
  2. 获取用户参与的对话列表。
  3. 获取用户创建的消息列表
  4. 获取对话的所有成员
  5. 获取对话的所有消息

还想按日期范围访问对话的消息,到目前为止我还没有弄清楚那个。

根据下面的设计,如果我要提取对话的所有消息,那是否会在消息分区中的消息属性中提取实际消息?

这是我使用一些示例数据创建的模型的片段。如果我的方向正确,请告诉我。

单表设计 - 表布局

0 投票
1 回答
29 浏览

amazon-dynamodb - DynamoDB 表设计:我如何对需要所有“一”项和按某些属性排序的“多”项之一的一对多关系进行建模

我的整个职业生涯都在使用非规范化的关系数据库。为了实现一个单表设计,可以在类似“App Store”的个人项目上处理几个特定的​​访问模式,我很难忘记所有这些。

这是一个快速的 ERD。有一个由平台(iOS、Android)和捆绑标识符标识的 App 模型以及在创建新版本时使用的默认映射。每个 App 可以有 0 到多个版本,这些版本由版本号标识(这是一个连续的数值,并且在 App 的上下文中是唯一的)。一个版本具有 IsReleased 属性以及其他几个属性(如名称、发行说明、二进制路径等)。

访问模式

  1. 列出每个应用程序的最新版本。
  2. 列出给定平台的每个应用程序的最新版本。
  3. 列出 IsReleased 为 1 的每个应用程序的最新版本。
  4. 列出 IsReleased 为 1 的给定平台的每个应用程序的最新版本。
  5. 获取特定应用的最新版本。
  6. 获取 IsReleased 为 1 的特定应用的最新版本。
  7. 获取特定应用的所有版本。
  8. 获取 IsReleased 为 1 的特定应用的所有版本。
  9. 获取特定应用的默认属性。

我遇到了 1 到 4 的问题,这张桌子是我要去的地方。我很难使用 GSI,它会按排序顺序为我提供单个版本的所有应用程序项目。

PK sk 默认值 应用名称 版本 被释放 其他属性
app_ios_com.app.one defaults { ... json ... }
app_ios_com.app.one version_1 应用一 1 1
app_ios_com.app.one version_2 应用一 2 1
app_ios_com.app.one version_3 应用一 3 1
app_ios_com.app.two defaults { ... json ... }
app_ios_com.app.two version_1 应用二 1 1
app_ios_com.app.two version_2 应用二 2 0
app_ios_com.app.two version_3 应用二 3 0

例如,对于访问模式 1,我想要:

PK sk 默认值 应用名称 版本 被释放 其他属性
app_ios_com.app.one version_3 应用一 3 1
app_ios_com.app.two version_3 应用二 3 0

例如,对于访问模式 3,我想要:

PK sk 默认值 应用名称 版本 被释放 其他属性
app_ios_com.app.one version_2 应用一 3 1
app_ios_com.app.two version_1 应用二 1 1

我必须记住的一些数据限制:

  • 目前只有10到20个应用程序,但我需要能够支持数百个
  • 大多数应用程序将有 100 到 200 个版本,其中有 20 到 30 个发布版本。最大的应用程序有 1000 个版本,其中发布了 50 个。
  • 在后端,IsReleased 标志通常会从 0 切换到 1,但偶尔会从 0 切换到 1。
  • 平均版本项约为 2 KB。
  • IsReleased 为 1 的访问模式变化更频繁地使用。

我觉得解决方案就在我面前,但我不能指望它。

0 投票
2 回答
197 浏览

amazon-web-services - 在 Kotlin 中为 DynamoDB 建模复杂类型

我有一个需要读/写的 DynamoDB 表。我正在尝试使用 Kotlin 创建一个用于从 DynamoDB 读取和写入的模型。但我com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: MyModelDB[myMap]; could not unconvert attribute在跑步时不断遇到dynamoDBMapper.scanPage(...)。有时myMapMyListOfMaps相反,但我想这是通过迭代 Map 的键。

我的代码如下:

我正在使用该com.amazonaws:aws-java-sdk-dynamodb:1.11.500软件包,并且我dynamoDBMapper的初始化是DynamoDBMapperConfig.Builder().build()(以及其他一些配置)。

我的问题是我做错了什么,为什么?我还看到一些 Java 实现使用DynamoDBTypeConverter. 它更好吗,我应该改用它吗?

任何例子将不胜感激!