|
我在过去2个月里一直在试验GAE.
我通过上传CSV文件将记录保存到bigtable.
我的测试文件大小为300 KB.
这是我发现的
本地系统
>上传时间不到1秒 >在3秒内处理2500条记录
在Google Sandbox上
>上传需要5-7秒. >处理文件给出超时. >它只保存60-180条记录.
我的问题是
>为什么需要太多时间? >有没有办法减少这个时间? > Google将此处理计入CPU使用.他们没有透露h / w他们在内部使用什么CPU?我的意思是我获得的CPU是否等于或高于PIII?
编辑@Drew Sears的回答.
我目前在做什么
>将文件上传到GAE >获取上传的数据字节.通过流,计数行,将其保存为bigtable. >有一个独特的字段,id,我的记录. >现在,我创建队列
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处理该文件并关闭它.
最佳答案
这实际上不是测试App Engine可扩展性的好方法.
>如果花费7秒钟发布300KB,瓶颈几乎肯定是您的上游带宽,而不是谷歌的下游带宽,或者与App Engine有关.我经常获得更快的上传速度. >如果您希望更快地完成请求,请最小化RPC调用.每个数据存储区get,put或query都是到外部服务器的往返.如果您循环遍历数百行并在每次循环迭代中执行put,则会产生大量不必要的开销.使用一个数据存储区保存所有实体,您将获得更快的结果. Guido的AppStats framework是一个很好的工具,可以找到RPC优化机会. (编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|