2016-02-26 70 views
0

我想对dynamoDB表进行全面扫描。这是我正在使用的代码:DynamoDB扫描返回不完整的数据

private void fetchItems(AmazonDynamoDBClient client) { 
    int count = 0; 
    ScanResult result = null; 
    ScanRequest req = new ScanRequest(); 
    req.setTableName(this.tableName); 
    do { 
     if (result != null) { 
      req.setExclusiveStartKey(result.getLastEvaluatedKey()); 
     } 
     result = client.scan(req); 
     List<Map<String, AttributeValue>> rows = result.getItems(); 
     count += rows.size(); 
    } while(result.getLastEvaluatedKey() != null); 
     System.out.println("Result size: " + count); 
    } 
} 

问题是此函数返回表中的273项的207。我检查了指标,并没有限制请求。什么可能是这个不完整结果的原因?

+0

如果在循环中总结result.getItems()的大小,它是否会生成相同的数字?他们都有属性“STUDENT_ID”吗?这是提供问题的确切代码,还是问题的简化版本? (如果它是一个简化版本,你可能已经删除了这个bug)。作为一个说明,节流会抛出一个异常,不会给失踪的结果。 – Krease

+0

此外,您的客户是否设置为使用您期望的凭证和区域?您可能在不同地区或账户的表格中得到不同的结果,而不是您正在验证的结果(即:beta vs prod账户,或us-east-1 vs us-west-1)。 – Krease

+0

@Chris我编辑了代码以显示出现问题的确切代码。至于凭证的事情,我会在这方面回复你。 – rohan013

回答

0

问题是我正在看错误的地区。我正在阅读的表格是在我看欧盟期间的NA中。感谢@Chris为此。

+0

很高兴有帮助。你的代码看起来很好,我以前也做过同样的事情:) – Krease