Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 为什么GAE数据存储这么慢?_Google App Engine_Google Cloud Datastore_App Engine Ndb - Fatal编程技术网

Google app engine 为什么GAE数据存储这么慢?

Google app engine 为什么GAE数据存储这么慢?,google-app-engine,google-cloud-datastore,app-engine-ndb,Google App Engine,Google Cloud Datastore,App Engine Ndb,假设我在数据存储中添加了一个新用户。我必须为他添加200行,它们只包含零。但这可能需要40秒。真正的用户,已经注册了我的网站必须等待这一次之前,他继续。在MySQL中,它需要几分之一秒的时间。你有什么建议 考虑一下这段代码。在谷歌服务器上需要10秒钟,但速度仍然太慢 def get(self): class Movie(ndb.Model): title = ndb.StringProperty (required=True) rating = ndb

假设我在数据存储中添加了一个新用户。我必须为他添加200行,它们只包含零。但这可能需要40秒。真正的用户,已经注册了我的网站必须等待这一次之前,他继续。在MySQL中,它需要几分之一秒的时间。你有什么建议

考虑一下这段代码。在谷歌服务器上需要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

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

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


此外,我必须说,即使有200个字段,也不太可能花40秒来保存。您可能正在做一些奇怪的事情,但如果没有看到任何代码,就无法判断。

如注释中所述-创建一个实体列表,并将其与一起保存,而不是逐个保存实体。

对于字段,我指的不是属性,而是相对db意义上的行。在GAE中添加新行记录的速度非常慢。好的,感谢您的澄清。仍然需要查看一些代码。这是在开发还是在生产?生产。我不提供代码,因为这个想法很简单。设想一个用户模型,其姓名和电子邮件只有两个属性。添加200个新用户大约需要40秒。我不知道如何快速填充数据存储。嗯,我要求您提供代码的原因是,这与我的经验完全不符。您可以在几秒钟内轻松创建数百行。是否要逐个添加用户?这肯定会很慢,因为每个API操作都会往返到DB服务器。您应该使用多放置,例如将所有200个实体放在一个放置操作中。您也应该考虑为什么需要同时创建200个空的实体。您对术语的选择也很混乱,您指的是用户,在创建电影实体时,您使用行,而现在只有行实体。