2014-10-08 2 views
2

현재 DynamoDB를 사용하고 있으며 스캔 중 문제가 발생했습니다. ExclusiveStartKey를 사용하여 순방향으로 페이징 된 결과를 얻을 수 있습니다. 그러나 ScanIndexForward을 true로 설정했는지 또는 false로 설정했는지에 관계없이 스캔 작업에서 정방향으로 결과가 표시됩니다. DynamoDB의 Scan에서 역순으로 결과를 얻으려면 어떻게해야합니까?DynamoDB에서 역순으로 인덱스를 스캔하려면 어떻게합니까?

+0

어떤 API 당신이 코드 – Max

+0

을 보여주십시오 DynamoDB에 액세스하는 데 사용 하시겠습니까? 대부분의 경우 스캔 작업에 대해'ScanIndexForward'를 지정할 수 없습니다. 직접 웹 서비스 호출을하고 있습니까? –

답변

2

ScanIndexForward은을 쿼리하는 인 테이블 또는 인덱스의 범위 키에 따라 내림차순으로 항목을 가져 오는 올바른 방법입니다. AWS API Reference에서 :

(TRUE) 또는 상승 상태 (false) 인덱스 순회 내림차순 지정하는 값. DynamoDB는 범위 키로 결정된 요청 순서를 반영한 ​​결과를 반환합니다. 데이터 유형이 인 경우 결과는 숫자 순으로 반환됩니다. String 유형의 경우 결과는 ASCII 문자 코드 값의 순서로 반환됩니다. 이진 유형의 경우 DynamoDB는 이진 값을 비교할 때 이진 데이터의 각 바이트를 부호가없는 으로 처리합니다. docs for Scan을 바탕으로

, 나는 역에서 스캔 수있는 방법은 없습니다 결론. 그러나 필요한 경우 DynamoDB를 올바르게 사용하지 않는다고 말합니다. DyanmoDB와 같은 데이터베이스의 스키마를 디자인 할 때는 예상 쿼리를 기반으로 스키마를 계획하여 거의 모든 응용 프로그램 쿼리가 좋은 인덱스를 갖도록해야합니다. 스캔은 시스템 관리자 작업이나 MapReduce 또는 분석에 추가로 제공됩니다. "스캔 작업은 항상 전체 테이블을 스캔 한 다음 값을 필터링하여 원하는 결과를 제공합니다. 결과 세트에서 데이터를 제거하는 추가 단계를 추가해야합니다." (Query and Scan Performance) 그러면 performance problems and other issues이 될 수 있습니다.

DynamoDB는 근본적으로 전통적인 관계형 데이터베이스로 작업하는 것과는 다르며 사용 방법을 크게 변경해야합니다. DynamoDB의 스토리지 가용성 및 성능, 안정성 및 가용성이 제한 사항을 수용하는 데 가치가 있는지 여부를 결정해야합니다.

+2

네 말이 맞지만 ScanIndexForward는 Scan이없는 쿼리에서 작동합니다. 쿼리에서는 해시 키와 범위 키를 다른 필드에 대해서만 설정할 수 있습니다. DynamoDB에 완전히 지쳤습니다. –

+0

H/R 키 이외의 속성/필드에서 쿼리 필터를 사용할 수 있습니다. http : //aws.amazon.com/blogs/aws/modified-queries-and-updates-dynamodb/ –

+0

댓글을 명확히하기 위해. 쿼리 작업은 해시 및 범위 키 조건에서만 수행해야합니다. 추가 필드를 필터링 할 수있는 선택적 쿼리 필터가 있습니다. 그러나 쿼리 작업은 해시 및 범위 키 조건과 일치하는 모든 항목을 계속 읽습니다. 필터와 일치하는 행만 반환합니다. 이상적으로 해시 및 범위 키 조건은 너무 많은 행을 읽지 않도록 가능한 한 좁아야합니다. –

0

현재 DynamoDB 검사는 정렬 된 결과를 반환 할 수 없습니다.

해시 키 및 범위 필드와 함께 새로운 GSI (Secondary Gear Index)를 사용하는 쿼리를 사용해야합니다. 트릭은 테이블의 모든 데이터에 동일한 값이 할당 된 해시 키를 사용하는 것입니다.

모든 데이터에 대해 새 필드를 만들고 "상태"라고 설정하고 값을 "확인"또는 비슷한 것으로 설정하는 것이 좋습니다.

그런 다음 쿼리가 다음과 같을 것이다 정렬 된 모든 결과를 얻을 : GSI 쿼리를 작성하는 방법에 대한

{ 
    TableName: "YourTable", 
    IndexName: "Status-YourRange-index", 
    KeyConditions: { 
     Status: { 
      ComparisonOperator: "EQ", 
      AttributeValueList: [ 
       "OK" 
      ] 
     } 
    }, 
    ScanIndexForward: false 
} 

워드 프로세서 여기에 찾을 수 있습니다 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html#GSI.Querying

관련 문제