Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DynamoDB';s通过REST分页列表_Java_Amazon Web Services_Pagination_Amazon Dynamodb_Aws Java Sdk - Fatal编程技术网

Java DynamoDB';s通过REST分页列表

Java DynamoDB';s通过REST分页列表,java,amazon-web-services,pagination,amazon-dynamodb,aws-java-sdk,Java,Amazon Web Services,Pagination,Amazon Dynamodb,Aws Java Sdk,对于web应用程序,我想实现一个分页表。DynamoDB的“布局”是,一个用户有多个项目,因此我选择了分区键=用户和排序键=创建的(时间戳)。用户界面应在页面上显示总共100个项目中的50个项目 这些项通过RESTAPI调用传递到UI。我只想查询或扫描一页项目,而不是整个表。分页应可向前和向后进行 到目前为止,我通过使用 /** *返回依赖于用户的项目的下一页。注意:此方法在内部使用 *DynamoDB查询。因此,它需要“user”作为参数。“created”参数是可选的。 *如果提供,这两个参

对于web应用程序,我想实现一个分页表。DynamoDB的“布局”是,一个用户有多个项目,因此我选择了
分区键=用户
排序键=创建的
(时间戳)。用户界面应在页面上显示总共100个项目中的50个项目

这些项通过RESTAPI调用传递到UI。我只想
查询
扫描
一页项目,而不是整个表。分页应可向前和向后进行

到目前为止,我通过使用

/**
*返回依赖于用户的项目的下一页。注意:此方法在内部使用
*DynamoDB查询。因此,它需要“user”作为参数。“created”参数是可选的。
*如果提供,这两个参数将构成分页的开始键。
* 
*@param user-必填:要为其获取下一页的用户
*@param created-可选:用于提供起点
*@param limit-返回的页面将包含(最多)此数量的项目
*@返回
*/
公共列表getNextPageForUser(最终字符串用户、最终长创建、最终整数限制){
//为了根据用户进行迭代,我们使用QUERY.DynamoDB查询操作
//始终需要分区密钥(=用户)。
final SampleItem hashKeyObject=新SampleItem();
setUser(用户);
//创建的是可选的。如果提供,它将引用起点
如果(已创建==null){
最终DynamoDBQueryExpression页面表达式=新DynamoDBQueryExpression()//
.withHashKeyValues(hashKeyObject)//
.向前使用CANINDEXFORWARD(正确)//
.有限制(限制);
返回mapper.queryPage(SampleItem.class,pageExpression).getResults();
}否则{
final Map startKey=new HashMap();
startKey.put(SampleItem.USER,新的AttributeValue().with(USER));
startKey.put(SampleItem.CREATED,new AttributeValue().withN(CREATED.toString());
最终DynamoDBQueryExpression页面表达式=新DynamoDBQueryExpression()//
.withHashKeyValues(hashKeyObject)//
.具有排他性的启动键(启动键)//
.向前使用CANINDEXFORWARD(正确)//
.有限制(限制);
返回mapper.queryPage(SampleItem.class,pageExpression).getResults();
}
}
previous的代码类似,只是它使用了
和CANINDEXFORWARD(false)

在我的REST Api控制器中,我提供了一种方法:

@RequestMapping(value=“/page/{user}/{created}”,method=RequestMethod.GET)
带有分页的用户的公共列表查询(//
@RequestParam(required=true)最终字符串用户//
@RequestParam(必需=真)最终长时间创建//
@RequestParam(必需=false)最终整数n//
@RequestParam(required=false)最终布尔值isBackward//
) {
最终整数nrOfItems=n==null?100:n;
if(isBackward!=null&&isBackward.booleanValue(){
返回item2dto(myRepo.getprevquerysforuser(user,created,nrOfItems));
}否则{
返回item2dto(myRepo.getnextquerysforuser(user,created,nrOfItems));
}
}
我想知道我是否正在用这种方法重新发明轮子

是否可以通过REST将DynamoDB的
PaginatedQueryList
PaginatedScanList
传递给UI,以便如果javascript分页访问这些项,那么它们将被延迟加载。 由于使用其他数据库,我从未传输过DB条目对象,这就是我的代码片段重新打包数据的原因(
item2dto


此外,DynamoDB的分页似乎有点奇怪:到目前为止,我还没有看到向UI提供项目总数的可能性。因此UI只有“下一页”和“上一页”的按钮,而不知道接下来会有多少页。因此,不可能直接跳到第5页。

AWS控制台不会一次加载所有数据以节省读取容量。当您获得一个扫描/查询页面时,您只获得有关如何获得下一个页面的信息,因此控制台无法向您显示它可以显示多少页数据。根据您的模式,您可以在应用程序中支持随机页面访问。这是通过预先确定页面的大小,然后在分区键中对页面编号之类的内容进行二次编码来实现的。详情请参阅