在分析我的python2.7 App Engine应用程序时,我发现每条记录平均需要7毫秒才能将从ndb获取的记录反序列化为python对象。 (在pb_to_query_result
,pb_to_entity
及其后代中 - 这不包括查询数据库和接收原始记录的RPC时间。)
这是预期的吗?我的模型有六个属性,其中一个是具有15个属性的LocalStructuredProperty
,其中还包含一个具有四个属性的重复StructuredProperty
,但我认为平均对象应该少于30个属性。
预计会这么慢吗?我想获取几千条记录来做一些简单的聚合分析,虽然我可以忍受一定的延迟,但超过10秒是一个问题。有什么我可以做的重组我的模型或我的架构,使这更可行吗? (除了定期预先计算我的聚合分析并缓存结果的明显解决方案。)
如果这种情况变得很慢是不正常的,那么知道这样做会很有帮助,所以我可以去寻找我可能会做的事情来阻止它。
答案 0 :(得分:7)
简答:是的。
我发现Python中的反序列化非常慢,特别是在涉及重复属性的情况下。显然,GAE-Python反序列化会产生大量的对象。众所周知,效率低下,但显然,没有人愿意接触它,因为它远远落后于堆栈。
这很不幸。由于这种开销,我们大部分时间运行F4前端(即,更快的CPU ==更快的反序列化)。