2012-11-27 10 views
1

DynamoDB를 사용하고 있습니다. 앱에서 스캔 작업을 수행합니다. 모든 것이 완벽하게 작동합니다. 언젠가 후에, 응답은 아무거나로오고있다. 하지만 예외는 없습니다. ","com.amazonaws.dynamodb.v20111205 번호의 ProvisionedThroughputExceededException를 "나는 자세한 로깅을 사용하는 경우Amazon DynamoDB ProvisionedThroughputExceededException (iOS SDK)

[AmazonLogger verboseLogging]; 

, 내가 좋아하는 일부 로그를 볼 수

"__type "을 사용하여 자세한 로깅을 사용 가능 메시지 ":"테이블의 구성 프로비저닝 처리량의 수준이 초과 된 UpdateTable API "

내 코드는 다음과 같습니다

,

0으로 프로비저닝 수준을 늘리는 것이 좋습니다.
@try { 
    DynamoDBScanRequest *request = /* Create request */; 
    DynamoDBScanResponse *response = [[AmazonClientManager ddb] scan:request]; 
    /* 
    * response is nil if the provisioning throughput is exceeded 
    * and the all retries are over 
    */ 
    ALog(@"Response: %@", response); 
    NSMutableArray *array = response.items; 
    return array; 
} @catch (NSException *exception) { 
    /* 
    * I am expecting the ProvisionedThroughputExceededException 
    * to be thrown here. But its not throwing here. Instead I get the response 
    * as nil above. 
    */ 
    ALog(@"Exception: %@", exception); 
    return nil; 
} 

정확합니까? 누군가 제가 제발 도와 주실 수 있습니까?

감사합니다.

편집 : 사람이 나에게의 거친 아이디어를 줄 수 얼마나 많은 처리량 (모두 읽기/쓰기) 한 TopicID, QuestionID, 질문, 대답, AskedAt, RepliedAt 같은 거의 10 필드와 더불어, QuestionAnswer 테이블에 대해 설정하는 능력을, 질문 유형 등? 감사.

+0

DynamoDB는 사용자가 구성한 프로비저닝 된 처리량을 기반으로 가격이 책정되며, 사용자가 설정 한 것보다 자주 액세스하며 조절됩니다. 실제로 테이블을 스캔 할 필요가 있는지 고려해야 할 필요가 있습니다. 스캔이 전체 테이블을 검사하여 높은 처리량을 얻습니다. 사용 된 첫 번째 NoSQL DB라면 사용법을 조사해야합니다. RDB와 같은 임시 쿼리를 수행 할 수 없으며 시간과 리소스 측면에서 비용이 많이 듭니다. 별도의 테이블로 명시 적 가져 오기를 허용하는 인덱스 관리를 고려하십시오. – codeghost

+0

감사합니다. 스캔을 사용할 경우 @catch 블록에 예외가 던져 질 방법이 없다는 것을 의미합니까? – EmptyStack

+0

로깅이 올바르게 구성되었는지 확인하기 위해 이전의 응답 ALog 메시지가 표시됩니까? catch에 중단을두면 catch가 트리거되기 전에 트리거되거나 try 블록에서 확실히 반환되지 않습니다. 필자는 Dynamo 용 AWS iOS SDK를 사용하지 않았지만 예상치 못한 성능을 보인 다른 API에 대한 경험이 있으므로 catch 블록을 입력하지 않으면 SDK가 이전에 예외를 삼키는 것일 수 있습니다. 전역 예외 처리기를 추가하여 거기에 어떤 것이 있는지 알아볼 가치가 있습니다. – codeghost

답변

4

검색 용량이 프로비저닝 된 것보다 많은 스캔 요청을 시도했으며 "알 수없는 오류가 발생했습니다."라는 일반적인 메시지를 가지고 AmazonClientException을 받았습니다. 우리는 수정 작업을하고 있으며 다음 버전은 설명 된 상황에서 정확하게 DynamoDBProvisionedThroughputExceededException을 반환해야합니다.

응답이 0이 아니라 문제를 재현 할 수 없다고하셨습니다. 예외를 끄려면 [AmazonErrorHandler shouldNotThrowExceptions]으로 전화하십니까? 이 옵션을 사용하면 SDK에서 AmazonClientExceptionAmazonServiceException을 던지지 않습니다. 또한 이전 버전의 SDK를 사용하고있을 수도 있습니다. 1.4.4를 시험해보고 예외가 있는지 확인하십시오. 그것은 차선책이지만 적어도 뭔가 잘못되었을 때 예외를 잡을 수 있어야합니다.

+0

감사합니다. 괜찮아.AWS Console을 사용하여 처리량을 수정하고 내 앱을 저장하는 것이 좋습니다. 처리량 한도를 초과하여 처리량을 수정할 수없는 경우 어떻게됩니까? 사용자가 앱을 원활하게 사용할 수 없습니까? 시간 내 줘서 고마워. – EmptyStack

+0

앱 사용자의 경험은 앱이 예외를받을 때 처리하는 방법에 따라 달라 지거나 귀하의 경우에 nil을받지 못합니다. 두 경우 모두 정상적으로 처리해야합니다. 예를 들어 앱이 잠시 기다렸다가 자동으로 다시 시도하거나 정상적으로 실패하고 사용자에게 알릴 수 있습니다. 일반적으로 충분한 용량 단위를 프로비저닝하고 CloudWatch 경고를 설정하여 앱이 'DynamoDBProvisionedThroughputExceededException'을보기 전에 알림을 수신하고 용량 단위를 높이는 것이 좋습니다. 희망이 도움이됩니다. –

+0

좋습니다. 감사. 응용 프로그램은 용량이 초과되거나 곧 15 분, 1 시간 또는 그 이상이 걸릴 때까지 DynamoDBProvisionedThroughputExceededException을 발생시킵니다. TopicID, QuestionID, Question, Answer, AskedAt, RepliedAt, QuestionType 등 거의 10 개의 필드가있는 QuestionAnswer 테이블에 충분한 용량이 무엇인지 말해 주실 수 있습니까? 답장을 보내 주셔서 정말 감사드립니다. – EmptyStack