问题标签 [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.
amazon-web-services - 类似 IAM 的服务的 DynamoDB 多对多关系
因此,我尝试构建像 Amazon IAM 一样的 IAM 服务,但更简单。公司有用户、组和策略。正如您可以想象的那样,用户、组和策略彼此之间具有多对多的关系。行动:
- 可以将策略添加到组
- 可以将用户添加到组或策略
现在的问题是,如果用户尝试登录,那么我必须提出 3 个请求:
- 从用户分区获取组和策略
- 获取该列表中的所有策略表单组
- 获取所有政策
然后我必须为每次登录做 3 次往返。有一个更好的方法吗?或以不同的方式设计关系。
amazon-web-services - DynamoDB 一对一
你好 stackoverflow 社区,
这个问题是关于对涉及的多个实体的一对一关系进行建模。
假设我们有一个关于学生的应用程序。每个Student
都有:
Profile
(姓名、出生日期……)Grades
(数学成绩,地理......)Address
(城市,街道......)。
要求:
- 和唯一每次
Profile
都属于一个(即一对一)。Grades
Address
Student
- A
Student
必须具有 allProfile
和数据(例如Grades
,Address
没有学生没有成绩)。 - 所有字段都可能发生更新,但配置文件数据大多保持不变。
- 我们基于 a
Student
而不是通过查询地址或其他内容来访问数据(查询可以是“给我学生 John 的成绩”,或“给我学生 John 的个人资料和地址”等)。 - 所有字段加在一起都低于 DynamoDB 的 400kb 阈值。
问题是你会如何设计它?将所有数据作为单行/项目或将其拆分为Profile
,Grades
和Address
项目?
amazon-dynamodb - DynamoDB 表设计:我如何对需要所有“一”项和按某些属性排序的“多”项之一的一对多关系进行建模
我的整个职业生涯都在使用非规范化的关系数据库。为了实现一个单表设计,可以在类似“App Store”的个人项目上处理几个特定的访问模式,我很难忘记所有这些。
这是一个快速的 ERD。有一个由平台(iOS、Android)和捆绑标识符标识的 App 模型以及在创建新版本时使用的默认映射。每个 App 可以有 0 到多个版本,这些版本由版本号标识(这是一个连续的数值,并且在 App 的上下文中是唯一的)。一个版本具有 IsReleased 属性以及其他几个属性(如名称、发行说明、二进制路径等)。
访问模式
- 列出每个应用程序的最新版本。
- 列出给定平台的每个应用程序的最新版本。
- 列出 IsReleased 为 1 的每个应用程序的最新版本。
- 列出 IsReleased 为 1 的给定平台的每个应用程序的最新版本。
- 获取特定应用的最新版本。
- 获取 IsReleased 为 1 的特定应用的最新版本。
- 获取特定应用的所有版本。
- 获取 IsReleased 为 1 的特定应用的所有版本。
- 获取特定应用的默认属性。
我遇到了 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 的访问模式变化更频繁地使用。
我觉得解决方案就在我面前,但我不能指望它。
amazon-web-services - 在 Kotlin 中为 DynamoDB 建模复杂类型
我有一个需要读/写的 DynamoDB 表。我正在尝试使用 Kotlin 创建一个用于从 DynamoDB 读取和写入的模型。但我com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: MyModelDB[myMap]; could not unconvert attribute
在跑步时不断遇到dynamoDBMapper.scanPage(...)
。有时myMap
会MyListOfMaps
相反,但我想这是通过迭代 Map 的键。
我的代码如下:
我正在使用该com.amazonaws:aws-java-sdk-dynamodb:1.11.500
软件包,并且我dynamoDBMapper
的初始化是DynamoDBMapperConfig.Builder().build()
(以及其他一些配置)。
我的问题是我做错了什么,为什么?我还看到一些 Java 实现使用DynamoDBTypeConverter
. 它更好吗,我应该改用它吗?
任何例子将不胜感激!