App Engine db.get(keys)和A.all(keys_only = True).filter('b =',b).fetch(1000)的速度有多快?

时间:2010-06-17 23:20:48

标签: python google-app-engine

50键的db.get()似乎需要5-6秒。这是正常的吗?什么是函数的时间?

我还做了A.all(keys_only = True).filter('b =',b).fetch(1000)其中A.b是ReferenceProperty。我对数据存储区进行了50次这样的往返,具有不同的b值,总时间仅为3-4秒。

这怎么可能? db.get()是并行完成的,只有一次数据存储,我认为按键查找实体比获取更快。

以下是我的班级A的定义:

class App(db.Model):
    name_atom = db.ReferenceProperty(AppName)
    author = db.ReferenceProperty(Author)
    short_desc = db.StringProperty()
    description = db.TextProperty()
    url = db.StringProperty()
    rating_avg = properties.RangeProperty(0, 1000, default=0)
    rating_count = properties.RangeProperty(min_value=0, default=0)
    add_dt = db.DateTimeProperty(auto_now_add=True)
    modify_dt = db.DateTimeProperty(auto_now=True)

更新

好的,AppStats说:datastore_v3.Get real=2272ms api=416ms

我认为正在发生的事情是我在同一个请求处理程序中进行了大量其他低效数据存储调用之后正在执行此db.get([50个键]),并且它只是限制我或其他什么。其他时候我做了相同的db.get(),它在200ms内返回:)

2 个答案:

答案 0 :(得分:3)

  

50个密钥的db.get()似乎把我带走了   5-6秒。这是正常的吗?什么是   时间函数?

没有。它应该需要几百毫秒。你怎么计时呢?

  

我也做了一个   A.all(keys_only = True).filter('b =',   b).fetch(1000)其中A.b是a   的ReferenceProperty。我做了50次这样的回合   前往数据存储区,与不同的   b的值,总时间是   只有3-4秒。

这对50次往返来说并非不合理。

  

这怎么可能? db.get()完成了   同时,只有一次旅行   数据存储区,我想是的   按键查找实体是一个   比获取更快的操作。

这是一个非常奇怪的结果,我认为可能存在混淆因素。正如大卫建议的那样,你应该使用AppStats来发现时间的去向。

答案 1 :(得分:2)

按键获取实体时,查询时间应主要取决于实体的大小。必须通过网络将实体转移给您,然后进行解码。

也许你的实体很大?这可能解释了为什么keys_only查询速度更快,尽管它包含过滤器并获取更多结果。

您可以考虑使用AppStats,这样您就可以确切了解您的请求为何需要这么长时间。您甚至可以将它与您的问题一起发布。