在我的一个App Engine应用程序中,我需要为一种类型的所有实体编译一个键列表,并将它们放入一个列表中。我以前只是运行一种类型的查询,但它根本没有扩展,我遇到了堆错误。我已经考虑过使用分片列表来解决这个问题,在更新数据集时添加和删除密钥,但是我遇到了一些问题让它起作用。
答案 0 :(得分:0)
你的内存不足表明你要么不是只查询密钥,要么就是你有很多这样的实体。无论哪种方式,你可能有太多不能一次显示,所以我假设你将做一些形式的分页。
这是游标的理想用例。发出查询,读取一个页面的键(或整个实体),用HTML呈现它,并询问查询是否有游标。保存光标。当用户页面时,重新发出相同的查询,并告诉它从保存的光标开始。游标不依赖于索引,因此删除已从查询中获取的任何实体都不会搞砸。如果用户在一页之后失去兴趣,则不会支付用于阅读整个键列表的命中。
http://code.google.com/appengine/docs/java/datastore/queries.html#Query_Cursors