GAE / Go:数据存储迭代器太慢

时间:2017-04-20 09:16:45

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

在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个实体。

1 个答案:

答案 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