H A*_*ala 6 java amazon-dynamodb dynamodb-queries
我目前正在使用 Java 和 DynamoDB 来工作DynamoDBMapper
。我看到当我们使用时DynamoDBQueryExpression
我们可以使用PaginatedQueryList
or QueryResultPage
。如果我们使用其中任何一个,下面是我们必须使用的方法,
query method - returns a [PaginatedQueryList][1]
queryPage method - returns a [QueryResultPage][1]
Run Code Online (Sandbox Code Playgroud)
PaginatedQueryList
说它会首先加载 1MB 的数据,如果我们迭代,那么它会在需要时加载下一页,而且这是分页的。但是关于QueryResultPage
?它说正在加载 1MB 的数据。但如果我们迭代它呢?它会加载第二页还是只给我们 1MB 的数据?我找不到任何相关信息?并且QueryResultPage
还给了我们LastEvaluatedKey
但PaginatedQueryList
不是。那么有没有一种方法可以进入,LastEvaluatedKey
否则PaginatedQueryList
如果我们需要获取该密钥,我们是否必须始终使用QueryResultPage
?
并且也代替以下代码,
PaginatedQueryList<Data> data = dynamoDBMapper.query(Data.class, queryExpression);
Run Code Online (Sandbox Code Playgroud)
如果我们使用以下内容,
List<Data> data = dynamoDBMapper.query(Data.class, queryExpression);
data.size();
Run Code Online (Sandbox Code Playgroud)
它会加载数据库中找到的所有数据吗?如果我使用stream()
而不是data.size()
它会加载全部怎么办?
长话短说:
QueryResultPage
不会延迟加载任何附加数据,只PaginatedQueryList
会这样做。PaginatedQueryList
为您抽象出分页,这就是它不公开密钥的原因。如果您需要密钥,则需要使用queryPage
with QueryResultPage
。如果您需要的不仅仅是第一页,您必须自己请求其他页面。.size()
会将所有数据加载到内存中,因为您需要数据来对它们进行计数。.stream()
可能会将所有数据加载到内存中,具体取决于您对流所做的操作。如果您.stream().limit(1)
这样说,则不会加载更多页面。但如果你说.stream().count()
那么所有页面都会被加载。查看这两个的文档,PaginatedQueryList
似乎是一个对象,它试图从你身上抽象出一个事实,即结果下面是分页的。
[...]当用户执行需要分页结果的操作时,将按需加载分页结果。某些操作(例如 size())必须获取整个列表,但在可能的情况下会逐页延迟获取结果。
所以,如果你基本上不想处理分页,就使用该query
方法。但请记住,如果您想返回所有结果(或知道它们的大小),您的应用程序最终仍然需要对结果进行分页
另一方面,QueryResultPage
更接近DynamoDB API。您正在处理一个页面,您可以使用getLastEvaluatedKey()
来获取用于下一个页面的参数setExclusiveStartKey
(在您的DynamoDBQueryExpression
)
总之:
query
对用户更加友好,因为它隐藏了显式分页,但如果您的结果包含许多页面,您的代码可能会变慢而您一开始没有注意到,因为这些页面是延迟加载的。queryPage
意图更加明确。例如,您必须手动加载每个页面,因此请考虑您是否真的需要所有数据,或者您是否不想进一步将分页卸载到客户端。您可以在阅读https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.Methods.html#DynamoDBMapper.Methods.queryPage的官方文档时阅读类似的描述queryPage
(重点是我的):
查询表或二级索引并返回单页匹配结果。与查询方法一样,您必须指定分区键值和应用于排序键属性的查询过滤器。但是,queryPage 仅返回数据的第一“页”,即 1 MB 的数据量
归档时间: |
|
查看次数: |
4947 次 |
最近记录: |