appengine游标如何工作?

glm*_*rml 7 google-app-engine cursor google-search-api app-engine-ndb

我在我的python appengine项目中使用了两个ndbsearch-api查询.

关于游标的唯一正式文档,我可以找到:

以下事情对我来说不清楚:

  1. 什么是光标生存时间?我可以曝光一年的游标吗?
  2. 如果在原始集合中添加/删除项目,光标分页将如何表现?(+如果光标指向特定记录,如果此记录不再存在会发生什么?)
  3. 查询排序如何影响上述?
  4. ndb和search-api游标之间是否有任何根本区别?

Dan*_*scu 6

我是从ndb视角回答,我没有使用搜索API.所有报价均来自您的第一个链接.

对于1和3(因为从游标角度来看,排序被视为原始查询的一部分):

要从光标点检索其他结果,应用程序使用相同的实体类型,过滤器和排序顺序准备类似的查询,并在执行检索之前将光标传递给查询的with_cursor()方法

因此,光标的年龄(即查询的年龄)并不重要,因为必须恢复其原始查询才能获得光标.

2:

游标和数据更新

光标的位置定义为返回最后一个结果后结果列表中的位置.光标不是列表中的相对位置(它不是偏移量); 它是开始索引扫描结果时Cloud Datastore可以跳转的标记.如果查询的结果在使用游标之间发生更改,则查询仅注意光标后结果中发生的更改.如果在查询的光标位置之前出现新结果,则在获取光标后的结果时将不会返回该结果.同样,如果实体不再是查询的结果但已出现在光标之前,则光标后面显示的结果不会更改.如果从结果集中删除了返回的最后一个结果,则光标仍然知道如何定位下一个结果.

检索查询结果时,可以同时使用开始游标和结束游标从Cloud Datastore返回连续的结果组.使用开始和结束光标检索结果时,无法保证结果的大小与生成游标时的大小相同.可以在生成游标的时间与在查询中使用游标之间的Cloud Datastore中添加或删除实体.

游标限制中的Java等效页面提到了一些可能因不一致而引发的错误:

新的App Engine版本可能会更改内部实现细节,使依赖于它们的游标无效.如果应用程序尝试使用不再有效的游标,则Cloud Datastore会引发 IllegalArgumentException(低级API),JDOFatalUserException (JDO)或PersistenceException(JPA).

怀疑 Python也会引发一些类似的错误.