gpt4 book ai didi

java - DynamoDB 中的 PaginatedQueryList 和 QueryResultPage 有什么区别?

转载 作者:行者123 更新时间:2023-12-05 01:58:20 25 4
gpt4 key购买 nike

我目前正在使用 Java 和 DynamoDBMapper 使用 DynamoDB。我看到当我们使用 DynamoDBQueryExpression 时,我们可以使用 PaginatedQueryListQueryResultPage。如果我们使用下面的任何一种方法,我们必须使用,

query method - returns a [PaginatedQueryList][1]
queryPage method - returns a [QueryResultPage][1]

PaginatedQueryList 表示它将首先加载 1MB 的数据,如果我们遍历,那么它将在需要时加载下一页,而且这是分页的。但是 QueryResultPage 呢?它说它正在加载 1MB 的数据。但是如果我们迭代它呢?它会加载第二页还是只给我们 1MB 的数据?我找不到任何相关信息?此外,QueryResultPage 为我们提供了 LastEvaluatedKeyPaginatedQueryList 没有。那么有没有一种方法可以在 PaginatedQueryList 中获取 LastEvaluatedKey,或者如果我们需要获取该 key ,是否必须始终使用 QueryResultPage

并且也代替了下面的代码,

PaginatedQueryList<Data> data = dynamoDBMapper.query(Data.class, queryExpression);

如果我们使用下面的,

List<Data> data = dynamoDBMapper.query(Data.class, queryExpression);
data.size();

它会加载在数据库中找到的所有数据吗?如果我使用 stream() 而不是 data.size() 会加载所有吗?

最佳答案

长话短说:

  • QueryResultPage 不会延迟加载任何其他数据,只有 PaginatedQueryList 会这样做。
  • PaginatedQueryList 为您抽象出分页,这就是它不公开 key 的原因。如果您需要 key ,则需要将 queryPageQueryResultPage 结合使用。如果您需要的不仅仅是第一页,则必须自行请求其他页面。
  • .size() 会将所有数据加载到内存中,因为您需要这些数据才能对它们进行计数。
  • .stream() 可能会将所有数据加载到内存中,具体取决于您对流执行的操作。如果您说 .stream().limit(1) 则不会加载更多页面。但是如果你说 .stream().count() 那么所有页面都会被加载。

查看这 2 个的文档,PaginatedQueryList 似乎是一个对象,它试图从你的事实中抽象出来,即结果下面是分页的。

来自 https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/PaginatedQueryList.html (强调我的):

[...] Paginated results are loaded on demand when the user executes an operation that requires them. Some operations, such as size(), must fetch the entire list, but results are lazily fetched page by page when possible.

因此,如果您基本上不想处理分页,请使用query 方法。但请记住,如果您想返回所有结果(或知道它们的大小),您的应用程序最终仍需要翻阅结果

另一方面,QueryResultPage 更接近 DynamoDB API。你正在处理一个页面,你可以使用 getLastEvaluatedKey()获取用于下一个 setExclusiveStartKey 的参数(在你的 DynamoDBQueryExpression 上)

总结:

  • query 对用户更友好,因为它隐藏了显式分页,但如果您的结果包含许多页面,您的代码可能会变慢而您一开始并没有注意到,因为这些页面是延迟加载的。
  • queryPage 的意图更加明确。您必须手动加载每个页面,因此请考虑您是否真的需要所有数据,或者您是否不想进一步将分页任务卸载给您的客户端。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.Methods.html#DynamoDBMapper.Methods.queryPage阅读queryPage的官方文档时可以看到类似的描述(强调我的):

Queries a table or secondary index and returns a single page of matching results. As with the query method, you must specify a partition key value and a query filter that is applied on the sort key attribute. However, queryPage returns only the first "page" of data, that is, the amount of data that fits in 1 MB

关于java - DynamoDB 中的 PaginatedQueryList 和 QueryResultPage 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68593580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com