Python 应用引擎db.get(keys)和A.all(keys_only=True)的速度有多快。filter(';b=';b)。fetch(1000)?

Python 应用引擎db.get(keys)和A.all(keys_only=True)的速度有多快。filter(';b=';b)。fetch(1000)?,python,google-app-engine,Python,Google App Engine,50个键的db.get()似乎需要5-6秒。这正常吗?时间是什么函数 我还做了a.all(keys_only=True).filter('b=',b).fetch(1000),其中a.b是ReferenceProperty。我用不同的b值对数据存储进行了50次这样的往返,总时间只有3-4秒 这怎么可能?db.get()是并行完成的,只需访问数据存储区一次,我认为按键查找实体的操作比fetch更快 以下是我的A类课程的定义: class App(db.Model): name_atom =

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

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

这怎么可能?db.get()是并行完成的,只需访问数据存储区一次,我认为按键查找实体的操作比fetch更快

以下是我的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\u v3.Get real=2272ms api=416ms


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

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

也许你的实体相当大?这也许可以解释为什么您的
keys\u only
查询速度更快,尽管它包含一个过滤器并获取更多的结果

你可以考虑使用,这样你就能清楚地看到为什么你的请求要花这么长时间。你甚至可以把它和你的问题一起发布

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

不,应该需要几百毫秒。不过,你是如何安排时间的

我也做了一个 A.all(keys_only=True).filter('b=', b) .取(1000),其中A.b为A 引用属性。我打了50个这样的回合 访问数据存储,使用不同的 b值,总时间为 只有3-4秒

这不是不合理的,往返50次

这怎么可能?db.get()已完成 同时,只需一次前往 数据存储,我认为 按键查找实体是一个重要步骤 操作比获取更快


这是一个非常奇怪的结果,我认为可能有一些混杂的因素在起作用。正如David所建议的,您应该使用AppStats来发现时间的去向。

查看您使用
db.get()获取的模型可能会有所帮助。
call.OK,编辑以添加模型定义。不要让我们挂起!你知道为什么你的50键获取如此缓慢吗?还没有:)将在我更新时更新。更新。我认为现在一切都有意义了。我的数据存储中的所有实体都很小,比如<5kb。同样值得注意的是,即使我在我的筛选查询中说了.fetch(1000),它也只能为500个查询中的每个查询匹配~1个实体:)