Google Appengine 游标

2024-03-29

我正在使用两者ndb and search-api我的 python appengine 项目中的查询。

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

  • https://cloud.google.com/appengine/docs/python/datastore/query-cursors https://cloud.google.com/appengine/docs/python/datastore/query-cursors
  • https://cloud.google.com/appengine/docs/python/search/cursorclass https://cloud.google.com/appengine/docs/python/search/cursorclass

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

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

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

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

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

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

For 2:

游标和数据更新

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

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

Java 等效页面位于游标的限制 https://cloud.google.com/appengine/docs/java/datastore/query-cursors#limitations_of_cursors提到了一些可能因不一致而引发的错误:

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

I suspectPython 也会引发一些类似的错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Appengine 游标 的相关文章

随机推荐