我正在創建一個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