Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谷歌应用程序引擎预测成本超过1%_Java_Google App Engine_Projection_Objectify - Fatal编程技术网

Java 谷歌应用程序引擎预测成本超过1%

Java 谷歌应用程序引擎预测成本超过1%,java,google-app-engine,projection,objectify,Java,Google App Engine,Projection,Objectify,我试图通过使用投影来降低数据存储成本。我已经读到一个投影查询只需要1次读取操作,但在我的例子中,投影成本超过1。代码如下: Query<Finders> q = ofy().load().type(Finders.class).project("Password","Country"); for(Finders finder:q) { resp.getWriter().println(finder.getCountry()+"

我试图通过使用投影来降低数据存储成本。我已经读到一个投影查询只需要1次读取操作,但在我的例子中,投影成本超过1。代码如下:

      Query<Finders> q = ofy().load().type(Finders.class).project("Password","Country");
      for(Finders finder:q)
      {
          resp.getWriter().println(finder.getCountry()+" "+finder.getPassword());
      }
Query q=ofy().load().type(Finders.class).project(“密码”、“国家”);
对于(查找器查找器:q)
{
resp.getWriter().println(finder.getCountry()+“”+finder.getPassword());
}
执行此操作时,q对象包含6个项,要检索这6个项,需要进行6次读取操作,如Appstats所示。 有人能告诉我这里出了什么问题吗?

要读取所有项目(如果它们都合适,只需一次读取操作),请在查询中调用
.list()
,以获取
列表。您选择了对查询进行迭代,这很可能不依赖于从数据存储中读取的单个(可能是巨大的)数据,而是将数据打包

投影进入图片的位置是完全不同的:如果您有具有许多字段的实体,或者一些字段非常大,并且在特定情况下,您知道您只需要字段的某个子集(特别是如果它不需要“一些非常大的字段”),然后投影是一个非常明智的想法,因为它可以避免阅读你不需要的东西

这使得(例如)10个实体的某次提取很可能需要读取一个数据存储——单个数据存储读取的数据量有字节限制,因此,如果仔细挑选和选择实际需要的字段,则每个实体只能读取(比如)10k,而不是(比如)500k,显然,您可能需要更少的数据存储读取


但是,如果您不使用
.list()
进行一次大规模的读取,而是一个实体一个实体地重复读取,那么很可能您仍然会得到多次读取——本质上,通过迭代,您已经说过您需要这样做!)

我对objectify一无所知,但我相信您可以将结果作为列表获取,也可以在查询中设置分块(批处理)速率。您可能会发现,迭代会将每个结果作为单独的操作来获取。@TimHoffman我的主要任务是通过一次读取操作来获取所有项。。这就是为什么我想使用投影查询。感谢您的回复!。。。我将检索最多100个实体,因此如果使用.list(),将导致1次读取操作还是100次读取操作?我在查询中使用了.list()操作,但它显示了6次读取操作。那么,如何使用list()仅使用1个读取操作来检索条目呢?