簡體   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