我正在创建一个iOS应用程序,允许用户写出让状态更新说明,人们可以对其进行评论,就像它一样,以多种方式与它进行交互,基本上状态更新具有多个属性将与它一起存储。想象一下,一个应用程序的主屏幕将超过50个这些状态更新表示为表格视图。iOS - Amazon S3 Slow Download
现在把目光转移到专注于练习/演示应用程序,一个试图在大型游戏开始前掌握技术的开发者(这就是我!)所以基本上,我已经开始在新加坡建立一个S3存储桶。我住在新加坡,所以附近有一台服务器,确实一切都应该快速而顺畅。除此之外,它不是。它缓慢,并开始让我很烦恼。
我知道一个应用程序,使用S3加载高清晰度全景图像与评论,喜欢等,它需要一秒或更多的所有这些数据加载。我不知道他们是如何实际执行这个过程的,我知道他们将这些图像存储在S3上,但我知道的就是这些。在我的初学者演示中,我只需上传一些文本(比如说20)然后下载它们,而我的60 mbps WiFi下需要15秒钟!这些文本甚至不超过每句话,它们都是短语,所以我在这里真的很困惑。
我有CloudFront设置,但不是它的网站?我有管理分布和URL的所有设置,但如何在我的代码中设置?这可能是我最大的问题,需要在我的其他应用程序中稍后再发布。即便如此,我住在新加坡,并且存储桶位于新加坡服务器,因此CloudFront用于自我测试/练习不是强制性的。
我觉得这非常混乱,这里是我生成的一些注释代码,任何问题,导致它很慢的误解?
- (void)loadObjects {
S3ListObjectsRequest *listObjectRequest = [[S3ListObjectsRequest alloc] initWithName: @"testbucketquotes.rohanprostudios"];
S3ListObjectsResponse *listObjectResponse = [[AmazonClientManager s3] listObjects:listObjectRequest];
if(listObjectResponse.error != nil)
{
}
else
{
S3ListObjectsResult *listObjectsResults = listObjectResponse.listObjectsResult;
if (objects == nil) {
objects = [[NSMutableArray alloc] initWithCapacity:[listObjectsResults.objectSummaries count]];
}
else {
[objects removeAllObjects];
}
// By defrault, listObjects will only return 1000 keys
// This code will fetch all objects in bucket.
NSString *lastKey = @"";
for (S3ObjectSummary *objectSummary in listObjectsResults.objectSummaries) {
if ([[objectSummary key] rangeOfString: @"UploadedQuote"].location != NSNotFound) {
[objects addObject:[objectSummary key]];
lastKey = [objectSummary key];
}
}
while (listObjectsResults.isTruncated) {
listObjectRequest = [[S3ListObjectsRequest alloc] initWithName: @"testbucketquotes.rohanprostudios"];
listObjectRequest.marker = lastKey;
listObjectResponse = [[AmazonClientManager s3] listObjects:listObjectRequest];
if(listObjectResponse.error != nil)
{
break;
}
listObjectsResults = listObjectResponse.listObjectsResult;
for (S3ObjectSummary *objectSummary in listObjectsResults.objectSummaries) {
if ([[objectSummary key] rangeOfString: @"UploadedQuote"].location != NSNotFound) {
[objects addObject:[objectSummary key]];
}
lastKey = [objectSummary key];
}
}
if (objects.count) {
for (int i = 0; i <= objects.count - 1; i++) {
S3GetObjectRequest *req = [[S3GetObjectRequest alloc] initWithKey:[objects objectAtIndex: i] withBucket: @"testbucketquotes.rohanprostudios"];
`// asynchronously loads text (adds to operation queue)`
AsyncQuoteDownloader *quote = [[AsyncQuoteDownloader alloc] initWithRequest:req andViewController: self];
[operationQueue addOperation: quote];
// in 'AsyncQuoteDownloader' when finished calls a method in this view controller adding the response to an array and reloading a table
}
}
}
});
}
我的代码有什么问题,使它滞后很多?如果成像服务需要1秒钟才能加载HQ图像,并且喜欢和评论等需要1-2秒,那么我认为这将花费毫秒时间。
感谢您的帮助......
更新
好了,所以按键的重复,似乎并没有成为这里的问题,而是对象的下载。有什么想法吗?谢谢...
什么是DynamoDB?我没有听说过的东西,我会检查出来,但是通过获得一组匹配的id并获取匹配,这意味着什么。 – MCKapur
嗨,我已经更新了我的问题,我想你可能会谈论 – MCKapur
DynamoDB是在SSD支持的存储上运行的亚马逊版本的键值存储(它是一个速度非常快的NoSQL数据库)。上面的代码片段只是列出了表格 - 在添加数据之前它显然是空的。我建议你花一些时间阅读AWS文档。它们写得非常好,并且能够为您提供比SO海报更深入的帮助。 – jamieb