2010-07-09 43 views
5

我正在试验最近2个月的GAE。Google App Engine的速度有多快?

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

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

这里我发现了什么

本地系统

  • 上传需要不到1秒
  • 处理2500条记录在3秒内

在谷歌沙盒

  • 上传需要5-7秒。

  • 处理文件给出超时。

  • 它只保存60-180条记录。

我的问题是

  1. 为什么它需要太多的时间?
  2. 有没有办法缩短这个时间?
  3. 谷歌计算这个处理CPU使用。他们不公开h/w,因此他们在内部使用什么样的CPU?我的意思是我得到一个CPU是否等于或大于PIII?

编辑的@Drew西尔斯的答案。

我现

  1. 做什么文件上传到GAE
  2. 获取上传的数据字节。通过流,计数行,将其保存到bigtable。
  3. 有一个独特的字段,id,我的记录。
  4. 现在,我创建队列

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过程中的文件并关闭文件..

+0

是你的第一个请求对谷歌沙盒体验的时间?随之而来的要求是什么? – naikus 2010-07-09 11:08:20

+0

您遇到的延迟不是由CPU功率不足引起的,而是由GAE数据存储区(和您的网络连接)的实现引起的。 GAE与同一台服务器上的其他应用程序共享资源,但它们有足够的CPU周期来处理......这是数据存储滞后。 – 2010-07-09 11:15:20

+0

在第一次请求它只保存60次。下一个请求提高速度,它可以节省120-150条记录。现在最多可以达到184条记录 – Manjoor 2010-07-09 11:19:17

回答

4

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

  1. 如果需要7秒来发布300KB,那么瓶颈几乎肯定是您的上行带宽,而不是Google的下行带宽,或者与App Engine有关。我经常获得更快的上传速度。
  2. 如果你想请求更快地完成,尽量减少你的RPC调用。每个数据存储区的获取,放入或查询都是到外部服务器的往返。如果循环数百行并在每次循环迭代中进行put操作,则会产生大量不必要的开销。使用一个数据存储放置所有实体,您将获得更快的结果。 Guido的​​3210是寻找RPC优化机会的好工具。
+1

+1提做一个单独的put()的每一行 – 2010-07-09 21:10:57

+0

我可以最大限度地减少RPC请求,但如何减少数据存储要求的危险?我必须保存需要3k数据库的3k记录(或makePersistant()调用我的情况)。是否有批量保存方法? s – Manjoor 2010-07-10 10:35:27

+0

同样的事情。每个数据存储区请求都是RPC调用。是的,数据存储允许您在一次调用中存储多个实体。在Python中,这只是db.put()和一系列实体;我不知道Java中的语法是什么。 – 2010-07-10 12:20:53