Objectify是Google用于在Google数据存储中存储Java对象的API /服务。起初,我的操作过去很快(低几十毫秒)。现在,它们变得很慢(400-600毫秒)。
Objectify还将一个操作转换为多个操作,例如查询在索引中查找实体ID,然后从memcache中检索某些实体,从数据存储中检索其他实体。字段上有注释会影响创建的操作数。可能有很多地方出现性能问题。
我如何深入了解Objectify实际上为改善绩效和减少结算(通过触发更少和更有效的运营)所做的事情?
我查看了Objectify文档并广泛搜索了网页。我无法找到诊断Objectify查询的方法。
答案 0 :(得分:0)
查看GAE RPC调用的stackdriver分析,看看幕后发生了什么。它会给你一个原始操作列表。
确实没有那么多非显而易见的地方出现性能问题。混合查询(将查询转换为仅密钥查询后跟批量获取)仅适用于@Cache
个实体。理念很简单 - 如果缓存实体效率很高,那么尽可能多地使用缓存可能是有效的。如果您不确定,请删除@Cache
。
除此之外,Objectify只是将低级别Entity
对象转换为POJO。它在这方面相当有效,但你当然可以构建病理案例。注意长而昂贵的生命周期方法(@OnLoad
和朋友)。嵌套列表列表等可以轻松创建O(N ^ 3)操作。但是当你创建它们时,这些应该很明显。特别是如果您在@Load
个对象上使用Ref<?>
。载荷不是免费的。