Google App Engine投影费用超过1

时间:2015-12-17 13:43:22

标签: java google-app-engine projection objectify

我正在尝试使用Projection降低数据存储成本。我已经读过投影查询只需要1次读取操作,但在我的情况下,投影费用超过1.以下是代码:

      Query<Finders> q = ofy().load().type(Finders.class).project("Password","Country");
      for(Finders finder:q)
      {
          resp.getWriter().println(finder.getCountry()+" "+finder.getPassword());
      }

执行此操作时,q对象包含6个项目,并且要检索这6个项目,需要6个读取操作,如Appstats中所示。 谁能告诉我这里有什么问题?

1 个答案:

答案 0 :(得分:0)

要读取所有项目(如果它们都适合,则使用单个读取操作)在查询上调用.list(),以获得List<Finders>。您选择迭代查询,并且很可能不依赖于从数据存储区中读取的单个(可能是巨大的),而是更多地包容。

投影进入图片的地方是完全不同的:如果您有许多字段的实体,或某些非常大的字段,并且在某种情况下您知道您只需要某个字段子集(特别是如果它不需要&#34;某些字段非常大&#34;),那么投影是一个非常明智的想法,因为它避免阅读你不需要的东西。

这使得(例如)10个实体的某些获取更有可能读取单个数据存储区 - 对单个数据存储区读取的数量有字节限制,因此,如果通过仔细选择和选择你实际需要的字段,你只读(比方说)每个实体10k,而不是(比方说)每个实体500k,那么显然你可能需要从数据存储中读取更少的数据。

但是如果你不用.list()进行大量的大量阅读,而是通过迭代逐个实体读取,那么很可能你仍会得到多次读取 - 基本上,通过迭代,你已经说过想要那个! - )