问题标签 [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 回答
30 浏览

amazon-web-services - 有没有比使用两个全局二级索引 (GSI) 更好的方法来模拟这种访问模式?

我正在尝试找出应用程序的数据模型和访问模式,以跟踪不同领域(牧场)之间的动物运动。有如下运动记录:

对于一个特定的领域,例如 FIELD#A,我想知道进出该领域的所有运动、运动的日期和动物的数量。结果应如下所示:

可能的解决方案和尝试:

  1. 带有PK=FROM, SK=TO. 如果我用 查询 GSI PK=FIELD#A,这只会给出图片的一半,即来自 FIELD#A的运动。我无法获取到 的 FIELD#A动作。

  2. 一种复合属性,例如在 GSI 中FIELD#A#FIELD#B用作。PK遇到与尝试 1 相同的问题。

  3. 两个 GSI。GSI1 有PK=FROM,GSI2 有PK=TO。我可以查询 GSI1PK=FIELD#A并进行一些后处理 ( groupby, count) 以获得部分结果。然后我可以查询 GSI2PK=FIELD#A并进行后处理,得到其余的结果。这看起来可行,但需要两个 GSI 和两个查询。我不能重载一个 GSI,因为正在使用的两列都来自同一个项目。

  4. 我宁愿避免扫描整个表格并过滤结果的某种组合,因为整个表格中可能有 50,000 多个项目。

我可以看到如何使用两个 GSI 来做到这一点,但最有效的方法是什么?

0 投票
1 回答
36 浏览

amazon-dynamodb - 用于检索公共和私人聊天消息的 DynamoDB 单一查询

在选择 DynamoDB 分区键和排序键以检索聊天中的所有公共和私人消息时需要一些建议。

在同一个聊天室中,用户可以向特定的人发送公共消息和私人消息。

DynamoDB 模型:

我在选择将在单个查询中返回这两种类型的消息的主键时遇到困难。

0 投票
2 回答
162 浏览

nosql - 根据日期与父对象一起查询一对多关系的子对象

我的发电机表中有两个实体:用户和订单。

每个user都有0..*订单,每个order都有一个相关user的。Everyorder还有一个orderDate属性,用于描述下订单的时间。我当前的表格结构如下,可以有效地检索特定用户的所有订单:

我现在有第二种访问模式,我想查询在特定日期(例如2020-05-10)放置的所有订单(无论用户如何)以及放置它们的用户

我正在努力在我的表格设计中处理这种访问模式。GSI 和不同的主键似乎在这里都不起作用,因为我要么必须每天复制每个用户项目,要么不能与用户一起查询订单。

我的问题有一个优雅的解决方案吗?

0 投票
1 回答
124 浏览

amazon-dynamodb - 使用动态值对 DynamoDB 中的项目进行排序?

我在一张桌子上有数千个项目。每个项目都有一个数字属性score。我想做的事:

  1. 给定一些targetScore,选择所有项目targetScore - n <= score <= targetScore + n(我让这部分工作)。
  2. 仅返回按 ASC 顺序排列的第一个j元素j := ABS(targetScore - score)

由于表有点大,并且只会随着时间的推移而增长,我希望有一种方法可以将上面的第 2 步委托给 DynamoDB 引擎。我目前正在从第 1 步中选择所有项目 ID,正在为第 2 步进行计算,然后在后续查询中选择结果项目。

0 投票
1 回答
434 浏览

amazon-dynamodb - 如何在不指定 gsi 键的情况下创建 dynamo db 项目

我正在使用使用 gsi 的 dynamo db 表,因此我可以通过附加属性进行查询(如果存在)。此属性将在流程中更新,因此所有项目在流程开始时都没有此属性。此属性在添加到项目时设置为 gsi 的主键。

除了指定 gsi 的主键我无法插入新项目之外,一切都按预期工作。如果尚未设置其主键,我希望 gsi 忽略该项目。在指定投影属性时,我认为使用 INCLUDE 选项可以做到这一点。显然我在这里弄错了,但我也不知道如何解决这个问题。

非常感谢任何帮助,而且我将不得不坚持使用 dynamo db,所以包括这个 db 在内的每一个提示都会有很大帮助!

编辑: 为了澄清 - 这些是我的属性:

  • id(主键:必填)
  • 名称(属性)
  • 年份(属性)
  • gsi_id(GSI 主键:可选)

我想添加一个带有以下字段的项目:

  • id(主键:必填)
  • 名称(属性)
  • 年份(属性)

然后添加 gsi_id 字段。

0 投票
1 回答
49 浏览

nosql - 如何在 DynamoDB 中为制造商建模

我来自关系数据库背景,我正在努力使用单个表的概念来表示我在 DynamoDB 中的所有数据

我的应用程序有制造商,他们允许他们的员工访问我的门户 CRM(制造商用户)。用户然后将他们自己的客户添加到系统并记录和记录他们的所有订单。

  • 获取制造商()
  • 获取制造商用户()
  • 获取制造商客户()
  • GetManufacturerCustomersOrders()

制造商永远不会看到其他制造商客户的订单。

我了解 PK 和 SK 的基础知识,我的问题是……真的吗?这真的是单桌吗?

表客户帐户

  • 制造商(Name, logo etc)
  • 制造商用户(Users of that Manufacturer that access my system i.e. email, role)
  • 制造商的客户(custID,他们所属的制造商名称)
  • 客户交易数据(很多)

鉴于上述情况,您将如何在 DynamoDB 中建模?

访问模式故事

  • 按用户查询制造商(登录名、名称) SK ManufacturerID
  • 按制造商 ID 获取所有客户 ID 和名称 按用户 ID 过滤
  • 获取按 CustomersID 和 ManufacturerID 过滤的所有订单
  • 获取按 OrdersID 和 CustomersID 过滤的所有 Ordered Items
0 投票
1 回答
396 浏览

amazon-dynamodb - DynamoDB 项目集合到java对象

我想将 ItemCollection 转换为我的 java pojo 对象。我希望目前通过以下方式这样做。最好的方法是什么?

在这里我得到了 ItemCollection 。现在我将把它转换成我的 java pojo :-

有没有办法像我们在 mysql 中那样直接将 dynamodb 获取值(ItemCollection)转换为 java pojo ?为什么我总是会得到 json 然后隐蔽到 pojo 。我们不会在 mysql 或 oracle DB 等其他数据库中这样做。

文本.java

0 投票
0 回答
180 浏览

java - DynamoDB Mapper 用于具有多个条件的条件保存

我一直在尝试使用 DynamoDB 映射器来创建保存表达式。我想保存一条记录

  1. 特定的属性值不存在。或者
  2. 该属性值应大于特定值。

所以我为它创建了一个表达式,但它抛出了IllegalArgumentException.

这是我得到的那种例外。

我想知道我是否遗漏了什么或有什么问题?

编辑

看起来我不能在两个内部条件之间使用 OR 操作。是否可以以某种方式进行 OR-ing?提前致谢。

0 投票
1 回答
57 浏览

amazon-dynamodb - 使用 dynamodb 在嵌套数组值上创建索引

我将以下数据存储在名为 的 DynamoDB 表中elo-history

我有 2 个索引,guildId-recordedAt-index并且gameId-recordedAt-index. 论文允许我查询这些字段。 在此处输入图像描述

我正在尝试为results[].playerIds[]. 我希望能够对记录进行查询,playerId=abc1并像 guildId 和 gameId 一样对这些记录进行排序。DynamoDB 是否支持类似的东西?我是否需要重组数据或以两种不同的格式保存数据以支持这种类型的查询?

像这样的东西。player-elo-history除表外还调用了新elo-history表。这将按 playerId 存储游戏列表

0 投票
1 回答
130 浏览

java - DynamoDB 本地中的日期范围查询

我正在使用本地 DynamoDB 来测试服务。我需要找到从给定日期起过去 12 个月的所有 MedicalRecordId。我正在尝试使用 DynamoDB 映射器进行查询。

以下是模型类:

我正在从文件中读取 JSON 格式的测试数据并将其写入 DynamoDB。

以下是我尝试查询本地 dynamoDB 的方式:

以上是给出以下异常。

我的代码有什么问题?