为什么GAE数据存储如此之慢?

时间:2013-09-15 15:09:21

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

想象一下,我在数据存储区中添加了一个新用户。我必须为他添加 200行(它们只包含零)。但它可能需要 40秒。注册我网站的真实用户必须在此之前等待。在MySQL中它需要几分之一秒。你有什么建议?

考虑这段代码。 Google服务器需要10秒钟,这仍然太慢。

def get(self):

    class Movie(ndb.Model):
        title =  ndb.StringProperty (required=True)
        rating = ndb.IntegerProperty (required=True)

        @classmethod
        def populate(cls, n):
            for i in range(n):
                o = cls(title='foo', rating=5)
                o.put()

    t1 = datetime.datetime.now()

    Movie.populate(200)

    t2 = datetime.datetime.now()
    self.response.write(t2 - t1) # ~10 seconds

2 个答案:

答案 0 :(得分:6)

如评论中所述 - 不是逐个保存实体,而是创建实体列表并使用multi-put保存它们。

答案 1 :(得分:2)

坦率地说,我建议使用更合理的数据模型。根本没有理由创建一个包含200个字段的模型。初始设置不仅需要很长时间,而且加载每个实例都会很昂贵,而且节省的费用将非常昂贵。

在任何情况下,您几乎肯定不需要从头开始实例化所有字段。

(另外,我必须说,即使有200个字段,需要40秒才能保存似乎极不可能。你可能做了一些奇怪的事情,但没有看到任何代码就无法分辨。)