2012-12-12 2 views
2

batch_get_item을 사용하여 테이블에서 여러 항목을 요청하려고합니다. DynamoDB 설명서에서 PHP 예제를 따르고 있지만 기대하는 결과를 얻지 못하고 있습니다. DyanmoDB : 응답을 얻지 못했습니다. batch_get_item을 사용하려고합니다.

다음

코드입니다 :

$batch_array = array(); 
$batch_array[]= array ('HashKeyElement' => 
array(AmazonDynamoDB::TYPE_STRING => 'V1L3M5O5L1W8R5B6D2Q1S8V0B3R8M7A6R0X0')); 

$options = array (
    'RequestItems' => array(
     'profile_dev' => array (
      'Keys' => $batch_array 
      ) 
    ) 
); 

$result = $this->db->batch_get_item($options); 

대신 데이터를 받고, 나는 매우 긴 반응을 얻고있다, 나는 그것의 꼬리 끝에서 관련 정보를 포함하고 있습니다 :

[x-aws-body] => {"RequestItems":{"profile_dev":{"Keys":[{"HashKeyElement":{"S":"V1L3M5O5L1W8R5B6D2Q1S8V0B3R8M7A6R0X0"}}]}}}) [body] => CFSimpleXML Object ([__type] => com.amazon.coral.validate#ValidationException [message] => One or more parameter values were invalid: The provided key size does not match with that of the schema) [status] => 400)) 

이 테이블의 hashKey는 문자열입니다. rangeKey가 있지만 hashKey와 일치하는 모든 행을 얻을 수 있도록 hashKey를 사용하고 있습니다. 내가 뭘 놓치고 있니?

답변

5

DynamoDB 설명서 (및 SDK 샘플)에는 수많은 버그가 있습니다. 설명서 및 실제 SDK 코드는 hashKeyElement 만 사용하지만 실제로 테이블에 hashKey와 rangeKey가 모두있는 경우 사용해야합니다.

hashKey와 rangeKey를 모두 사용하면 호출이 효과적입니다.

+0

예, 그들이 어떤 점에서 끔찍한 문서를 가지고 : 여기 YourTable '

// Instantiate the class $dynamodb = new AmazonDynamoDB(); $response = $dynamodb->query(array( 'TableName' => 'YourTable', 'HashKeyValue' => array(AmazonDynamoDB::TYPE_STRING => 'YourHashKey'), )); 

참조 테이블에 해시 키'YourHashKey '모든 항목을 얻을 수있는 PHP SDK를 사용하는 예입니다. getItem API 문서는 해시 범위를 사용하여 항목을 가져와야한다는 것을 나타냅니다. 나는이 우연한 제약 조건 하에서 주어진 이런 종류의 키들에 대한 좋은 유스 케이스를 아직 모르고있다. –

+0

@DavidPelaez 단일 항목을 얻으려면 두 항목을 모두 제공해야하지만 항목 집합을 가져 오려면 먼저 항목을 쿼리하고 두 번째 항목을 기반으로 정렬 된 모든 항목을 가져올 수 있습니다. –

1

가져 오기 (또는 일괄 처리)하려면 가져 오는 모든 항목의 키를 완전히 정의해야합니다. 단일 호출을 사용하여 동일한 hashKey를 가진 모든 행을 검색하려는 경우 쿼리를 찾는 것처럼 보입니다.

+0

아니요, 다양한 해시 키와 일치하는 항목을 찾고 있습니다. 쿼리는 다른 목적으로 사용되며 쿼리는 단일 테이블에서 작동합니다. – EastsideDeveloper

-1

BatchGet을 사용할 필요가없는 경우 Query을 사용해야합니다. http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/LowLevelPHPQuerying.html

+0

아니요, 특별히 BatchGetItem의 사용법을 찾고 있습니다. 동일한 hashKey와 일치하지 않는 여러 항목을 검색하는 중이고 다른 테이블에서 검색하는 경우도 있습니다. 나는 대답을 주었다. Amaazon SDK 및 샘플 코드가 잘못되었습니다. – EastsideDeveloper

+0

'BatchQuery'가없고 'BatchGet'만 제공됩니다. GET은 해시 및 범위를 알 수 있음을 의미합니다. BatchQuery는 멋진 기능이지만, 존재하지 않습니다. 문서 또는 PHP SDK에서 잘못된 부분이 없거나 정확하지 않을 수도 있지만 잘못된 것은 아닙니다. – greg

+0

또한 DynamoDB와 동일한 지역에서 EC2를 사용하는 경우 왕복 시간이 4ms 미만이므로 BATCH 기능을 사용한다고해서 여러 요청을 실행하는 것과 별 차이가 없습니다. – greg

관련 문제