Google App Engine的速度有多快?

时间:2010-07-09 10:53:56

标签: java google-app-engine

我正在试验过去2个月的GAE。

我通过上传CSV文件将记录保存到bigtable。

我的测试文件大小为300 KB。

这是我发现的

本地系统

  • 上传时间不到1秒
  • 3秒内处理2500条记录

在Google沙盒上

  • 上传需要5-7秒。

  • 处理文件超时。

  • 只保存60-180条记录。

我的问题是

  1. 为什么需要花费太多时间?
  2. 有没有办法减少这段时间?
  3. Google将此处理计入CPU使用量。他们没有透露h / w他们内部使用的CPU是什么?我的意思是我获得的CPU是否等于或大于PIII?

  4. 编辑 @Drew Sears 的回答。

    目前我在做什么

    1. 将文件上传至GAE
    2. 获取上传的数据字节。通过流,计算行数,将其保存为bigtable。
    3. 有一个独特的字段,id,我的记录。
    4. 现在,我创建队列
    5. int x = linesCount / 50;

      for(int i<0;i=x;i++)
      {
              x = i * 50;
              Queue queue = QueueFactory.getQueue("test-queue");
              queue.add(TaskOptions.Builder.url("/TestQueue")
                      .param("id", id.toString())
                      .param("startIdx",String.valueOf(x))
                      .param("totRec",String.valueOf(50))
              );
          }
      
      int y = linesCount % 50;
      if( y > 0 )
      {
          x = (linesCount / 50) * 50;
          Queue queue = QueueFactory.getQueue("test-queue");
          queue.add(TaskOptions.Builder.url("/TestQueue")
                  .param("id", id.toString())
                  .param("startIdx",String.valueOf(x))
                  .param("totRec",String.valueOf(y))
          );                      
      }
      

      任务处理servlet从存储中读取文件并使用totRec和startIdx处理该文件并将其关闭..

1 个答案:

答案 0 :(得分:4)

这实际上不是测试App Engine可扩展性的好方法。

  1. 如果花费7秒钟发布300KB,那么瓶颈几乎肯定是您的上游带宽,而不是Google的下游带宽,或者与App Engine有关。我经常获得更快的上传速度。
  2. 如果您希望更快地完成请求,请最小化您的RPC调用。每个数据存储区get,put或query都是到外部服务器的往返。如果您循环遍历数百行并在每次循环迭代中执行put,则会产生大量不必要的开销。使用一个数据存储区保存所有实体,您将获得更快的结果。 Guido的AppStats framework是查找RPC优化机会的绝佳工具。