|
|
1
3
在任何DBMS中都没有有效的方法来实现这一点。在每种情况下,您都必须至少按顺序读取索引记录,直到找到第n个记录,然后查找相应的数据记录。这或多或少是在GAE中FETCH(计数、偏移量)所做的,额外的限制是1000条记录。 一个更好的方法是保留一个“书签”,它由您为最后一个检索到的实体排序的字段的值和实体的键组成。然后,当您希望从停止的位置继续时,可以将字段的值添加为不相等查询的下限,并跳过记录,直到匹配或超过最后看到的值。 如果要向用户提供“友好”的页面偏移量,可以使用memcache存储开始偏移量和书签(order_property,key)元组之间的关联。生成页面时,请插入或更新最后一个页面后面实体的书签。获取页面时,如果书签存在,请使用它,或者通过使用偏移量进行查询(如果偏移量足够大,则可能有多个查询)来硬生成它。 |
|
|
2
2
查询类的文档可在以下位置找到: http://code.google.com/appengine/docs/python/datastore/queryclass.html#Query 查询类提供fetch witch接受限制和偏移量 在您的案例1和n中 提取的运行时间随偏移量+限制线性增长。 因此,在您的案例中优化的唯一方法是确保您想要的记录 访问通常更接近数组的开头。 你可以使用 query.filter('key=',n) 查询。 它将返回第一个匹配项,其中键为n |