我正在使用两者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
以下事情对我来说不清楚:
- 什么是游标生存时间?我可以公开一年前的光标吗?
- 如果从原始集合中添加/删除项目,光标分页将如何表现? (+如果光标指向特定记录,如果该记录不再存在会发生什么?)
- 查询顺序如何影响上述内容?
- 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(使用前将#替换为@)