사용자가 상태를 업데이트 할 수 있도록 작성하는 iOS 앱을 만들고 사람들이 여러 가지 방식으로 의견을 말할 수 있도록하고 있습니다. 기본적으로 상태 업데이트에는 여러 가지 속성이 있습니다. 그것과 함께 저장 될 것입니다. 이 상태 업데이트가 50 개 이상인 홈 스크린이있는 앱을 테이블보기로 표시한다고 가정 해 보겠습니다.iOS - Amazon S3 느린 다운로드
큰 게임을하기 전에 기술을 습득하려고하는 개발자 인 연습/데모 앱에 눈을 돌리고 초점을 맞춰보세요. 본질적으로 저는 싱가포르에 본사를 둔 S3 버킷을 설치하여 시작했습니다. . 나는 싱가포르에 살고 있기 때문에 근처에 서버가 있으며 모든 것이 빠르고 원활해야합니다. 단지 그것을 제외하고. 그것의 천천히, 그리고 나를 짜증나게하기 시작.
고해상도 파노라마 이미지를 댓글, 좋아요 등으로로드하는 S3을 사용하는 앱을 알고 있으며이 모든 데이터를로드하는 데 약간 더 시간이 걸립니다. 나는 그들이 실제로 프로세스를 수행하는 방법을 잘 모르겠다. 나는 S3에 이미지를 저장한다는 것을 알고 있지만, 내가 아는 것이 전부다. 내 시범 데모에서는 몇 가지 텍스트 (예 : 20)를 업로드 한 다음 다운로드하면 60mbps 무선 랜에서 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
}
}
}
});
}
내 코드가 너무 오래 지연되는 것은 무엇입니까? 이미징 서비스가 좋아요 및 댓글 등으로 HQ 이미지를로드하는 데 1 초가 걸리는 경우 1 ~ 2 초가 걸리므로이 작업은 밀리 초가 걸릴 것이라고 생각했을 것입니다.
는업데이트 확인
... 어떤 도움을 주셔서 감사합니다, 그래서 키의 반복은 여기 문제가 아니라 객체의 다운로드 될 것 같지 않습니다. 이견있는 사람? 감사합니다 ...
DynamoDB의 무엇에
AmazonS3Client
의 엔드 포인트를 설정하는 데 필요한잘 작동? 내가 들었던 것을 들었지만, 나는 그것을 조사 할 것이다. 그러나 일치하는 ID의 배열을 가져 와서 일치를 가져 오는 것이 무엇을 의미 하는가? 이 용어에 대해 혼란 스러울뿐입니다 ... – MCKapur
안녕하세요, 제 질문에 대한 답변을 – MCKapur
으로 업데이트했습니다. DynamoDB는 Amazon의 SSD 지원 스토리지에서 실행되는 키 저장소의 버전입니다 (매우 빠른 NoSQL 데이터베이스). 위의 코드 스 니펫은 테이블을 나열하는 것입니다. 데이터를 추가 할 때까지는 분명히 비어있게됩니다. AWS 문서를 읽는 데 시간을 할애하는 것이 좋습니다. 그것들은 매우 잘 작성되어 있으며 SO 포스터보다 더 심층적 인 도움을 제공 할 수 있습니다. – jamieb