appengine游标如何工作?

时间:2017-02-02 16:30:36

标签: google-app-engine cursor app-engine-ndb google-search-api

我在我的python appengine项目中使用ndbsearch-api查询。

我能找到的关于游标的唯一官方文档:

以下事情我不清楚:

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

1 个答案:

答案 0 :(得分:6)

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

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

  

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

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

2:

  

游标和数据更新

     

光标的位置被定义为结果列表中的位置   在最后一个结果返回后。光标不是相对位置   清单(它不是抵消);它是Cloud Datastore的标记   在开始索引扫描结果时可以跳转。如果结果为   查询在使用游标之间进行更改,查询通知仅更改   在光标后的结果中出现。如果之前出现新结果   对于查询的光标位置,当它的时候不会返回   获取光标后的结果。同样,如果实体不是   查询的结果更长但是在光标之前出现了   光标不会改变后出现的结果。如果是最后的结果   return从结果集中删除,光标仍然知道如何   找到下一个结果。

     

检索查询结果时,可以同时使用开始游标和   结束游标从云返回一组连续的结果   数据存储。使用开始和结束光标检索结果时   你不能保证结果的大小是一样的   就像你生成游标一样。可以添加或删除实体   从生成游标的时间到云数据存储区   当它们用于查询时。

Limitations of cursors处的Java等效页面提到了一些可能因不一致而引发的错误:

  

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

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

相关问题