在 Google 数据存储中查找最大索引(博客系统中的分页)

Find Maximum Index in Google Datastore (Pagination in Blog System)

我有一系列的博客文章作为实体。我将收到如下所示的 URL:/blog/page/1。在这种情况下,我想访问最近的 5 个帖子。在/blog/page/2的情况下,我想要最近的第6-10个。

所以请允许我做一个 X-Y,因为我认为这是唯一的方法:

如何使用 Google Cloud Platform Datastore 找到众多实体中的最大值? (我正在使用 ndb

我可以给每个实体一个 ID 值,然后从 ID < maxIndex - page * 5ID 排序的查询中获取 5。

但是,我如何找到 maxIndex?我是否从按 ID 排序的查询中获取 1,发现它是 ID,然后 运行 之前的操作?这对于 每个页面浏览量 .

来说似乎有点慢

我怎样才能 A) 快速找到最大索引或 B) 否则实现分页?

谢谢!

对于游标,您可以使用数据存储条目来存储游标,然后来回发送数据存储密钥。通过 post 请求发送数据来掩盖它是另一种选择。

回答您原来的问题:要获得顶部条目,请使用 sort with a limit of 1. This will actually read all the Datastore entries so you should do a keys only 搜索进行查询以获取 ID(仅密钥是免费的),然后获取实际的 posts。所以像这样:

class IndexPage(webapp2.RequestHandler):
def get(self):
    maxIndex = Posts.query().order(-Posts.PostIndex).fetch(limit=1, keys_only=True)[0].get().PostIndex        
    page_number = 0
    post_lists = getPageResults(maxIndex, page_number)
    while len(post_lists) > 1:
        self.response.write("====================PAGE NUMBER %i===================</br>" % page_number)
        for post in post_lists:
            self.response.write(str(post.get().PostIndex) + "</br>")
        page_number += 1
        post_lists = getPageResults(maxIndex, page_number)


def getPageResults(maxIndex, page):
    index_range = (maxIndex - (page*5))
    post_index_list = range(index_range, index_range-5, -1)
    return Posts.query(Posts.PostIndex.IN(post_index_list)).order(-Posts.PostIndex).fetch(limit=5, keys_only=True)

请记住,我在几分钟内将其组合在一起以说明如何使用 keys_only 和我上面提到的其他要点。