根据AWS文档,我正在使用dynamo db分页:
--
--
令人惊讶的是,当我不设置任何页面大小(1)时,DynamoDb查询速度明显更快,根据文档,情况应该不是这样。我假设dynamo db在默认情况下返回所有结果,如果我们不指定pageSize。
querySpec.withExclusiveStartKey(lastAccessedRecord); (1)
querySpec.withMaxPageSize(30);
querySpec.withMaxResultSize(100);
querySpec.withExclusiveStartKey(lastAccessedRecord); (2)
此问题的根本原因:ItemColletions也返回大小为0的页面。一旦有大小为0的页面,我们就需要打破循环,以避免在不必要的页面上进行迭代。
ItemCollection使用某种延迟加载(仅当我们遍历页面时从DynamoDb获取结果)
“项的集合。ItemCollection对象维护指向其当前数据页的光标。最初,光标位于第一页之前。下一个方法将光标移动到下一行”
QuerySpec spec = new QuerySpec().withKeyConditionExpression("Id = :v_id")
.withValueMap(new ValueMap().withString(":v_id", replyId)).withMaxPageSize(1);
ItemCollection<QueryOutcome> items = table.query(spec);
System.out.println("\nfindRepliesForAThreadSpecifyOptionalLimit results:");
// Process each page of results
int pageNum = 0;
for (Page<Item, QueryOutcome> page : items.pages()) {
if(page.size==0) ](fix )
break; ]
System.out.println("\nPage: " + ++pageNum);
// Process each item on the current page
Iterator<Item> item = page.iterator();
while (item.hasNext()) {
System.out.println(item.next().toJSONPretty());
}
}
}
ItemCollection:它确实使用了延迟加载。AWS文件:
在此Iterable返回的迭代器上对{@code Iterator.next}的每次调用都会导致对DynamoDB的一次调用以检索单个结果页。
另一方面,DynamoDB中的分页基于包的大小(限制1MB大小)。返回的每个页面最大为1MB(项目数量会有所不同)。通过设置maxPageSize,DynamoDB将不得不进行更多的计算来满足您的请求,而不仅仅是根据包大小返回匹配的项目。
假设我有一个DynamoDB表: UserId是主键(hash),我需要将BookName设置为排序键(range),因为添加到数据库中的另一项用相同的UserId覆盖了前面的项。
我对BigQuery中的集群表(带有日期分区)有一个问题。我有一个由名为entity_id的列集群的表。问题是,我希望在进行由这些集群列过滤的查询时看到字节读取减少,但根据BigQuery Web UI,它无论如何都在进行全扫描。 例如:<br>从<code>project.usersDataset中选择*。users_cluster其中entity_id='405849241'限制为1000 返
使用DynamoDB,没有简单的方法可以对列执行索引范围查询。主键、本地二级索引和全局二级索引都需要分区键来进行范围查询。 例如,假设我有一个带有数字分数属性的高分表。使用索引范围查询无法获得前10名或前25至50名 那么,执行这项极其常见的任务的惯用方式或首选方式是什么呢? > 接受表格扫描。 使用静态分区键并利用分区查询。 使用固定数量的静态分区键并使用多个分区查询。
我对DynamoDB非常陌生(一般没有Sql),在理解如何形成一个简单的查询时遇到了一些困难。。 我想在SQL中执行一个简单的选择,但似乎无法完成。 我的表定义基本上是: 表名snsNotiations主分区密钥接收者ID(编号) 它遵循一些属性(如readAt)。 我要执行的查询是: 我甚至可以在AWS UI上执行此查询:截图 我的lambda函数使用以下内容: 但我得到以下错误: 无法查询。错
我正在寻找优化Dynamodb操作,即删除扫描和使用查询快速获取数据。 表数据: 我必须使用项目名称进行项目搜索。现在,我们扫描整张桌子。 然后,如果itemOwners包含搜索用户的用户ID,我们将过滤items结果。 我想知道是否有更好的方法使用dynamodb进行搜索查询?
我有一个带有哈希键(id)的表(配置文件),我有一个关于名称的GSI,一个关于国家的范围键。我想创建一个DAO方法,它将获取所有具有给定值的name和country的记录,如下所示:List getProfileWithNameAndCountry(name,country);