在 GAE/Go 中迭代数据存储查询结果非常慢。
q := datastore.NewQuery("MyStruct")
gaeLog.Infof(ctx, "run") // (1)
it := client.Run(ctx, q)
list := make([]MyStruct, 0, 10000)
gaeLog.Infof(ctx, "start mapping") // (2)
for {
var m MyStruct
_, err := it.Next(&m)
if err == iterator.Done {
break
}
if err != nil {
gaeLog.Errorf(ctx, "datastore read error : %s ", err.Error())
<some error handling>
break
}
list = append(list , m)
}
gaeLog.Infof(ctx, "end mapping. count : %d", len(list)) // (3)
结果如下。
18:02:11.283 run // (1)
18:02:11.291 start mapping // (2)
18:02:15.741 end mapping. count : 2400 // (3)
从(2)
到(3)
大约需要4.5秒,才2400条记录。它非常慢。
我怎样才能提高性能?
[更新]
我在上面的代码 q := datastore.NewQuery("MyStruct")
中添加了查询。
我试图检索类型为 MyStruct
的所有实体。这种有 2400 个实体。
最佳答案
我在使用 cloud.google.com/go/datastore
时发现速度很慢。我迁移到使用 google.golang.org/appengine/datastore
。
结果如下,不到1秒。
13:57:46.216 run
13:57:46.367 start mapping
13:57:47.063 end mapping. count : 2400
关于google-app-engine - GAE/去 : datastore iterator too slow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43515254/