有关DynamoDB中主键和排序键的问题

时间:2016-03-12 17:07:18

标签: amazon-web-services amazon-dynamodb nosql

我知道我们不能将DynamoDB用作常规关系数据库,但我感觉我的一些用例可以使用DynamoDB的额外功能进行建模。

我正在扩展这里的文档示例:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html

如果我将我的表格建模为:

UserID    MessageID    MessageMetaData MessageRetried

U1          M1              XYZ1            True

U1          M2              XYZ2            True

U1          M3              XYZ3            False

U2          M1              ABC1            True

U2          M2              ABC2            False

U3          M1              QWE1            False

U3          M2              QWE2            True

如果我将分区(主)密钥设为UserID字段,将排序密钥设为MessageID。

我理解如果只查询UserID U1,我会得到包含所有这些项[{U1,M1,XYZ1},{U2,M2,XYZ2},{U3,M3,XYZ3}]的列表。在Java高级API中执行此操作的最佳方法是什么?

此外,如果我同时传递UserID和MessageId,我应该能够获得该项目。

现在,如果我假设我在MessageRetried上创建一个GlobalSecondaryIndex,那么根据我的理解,我可以获取值为true的所有项目,但这受到页面大小的限制,有没有办法对此响应进行分页?

谢谢, 阿比尔

1 个答案:

答案 0 :(得分:1)

仅使用分区键称为Query,并且分区和排序键都称为Get,因为您拥有项目的完整主键。

如果查询大量项目,则按定义获得分页结果。这意味着如果你继续迭代它,你最终将获得所有元素。