Google app engine 通过GAE中的_key_name()获取_,耗时长达750ms。这是预期的吗?

Google app engine 通过GAE中的_key_name()获取_,耗时长达750ms。这是预期的吗?,google-app-engine,appstats,Google App Engine,Appstats,我的程序在一个循环中获取大约100个条目。使用get_by_key_name()获取所有条目Appstats显示一些get_by_key_name()请求需要750ms!(其他大值为355ms、260ms、230ms)。其他回迁的平均值范围为30毫秒到100毫秒。这些时间是实时的,因此有助于“毫秒”,而不是“cpu毫秒” 由于上述原因,返回网页所需的总时间非常高,ms=5754,其中cpu_ms=1472。(对于背靠背请求,上述时间会重复出现。) 环境:Python 2.7、webapp2、ji

我的程序在一个循环中获取大约100个条目。使用get_by_key_name()获取所有条目Appstats显示一些get_by_key_name()请求需要750ms!(其他大值为355ms、260ms、230ms)。其他回迁的平均值范围为30毫秒到100毫秒。这些时间是实时的,因此有助于“毫秒”,而不是“cpu毫秒”

由于上述原因,返回网页所需的总时间非常高,ms=5754,其中cpu_ms=1472。(对于背靠背请求,上述时间会重复出现。)

环境:Python 2.7、webapp2、jinja2、高复制、无其他对服务器的并发请求、前端实例类为F1、尚未设置memcache、最大空闲实例为自动、最小挂起延迟为自动,使用db(非NDB)

任何帮助都将不胜感激,因为我基于整个数据库设计,仅使用get_by_key_name()从数据存储中获取条目

更新: 我尝试在每次get\u by\u key\u name()方法调用之前和之后立即使用time.clock()分析。每次调用time.clock()的时间差是10毫秒!(只是想澄清一下,get_by_key_name()是在不同类型上调用的)

根据time.clock(),总执行时间(以墙上的时钟时间为单位)为660ms。但实时性是5754(=毫秒),cpu_毫秒是1472个GAE日志

问题摘要:

  • *[更新:这是通过传递密钥列表来解决的]为什么按密钥获取要花这么长时间*

  • 为什么5754的ms比1472的cpu_ms多得多。任务执行是否在75%(1-1472/5754)的时间内处于暂停/等待状态,因为就最终用户而言,实时(挂钟)所用的时间很长

  • 如果以上是真的,那么为什么time.clock()显示从第一个get_by_key_name()请求开始到最后一个(第100个)get_by_key_name()请求只经过660ms(挂钟时间);虽然GAE这次显示为5754ms


  • 您可以传递一个键列表,这应该会很快得到响应。我仍然想知道,我所看到的GAE是不是比正常情况要高,因为这些时间是不现实的。再次感谢你。你会发现用钥匙取东西到处都是,虽然通常不会那么长。你总是想分批得到尽可能多的东西,因为重复的往返时间会增加。谢谢蒂姆。批处理是指按照Daniel的建议传递密钥列表。对的进一步想知道是什么解释了上面的问题2和问题3。再次感谢。我想知道您的模型中是否有重复属性?appengine的python版本存在一个已知问题,它使得具有重复属性的实体的反序列化太长。我所说的太长是指,对于数百个实体(但有许多重复的属性),可以用30或40秒的时间进行查询。我不知道这是否适用于你的情况,但可以。