问题标签 [amazon-dynamodb-index]

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 投票
0 回答
515 浏览

node.js - 有没有办法在发电机查询操作中应用分页限制之前先应用 filterExpression。?

我发现 dynamodb 分页存在一个大问题。- 我使用以下参数执行查询操作

这给出的结果只有 4 个帖子。因为它读取了最新的 6 条记录,然后应用了最不常见的分页方式 filterExpression。前 6 条记录包含 2 条不匹配的条件记录。有什么办法可以克服这个

0 投票
1 回答
702 浏览

amazon-dynamodb - 是否可以更新作为 DynamoDB 中主键一部分的属性值?

我有“RefNumber”、“status”和“Date”的表格。“RefNumber”是分区键,“Status”是排序键所以,两者都是主键。

现在获取此记录后,我想用“1”更新“状态”。我有多个工作人员读取 DynamoDB 记录,只是为了避免任何 2 个工作人员处理相同的记录,我想使用 ConditionExpression 使用“1”获取和更新“状态”,如果更新成功,工作人员将处理否则它将跳过。

我的问题是,更新作为 dynamodb 中主键一部分的属性值是否是一个好的设计

0 投票
1 回答
504 浏览

amazon-dynamodb - 多对多关系:全局二级索引与邻接表

为了在 Dynamo DB 中表示多对多关系,我经常看到两种方法:全局二级索引 (GSI) 和邻接列表。现在我的问题是,什么时候使用哪个?

GSI 的使用基本上是指翻转分区键和排序键,以便在这两种情况下都可以有效地查询数据。示例显示类似 Online Game with Players 之类的内容,例如

我假设这些都是同一游戏平台内的所有会话,即与有限数量的玩家匹配。

这一切似乎都是直截了当且合乎逻辑的实现......直到数据变得更加复杂。如果 Players 和 Games 都有自己的属性集怎么办?假设一个游戏具有启动时间的属性,而玩家具有诸如用户名和个人游戏分数之类的属性。这些如何投影到 Table 和 GSI 上?

例如,所需的预测将是这样的

让玩家参与游戏

获取玩家参与的游戏

或者这是需要使用邻接列表模式的边界情况?从我读过的关于邻接列表的一般情况来看,实现简单的多对多关系似乎相当复杂,就像上面的在线游戏示例一样。我的理解是,它旨在对具有多个相互链接的节点的图形进行建模。当然,在这种情况下,节点将是 Games 和 Players(可能还有模型中需要的任何其他实体)

TLDR:所以归结为最后一个问题,当实体之间具有多对多关系时,具有自己的一组属性,邻接表是要查找的选项,还是模型的数据结构不那么复杂?

0 投票
1 回答
72 浏览

amazon-web-services - 如何按属性对 DynamoDB 行进行排序

我有下表:

每次有人购买商品时,我都想增加Purchases. 然后我想查询表以获取购买最多的商品(ItemUUID按 DESC 排序Purchases

我想我可以创建一个主键,并使用排序键ItemUUID创建一个全局二级索引。然后查询 GSI where ,将排序键留空,降序排序。TypePurchasesType = book

这是行不通的。DynamoDB 是否可以使用我的用例?

0 投票
1 回答
605 浏览

amazon-web-services - 何时值得在 DynamoDB 中使用本地二级索引进行权衡?

我已经阅读了二级索引的指南,但我不确定快速搜索的能力何时超过了扫描属性的劣势。让我给你举个例子。

我正在为用户保存游戏进度数据。PK 是用户 ID。我需要能够:

  1. 了解有关特定游戏的用户进度。

  2. 为用户获取所有已完成/正在进行的游戏。

因此,我可以将我的 SK 设计为progress_{state}以便能够快速查询所有游戏的进度(状态表示开始/完成),或者我可以将我的 SK 设计为progress_{gameId}以便能够查询给定游戏的进度快速地。但是,我不能同时使用 SK。当我选择一个时,另一个操作将需要扫描。

因此,我正在考虑使用 LSI,这将增加整个表的开销,正如亚马逊在此处指出的那样:

每个二级索引都意味着 DynamoDB 需要做更多的工作。当您在具有本地二级索引的表中添加、删除或替换项目时,DynamoDB 将使用额外的写入容量单位来更新相关索引。

我估计最多有数千种类型的游戏,我想知道是否值得使用 LSI,或者在我选择的其他操作中使用扫描是否更好。

有没有人对此类问题有任何实际经验?我无法找到有关此主题的任何内容。

0 投票
1 回答
3796 浏览

amazon-dynamodb - DynamoDB查询使用二级索引,如何使用不同的key进行查询

我正在使用带有 dynamodb [在本地] 的无服务器框架。尝试使用二级索引字段进行查询。目标是像我们在 Mongo 中的基本查找查询中那样使用很少的键进行查询:{url:'<Somevalue>'}或者可能是这样{url:<somevalue>,ha:<somevalue>}

我目前使用的表配置:

无服务器.yml

有了这个,目前我只能用id字段搜索,

1> 使用不同字段进行查询需要进行哪些更改?[这是二级索引,没有id在查询中使用]

2> 如何搜索多个属性?[即:{url:<somevalue>,ha:<somevalue>}]

我正在使用的查询:

查询的输出:

0 投票
2 回答
134 浏览

amazon-web-services - 在单个 DynamoDB 表上使用多个全局索引是否有效?

存在如下表所述的数据集。下表中使用的 Sr.no 仅供参考

查询类型

  1. 输入id和如果data-typea-type返回字段tis,b.id,id_type2参考sr.no=1
  2. 输入id和如果data-typeb-type返回字段var_2引用sr.no=2
  3. 输入返回id_type2字段id,tis,b.idsr.no=1,3
  4. 输入data-type返回id基于tis between 12345 and 12347

笔记

  • sr.no=1,3a-type数据每天插入 100k 次,具有唯一性id
  • sr.no=2or b-typeof data 是一组固定的数据。

对于这样的数据集,以下关键方法是否有效?是否可以遵循任何其他方法来存储和检索 DynamoDB 中的数据?

Partition Key = id处理查询 1,2。

GSI1=id_type2 and GSI1SK=id照顾查询 3

GSI2=data-type and GSI2SK=tis照顾查询 4

0 投票
1 回答
47 浏览

java - AmazonDynamoDBv2 查询无法识别 GSI

当我在 GSI 上查询时,我使用 QueryRequest 实施 AmazonDynamoDBv2 的 AmazonDynamoDBAsync.queryAsync 时返回代码 400“查询条件缺少关键架构元素...”。

我尝试使用 DynamoDBAttribute 名称 ("myAttr") 和 GSI 的实际索引名称 ("idx_global_myAttr") 并收到相同的错误代码。这是针对 Docker 映像“amazon/dynamodb-local”运行的。

我已阅读有关 GSI 的 DynamoDB 文档,但我无法弄清楚如何在此查询中定位二级索引。它似乎只响应主索引。

表说明:`

查询请求:

0 投票
0 回答
72 浏览

amazon-web-services - DynamoDB 可扩展性:如何设计分区键与索引

https://aws.amazon.com/blogs/database/choosing-the-right-dynamodb-partition-key/中所述,分区键应该是唯一的。

我正在构建一个需要存储主题订阅的应用程序(想想聊天应用程序)。数以百万计的订阅需要存储在数据库中,并且当应该向订阅者发送消息时,应用程序需要从表中获取所有订阅者。

天真的方法

天真的方法是,设计一个主键,如:

SUBSCRIPTIONS|<topic>

然后,排序键将<topic>根据订阅时间、地区和其他一些标准对所有订阅进行排序。

不幸的是,分区键到目前为止并不是唯一的,但它可以让您在眨眼间获取所有订阅。

此外,考虑到最大表大小设置了一个分区中可以保存的订阅数量的硬性限制,因此一般来说这个设计的最大订阅数量。因此,这旨在使可扩展性失败。

选择

设计它的另一种方式是使用类似的东西

SUBSCRIPTIONS|<clientId>

为每个客户端单独保存每个订阅并将其移动<topic>到排序键中。这将允许更好地扩展表(分区),但需要扫描以找到某个<topic>.

索引在这里可能会有所帮助,但是索引如何在多个分区上扩展?它将如何表现?

0 投票
1 回答
3522 浏览

go - 并行执行 DynamoDB 查询(全局二级索引的 BatchGetItems)

这里的想法是并行运行多个 DynamoDB 查询,因为查询是在 GSI 上运行的。截至目前,BatchGetItems不支持通过索引进行查询,推荐的方法是并行查询数据。我正在使用带有 wg 的 go 例程来并行处理例程的执行。

函数的输入是带有 ID 的字符串数组,输出是 ID 的属性。

函数在本地运行时没有问题,但是在AWS-Lambda上运行时,返回的数据一直在增长;

IE; 输入 2 项应输出 2 项。如果函数在 AWS-Lambda 上测试,

  • 函数第一次返回 2 项
  • 第二次返回 4 个项目(相同项目重复 2 次)
  • 第三次返回 6 个项目(相同项目重复 4 次)

等等。这是代码片段。每次运行 lambda 时,是否有一些未正确处理的东西让 lambda 输出额外的数据集?