有关获取数据存储区游标的行为的问题

时间:2019-01-10 05:05:00

标签: google-app-engine go google-cloud-platform google-cloud-datastore

我对获取游标有疑问

目标函数: https://godoc.org/google.golang.org/appengine/datastore#Iterator.Cursor

从下面的代码可以读取的范围内,获取游标时设置了偏移量 https://github.com/golang/appengine/blob/master/datastore/query.go#L702-L705

当我使用GCP控制台的堆栈跟踪检查了执行此函数的结果时,Insights显示警告

Issue: Use of offset in datastore queries.
Description: Your app made 1 remote procedure calls to datastore.query () and datastore.next () using offset.
Recommendation: Use cursor instead of offset.

查询详细信息

g.co/gae/datastore/offset 10
g.co/gae/datastore/skipped 10

抵销会影响效果和结算,我想避免这种情况 有办法避免使用偏移吗?还是这是正确的行为?

1 个答案:

答案 0 :(得分:1)

来自Offsets versus cursors

  

尽管Cloud Datastore支持整数偏移量,但您应避免   使用它们。而是使用游标。仅使用偏移量可以避免   将跳过的实体返回到您的应用程序,但是这些实体   仍在内部检索。跳过的实体确实会影响   查询的延迟,并且您的应用需要为读取付费   检索它们所需的操作。使用游标而不是偏移量   让您避免所有这些费用。

您所指的q.offset是用于Cursor实现的内部变量,它不是上面引用所提及的显式查询偏移量。

因此,使用Cursor应该没问题。