我从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在获取下一页结果和获取上一页结果的方向上进行查询?
如果维护了一些秩序,那么我似乎可以,尽管我找不到支持性的文档。从我提出的查询到现在,支持我可以在两个方向上。
在没有排序键的情况下,DynamoDB将以某种顺序存储一个分区键的数据。那个顺序是什么,你不能也不应该假设。
我的意思是,所有gametitle
等于'galaxyinvaders'的行将按照某种顺序排列,但您不知道该顺序到底是什么。因此,不能假定行将按得分
或Userid
排序。这种假设只能用于排序键。
至于您在扫描
上的实际问题:是的,您可以从两个方面进行。如果使用ScanIndexForward:true
获得了行A
、B
和C
、B
和A
scanIndexForward: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表不会很大。