【问题标题】:Google Appengine CursorsGoogle Appengine 游标
【发布时间】:2023-03-29 07:41:01
【问题描述】:

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

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

以下事情我不清楚:

  1. 什么是光标生存时间?我可以暴露岁游标吗?
  2. 如果从原始集合中添加/删除项目,光标分页会如何表现? (+ 如果光标指向特定记录,如果该记录不再存在会怎样?)
  3. 查询排序对上述内容有何影响?
  4. ndb 和 search-api 游标之间有什么根本区别吗?

【问题讨论】:

  • 其中一些在他们博客中深入的 appengine 文章中。同意它也应该在文档中。

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


【解决方案1】:

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

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

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

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

对于 2:

游标和数据更新

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

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

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

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

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

【讨论】:

  • 好问题,好答案。今天学到了一些东西。 :)
  • 感谢您的回答。但它并没有回答所有子问题,也根本没有涵盖 search-api
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 2012-03-25
  • 2013-10-24
相关资源
最近更新 更多