在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个实体。
答案 0 :(得分:2)
我使用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