我从AWS documentation
引用以下内容具有相同分区键值的项目按排序键按排序顺序存储。如果排序键数据类型为Number,则结果将按数字顺序存储。对于String类型,结果按ASCII字符代码值的顺序存储。对于Binary类型,DynamoDB将二进制数据的每个字节视为无符号。
假设一个表具有全局二级索引(没有相关范围键)将存储相同GSI值的数据的顺序是什么?
DynamoDB是否根据某些属性维护某些顺序,同时将数据存储在表中(仅具有分区键且没有在特定分区键上定义的范围键)具有相同的分区键值(这仅适用于GSI)只是分区键?
例如在下表中将有任何订单,其中3个项目与GameTitle" GalaxyInvaders"会存储在表格中吗?
(GSI) (HashKey)
——————————————————————————————————————————
GameTitle | Score | UserId
——————————————————————————————————————————
AlienAdventure | 23 | 101
AttackShip | 45 | 102
GalaxyInvaders | 34 | 104
GalaxyInvaders | 45 | 106
GalaxyInvaders | 56 | 107
我问这个是因为我在GSI上用 lastEvaluatedKey 进行查询(这个GSI没有范围键,表有一个单独的范围和哈希键),我想知道我是否可以进入这个方向即获得下一页结果并使用 ScanIndexForward 获取上一页结果?
如果保留了一些订单,那么我似乎可以,但我找不到支持性文档。从我迄今为止所做的查询支持我可以进入两个方向。
答案 0 :(得分:0)
如果没有排序键,DynamoDB将以某些顺序存储一个分区键的数据。这个订单是什么,你不能也不应该假设。
我的意思是,GameTitle
的所有行都等于' GalaxyInvaders'将按某些顺序,但您不知道该订单到底是什么。因此,您无法假设行将按Score
或UserId
进行排序。这种假设只能用于排序键。
关于Scan
的实际问题:是的,你可以双向进行。如果您有a
,b
和c
行ScanIndexForward : true
,则可以假定您将返回c
,{{1} }和b
与a
。