Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GAE数据存储游标是永久和持久的吗?_Java_Google App Engine_Cursor_Google Cloud Datastore_Objectify - Fatal编程技术网

Java GAE数据存储游标是永久和持久的吗?

Java GAE数据存储游标是永久和持久的吗?,java,google-app-engine,cursor,google-cloud-datastore,objectify,Java,Google App Engine,Cursor,Google Cloud Datastore,Objectify,如果说com.google.appengine.api.datastore.Cursor只是将索引位置存储到GAE数据存储索引中,这样说对吗 游标耐用吗?也就是说,我是否可以永久性地存储一个光标,并反复使用它,并且确信如果它指向索引中的第5000个位置,那么它将永远指向该位置 如果索引缩减到少于5000个条目怎么办?使用此游标会导致错误还是什么都不返回 对于较大的索引(比如100000个或更多的条目),我是否可以首先为每5000个位置(比如)获取游标,存储它们,然后使用这组游标以Map/Redu

如果说
com.google.appengine.api.datastore.Cursor
只是将索引位置存储到GAE数据存储索引中,这样说对吗

游标耐用吗?也就是说,我是否可以永久性地存储一个光标,并反复使用它,并且确信如果它指向索引中的第5000个位置,那么它将永远指向该位置

如果索引缩减到少于5000个条目怎么办?使用此游标会导致错误还是什么都不返回

对于较大的索引(比如100000个或更多的条目),我是否可以首先为每5000个位置(比如)获取游标,存储它们,然后使用这组游标以Map/Reduce的方式进行一些工作


实际上,我使用的是Objectify,而不是直接使用DS,但这不会影响游标相对于索引的属性。

游标仅在所做原始查询的上下文中才有意义。它们并不完全是索引位置/偏移。发件人:

光标的位置定义为结果列表中的位置 在最后一个结果返回之后。光标不是中的相对位置 列表(它不是偏移);它是指向哪个云数据存储的标记 在开始索引扫描结果时可以跳转。如果结果为 查询在使用游标之间发生更改,查询只注意更改 在光标后的结果中发生的。如果之前出现新结果 查询的光标位置,当 获取光标后的结果。类似地,如果一个实体不是 如果查询的结果显示在光标之前,则 光标后显示的结果不会更改。如果最后的结果 如果从结果集中删除返回的,则光标仍知道如何 找到下一个结果

也来自:

游标受以下限制:

  • 游标只能由执行原始查询的同一应用程序使用,并且只能用于继续同一查询。使用光标 在随后的检索操作中,必须重新构造 原始查询完全相同,包括相同的实体种类、祖先 过滤器、属性过滤器和排序顺序。这是不可能的 使用游标检索结果,而不从中设置相同的查询 它最初是生成的
  • 由于NOT_EQUAL和IN运算符是通过多个查询实现的,因此使用它们的查询不支持游标,也不支持游标 使用CompositeFilterOperator.or构造的复合查询 方法
  • 对于对具有多个值的属性使用不等筛选器或排序顺序的查询,游标并不总是按预期工作。 此类多值属性的重复数据消除逻辑不适用 在两次检索之间保持,可能会导致相同的结果 他不止一次地回来了
  • 新的应用程序引擎版本可能会更改内部实现细节,使依赖它们的游标无效。如果申请 尝试使用不再有效的游标、云数据存储 引发IllegalArgumentException(低级API), JDOFatalUserException(JDO)或PersistenceException(JPA)

如果您的数据没有改变,您可能可以通过映射/减少的方式使用游标(通过恢复原始查询),包括预获取游标

如何存储游标来遍历结果集?例如,我想以分页的方式显示所有最新上传(按时间倒序)。简单地使用游标,我总是只能加载第1页,然后转到下一页、下一页、下一页等。我不能使用偏移量从P1跳到P10。如果我可以存储游标(假设页面大小固定为20个结果/页面),那么我可以为该页面检索适当的游标,然后从那里获取结果。。。这会以预期的方式工作吗?如果没有新的上传(即数据更新),它应该。例子:嗯?似乎有点违反直觉:如果光标指向索引中的第100个条目,那么添加新的上传不就意味着之前的第99个结果将作为第一个结果返回吗?所以说光标不是索引的偏移量,而是索引中特定条目的指针/引用是正确的吗???如果有数据更新,事情可能会按照预期进行,也可能不会按照预期进行,请参阅第一个引号。如果光标位于第一页,您将看到最新上载,但如果光标位于后续页面,则不会看到最新上载。“如果光标位于第一页,则会看到最新上载,但如果光标位于后续页面,则不会看到最新上载。”明白。但是如果我在第6页,20个结果/页,一个新的上传发生(从开始算起,第100个结果变成第101个结果),第6页被刷新,我会看到第100个上传作为本页的第一个结果还是第101个上传?换句话说:刷新(使用保存的光标)后,第5页(新上传前)的最后一个结果是否会成为第6页(新上传后)的第一个结果?