Java 使用Google数据存储获取基于日期递减的第n行数

Java 使用Google数据存储获取基于日期递减的第n行数,java,google-app-engine,Java,Google App Engine,嗨,我正在使用谷歌应用程序引擎创建一个图片托管网站,每个页面包含5幅图片,我想得到一个bool,它会告诉我是否有后续页面(它们是按降序存储的)。我有一个页面限制和页码,所以我需要的是一个数据存储查询,它将: 获取rownum pagenumber*pagelimit的单个值(检查页面上显示的5之后是否存储了内容) 目前我有: Query query = new Query("PicturePost").addSort("date",Query.SortDirection.DESCENDI

嗨,我正在使用谷歌应用程序引擎创建一个图片托管网站,每个页面包含5幅图片,我想得到一个bool,它会告诉我是否有后续页面(它们是按降序存储的)。我有一个页面限制和页码,所以我需要的是一个数据存储查询,它将:

获取rownum pagenumber*pagelimit的单个值(检查页面上显示的5之后是否存储了内容)

目前我有:

    Query query = new Query("PicturePost").addSort("date",Query.SortDirection.DESCENDING);
    List<Entity> results;

    results = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(pageLimit)
                                    .offset(pageLimit*(pageNumber)));

    boolean lastPage = results.isEmpty();
Query Query=new Query(“PicturePost”).addSort(“date”,Query.SortDirection.DESCENDING);
列出结果;
结果=datastore.prepare(query).asList(FetchOptions.Builder.withLimit(pageLimit)
。偏移量(页数限制*(页码));
布尔lastPage=results.isEmpty();
但这将是低效的,因为它从下一页获取所有5个实体


如果有人能帮助我,我将非常感激,谢谢

这对我来说似乎很有效。YMMV。我总是在任何需要串行访问的实体上包含一个date_created字段[auto_now_add=True]。浏览器客户端应使用两个输入调用处理程序函数:要返回的图像数和日期限制。第一个调用将有一个空字符串作为date\u limit,因此您使用当前系统的datetime。其他通话将包括您在上次通话中发回的最早日期

您的查询将是(date_created
如果这是一个活动页面,我会确保使用ndb进行自动memcaching,并告诉浏览器将其缓存在您的内容标题中。(如果使用db,您可以非常轻松地编写一个简单的memcache函数。)是的,这并不完美:您有一小部分时间会因为返回N个图像而浪费调用,并且不知道下一次调用将返回零。如果是超级活动站点,您可能会在图像put()上创建一个日期的副本。您可以承担自定义索引的开销,但我认为无论采用何种方法,您都将承担此成本。与许多GAE的事情一样,常常存在权衡。嗯-stevep这对我来说似乎很有效。YMMV。我总是在任何需要串行访问的实体上包含一个date_created字段[auto_now_add=True]。浏览器客户端应使用两个输入调用处理程序函数:要返回的图像数和日期限制。第一个调用将有一个空字符串作为date\u limit,因此您使用当前系统的datetime。其他通话将包括您在上次通话中发回的最早日期

您的查询将是(date_created 如果这是一个活动页面,我会确保使用ndb进行自动memcaching,并告诉浏览器将其缓存在您的内容标题中。(如果使用db,您可以非常轻松地编写一个简单的memcache函数。)是的,这并不完美:您有一小部分时间会因为返回N个图像而浪费调用,并且不知道下一次调用将返回零。如果是超级活动站点,您可能会在图像put()上创建一个日期的副本。您可以承担自定义索引的开销,但我认为无论采用何种方法,您都将承担此成本。与许多GAE的事情一样,常常存在权衡。嗯-斯蒂夫