簡體   English   中英

DynamoDB 分頁 - 知道什么時候沒有更多結果

[英]DynamoDB pagination - knowing when there is no more results

文檔指出:

缺少 LastEvaluatedKey 是知道您已到達結果集末尾的唯一方法

但是,如果您有 10 個項目並且您正在查詢 10 個項目,您將獲得帶有 LastEvaluatedKey 的結果集。 但是之后沒有更多的項目。

是否有一種可靠的方法可以真正知道何時到達結果集的末尾?

當您指定限制(根據該問題為10)時,它會找到限制所提供的項目數,並且看起來不會超出限制。

由於項目為10,限制為10,因此每次都可以按限制查找元素。

第二次嘗試讀取項目時,它在表中找不到任何項目,因此返回null。 您將需要while循環,如下所示:

List<QueryResult> queryResultList = new ArrayList<>();

// Since query returns only max 1MB of items at a time,
// use of this flag tells if no more such elements are present in db.
Map<String, AttributeValue> lastKeyEvaluated = null;

Map<String, AttributeValue> expressionAttributeValue = new HashMap<>();
expressionAttributeValue.put(":primary_key_value", new AttributeValue().withS(primary_key_value));

do {
    QueryRequest queryRequest = new QueryRequest()
            .withTableName(this.getDynamoTable().getTableName())
            .withIndexName(Constants.Table.INDEX_NAME)
            .withKeyConditionExpression("primary_key = :primary_key_value")
            .withExpressionAttributeValues(expressionAttributeValue)
            .withExclusiveStartKey(lastKeyEvaluated);
    QueryResult result = this.getAmazonDynamoDBClient().query(queryRequest);
    queryResultList.add(result);
    lastKeyEvaluated = result.getLastEvaluatedKey();
} while (lastKeyEvaluated != null);

我知道這個問題已有 4 年歷史,但我也遇到過這個問題,這就是我“解決”它的方式:

在我的例子中,我使用最后評估的鍵對結果進行分頁,並且我通過一個變量(我們稱之為 pageSize)給出查詢大小。

使用問題的示例,我們將給 function pageSize = 10。

當結果與 pageSize 完全相同時,我們如何緩解 lastEvaluatedKey 問題?

我們查詢 pageSize + 1 個項目,如果 response.length == pageSize + 1,這意味着我們至少有 1 + X 個額外的項目,這意味着頁面更多。 然后我們檢索 pageSize 項的 lastEvaluatedKey(記住我們檢索了 pageSize + 1 項)。 如果有 response.length < pageSize 則沒有 lastEvaluatedKey 要傳遞

摘要示例:我們想要一個包含 10 個項目的頁面。 然后我們查詢 11 項。 兩種可能性:

  • 我們得到 <= 10 個項目,這很酷,我們檢索沒有 lastEvaluatedKey 的項目,因為沒有更多項目 xd
  • 我們得到 11 個項目,這意味着需要更多的頁面,所以我們檢索第 10 個項目的 lastEvaluatedKey。 這個的一個小缺點是我們需要“制作”這個項目的 lastEvaluatedKey,因為它不會對應於 dynamoDB 響應給我們的同一個 lastEvaluatedKey(記住我們正在做一個 10 + 1 查詢,所以如果有lastEvaluatedKey 它將是第 11 項)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM