【发布时间】:2016-09-06 10:40:48
【问题描述】:
如果任何熟悉 DynamoDB 工作原理的人提供帮助,我将不胜感激。
我需要对大型 DynamoDB 表执行扫描。我知道 DynamoDBClient 扫描操作仅限于 1 MB 大小的返回数据。相同的限制是否适用于 Table.scan 操作?问题是 Table.scan 操作返回类型为“ItemCollection<ScanOutcome>”的输出,而 DynamoDBClient 扫描返回 ScanResult 输出,我不清楚这些操作是否以类似的方式工作。
我已经检查了这个例子:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ScanJavaDocumentAPI.html,但它不包含任何关于使用最后返回的密钥的提示。
我的问题是: 如果我使用 Table.scan,在 lastreturnedkey 为空之前,是否还需要循环进行扫描调用?如果是,我如何获得最后一个密钥?如果没有,我该如何强制分页? 任何指向代码示例的链接将不胜感激。我花了一些时间在谷歌上搜索示例,但其中大多数使用的是 DynamoDBClient 或 DynamoDBMapper,而我需要使用 Table 和 Index 对象。
谢谢!
【问题讨论】:
-
你说你有一个非常大的表,但你正在寻找特别的东西(或一组),所以你可以开始过滤你的结果(我猜这很明显)。如果相同还不够大:是的,您必须在下一批中继续搜索。
-
我不确定我是否理解您的评论。我确实有一个过滤器表达式可以过滤掉我的扫描结果,但这并不能保证我的结果永远不会超过 1Mb
-
所以,需要扫描下一批;您可以通过“玩”
Segments和/或TotalSegments来并行进行;在这种情况下,从请求返回的LastEvaluatedKey的值必须在后续扫描操作中用作具有相同段ID 的ExclusiveStartKey。它很像 SQL,但速度更快! -
Table.scan 输出类型中没有“LastEvaluatedKey”参数
-
为什么 pages() 不能为你工作docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/…
标签: java amazon-dynamodb aws-sdk full-table-scan