繁体   English   中英

DynamoDB - 新放置的项目不会在扫描中反映出来

[英]DynamoDB - Newly put items are not reflecting in scan

我有DynamoDB扫描的问题。 我使用putItem方法向表中添加了新项。

[[AmazonClientManager ddb] putItem:request];

但是当我尝试使用扫描方法使用扫描获取时,该项目不会出现在结果中。

DynamoDBScanResponse *response = [[AmazonClientManager ddb] scan:request];

我收到以下回复,

{Items :(),Count:0,ScannedCount:608,LastEvaluatedKey:{HashKeyElement:{S:U2575220130319062347000,N:(null),SS :(),NS:(),},RangeKeyElement:(null),}, ConsumedCapacityUnits:129,{requestId:3GVT8PJGV4VB45IUPUA6KIN9URVV4KQNSO5AEMVJF66Q9ASUAAJG}}

但是当我使用AWS控制台检查时,这些项目显示在表格中。 谁能让我知道可能是什么问题?

谢谢。

Scan API最终是一致的。 最终的一致性读取可能不会返回最近的更改。 有一点延迟(不超过几秒钟)。

查询API允许一致的选项。 如果这是您的选项,您可以使用查询。

另一种可能性是您可能尚未完成扫描结果的处理 - 需要重复扫描,直到LastEvaluatedKey为空。

http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html

将ConsistentRead设置为true对我有用:

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html#DDB-Scan-request-ConsistentRead

一个布尔值,用于确定扫描期间的读取一致性模型:

如果ConsistentRead为false,则从Scan返回的数据可能不包含其他最近完成的写操作(PutItem,UpdateItem或DeleteItem)的结果。

如果ConsistentRead为true,则保证扫描开始之前完成的所有写入操作都包含在扫描响应中。

ConsistentRead的默认设置为false。

如果有人遇到一致读取问题,意味着你期待它们,但它似乎并不总是有效,这是我的发现/解决方案......

  1. 假设您使用的是AWS Java SDK - com.amazonaws:aws-java-sdk-dynamodb
  2. 首先,我们进行了一个高速循环的单元测试,以便能够重新创建读取不一致性。
  3. 测试将读取特定行,更新它,并读回同一行以断言更新的值。


鉴于有3种方法可以获取数据:

  • mapper.load()
  • mapper.query()
  • mapper.scan()


“mapper.load()”使用映射器实例化时设置的映射器配置。 例如 - mapper.withConsistentReads(ConsistentReads.CONSISTENT)。

“mapper.query()”和“mapper.scan()”不尊重映射器的配置,而是仅使用DynamoDBQueryExpression和DynamoDBScanExpression输入来确定一致的读取。


解答:您需要使用expression.setConsistentRead(true),即使您的映射器具有.withConsistentReads(ConsistentReads.CONSISTENT)。 像这样...

public PaginatedScanList<T> getAllRowsFor() {
    final DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
    scanExpression.setConsistentRead(true);
    return mapper.scan(myClass, scanExpression);
}

您可以在此处看到AWS Java源代码,其中显示未使用映射器的配置 - com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper #createScanRequestFromExpression

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM