高估计查询成本:如何记录客观化如何分解查询?

时间:2014-09-20 17:48:56

标签: google-app-engine google-cloud-datastore objectify

我正在使用一个查询,其中我使用条件加载组加载相关实体:

@Entity @Cache
public class Result {
    @Load(WithUser.class) @Index private Ref<User> user;
    @Load(WithTile.class) @Index private Ref<Tile> tile;
    @Load(WithLayer.class) private Ref<Layer> layer;
    @Load(WithOverlay.class) private Ref<Overlay> overlay;
    //..
}

我意识到与我运行的大多数其他查询相比,查询成本高出约100倍。我认为成本太高,因为50个结果加上4x50 getByKey()[对象应当批量处理]不应该在CPM_US 0.005范围内。

是否可以记录objectify如何分解查询以及它对数据存储区执行的请求,以便通过编写更有效的查询来降低成本。

这里有一个类似的问题尚未得到解答:How to enable DEBUG logging on Objectify

1 个答案:

答案 0 :(得分:1)

您可以使用Appengine提供的appstat servlet来探索数据存储操作方面的情况。 我认为最简单的方法是:

  1. 创建一个执行您要探索的查询的Servlet
  2. 使用以下官方说明安装appstat servlet:https://developers.google.com/appengine/docs/java/tools/appstats

  3. 上传到appengine的新版本,调用servlet,然后查看appstat统计信息

  4. 一个更简单的方法可能是尝试在官方的Objectify Google Group上问Jeff; 他反响敏捷,过去一直帮助我。 https://groups.google.com/forum/#!forum/objectify-appengine

    重要说明:由于多种原因,appstats一直在我们的服务器上引发错误并导致崩溃,其中一个原因是日志跟踪太长时间 - 我强烈建议您只在受控的暂存环境中尝试它。