当前位置: 首页 > 知识库问答 >
问题:

在没有GSI范围键的DynamoDB表中为相同GSI值存储数据的顺序

闻人锦
2023-03-14

我从AWS文档中引用以下内容

具有相同分区键值的项按排序键排序的顺序存储。如果排序键数据类型为Number,则结果按数字顺序存储。对于String类型,结果按ASCII字符代码值的顺序存储。对于Binary类型,DynamoDB将二进制数据的每个字节视为无符号。

假设一个表有一个全局二级索引(没有相关的范围键),相同GSI值的数据将以什么顺序存储?

(GSI)                           (HashKey)
——————————————————————————————————————————
GameTitle           | Score    | UserId
——————————————————————————————————————————
AlienAdventure      | 23       | 101
AttackShip          | 45       | 102
GalaxyInvaders      | 34       | 104
GalaxyInvaders      | 45       | 106
GalaxyInvaders      | 56       | 107

我这样问是因为我在GSI上使用lastEvahtml" target="_blank">luatedKey进行查询(该GSI没有范围键,表有一个单独的范围和哈希键),我想知道我是否可以使用ScanIndexForward在获取下一页结果和获取上一页结果的方向上进行查询?

如果维护了一些秩序,那么我似乎可以,尽管我找不到支持性的文档。从我提出的查询到现在,支持我可以在两个方向上。

共有1个答案

秋建义
2023-03-14

在没有排序键的情况下,DynamoDB将以某种顺序存储一个分区键的数据。那个顺序是什么,你不能也不应该假设。

我的意思是,所有gametitle等于'galaxyinvaders'的行将按照某种顺序排列,但您不知道该顺序到底是什么。因此,不能假定行将按得分Userid排序。这种假设只能用于排序键。

至于您在扫描上的实际问题:是的,您可以从两个方面进行。如果使用ScanIndexForward:true获得了行ABCBAscanIndexForward:false

 类似资料:
  • 我在DynamoDB中有一个表,如下所示: 我在表中添加了一个关于“category”的全局二级索引,它工作得很好,并在item Count下给出了表中的条目数。 然后我意识到,我实际上需要能够在一个特定的“类别”中搜索,但按“userrating”排序。 谢谢你的帮助。

  • 假设我在DynamoDB中有一个表,如果我的GSI的键基于一个属性,但是我删除或更改了该属性,那么GSI表的行为是什么?它会删除并更改GSI表中的键吗? TableName:哺乳动物表格分区键:哺乳动物名称属性1:哺乳动物数量腿属性1:哺乳动物大小 GSI名称哺乳类动物数legssi分区键:哺乳类动物数legs排序键:哺乳类大小 现在假设我有类似于哺乳动物表的数据: 哺乳动物名称:人,哺乳动物腿数

  • 在我的Dynamodb表中,该表包含分区键“id”和“created_at”作为排序键的“batchs”和一个带有“batch_status”的GSI 假设我想查询状态为“正在进行”、“新建”、“已完成”的批。

  • 正如这个问题中所述,我假设您不能把更新日期之类的东西作为表的排序键,因为如果您更新,您将创建一个重复的记录。 此外,我总是假设同样的事情也适用于使用更新日期的GSI。但在我的场景中,我将更新日期作为GSI上的排序键,并且在更新原始项时不会创建新记录。 综上所述,属性和关键模式包括: 属性: Id MySortKey MyComputerdField 更新日期 表格: 分区键:Id 排序键:MySo

  • 说在AWS DynamoDB,我有一个表: 我的GSI会投影原始表的所有属性。 现在我想最终得到一组数据结构{“Alice”,“Bob”,“John”,“Michael”}。 我怎样才能做到这一点?似乎扫描操作本身不能选择唯一值,这意味着在我的情况下,扫描操作不能更快,对吗?然后,在我得到一个检索到的所有项目的列表之后,我需要对这个列表进行操作,以提取列的唯一值,这是唯一的方法吗? 所以我想我需要

  • 在我的DynamoDB表中,有HashKey=ID和GSI=Type。我需要获取特定类型(GSI)的所有hashKeys(ID)。 在这种情况下,获取给定类型的所有ID的有效方法是什么?我的DynamoDB表不会很大。