2017-12-19 1 views
2

Dynamo DB를 사용하면서 filter를 사용하여 하나의 테이블을 스캔하려고합니다. 예를 들어 글로벌 보조 인덱스를 사용하여 테이블의 특정 행만 스캔 할 수 있습니까?Dynamo DB의 특정 행을 검색하십시오.

+0

'특정 행'은 무엇을 의미합니까? 예를 들어 줄 수 있습니까? –

+0

예를 들어, 내 테이블에 50 행이 있고 일부 특성 ("상태")이 null 인 행만 스캔하려고하며 "상태"값이 15 행으로되어 있다고 가정 할 수 있습니다. 그래서 저는 15 행을 어떻게 든 스캔하려고합니다. – ilce

+0

네, 그러나 테이블 해시/범위 키를 설명하고 쿼리를 기술하십시오. –

답변

3

당신이 상태가 null 말하거나 당신이 스파 스 인덱스의 사용을 훨씬 더 효율적이 아닌 경우, 그것은이 가능합니다 이분법 속성에 대한 스캔하는 경우! 인덱스 키 값 인 경우 AWS 문서 'best practices for GSI'에서

는 스파 스 인덱스

테이블의 모든 항목에 대해

을을 활용, DynamoDB의 만 글로벌 보조 인덱스에 해당하는 항목을 기록합니다 항목에 있습니다. 전역 보조 인덱스의 경우 인덱스 파티션 키와 정렬 키 (있는 경우)입니다. 인덱스 키 값이 모든 테이블 항목에 나타나지 않으면 인덱스가 희박하다고합니다.

희귀 한 글로벌 보조 인덱스를 사용하여 일반적인 특성이없는 테이블 항목을 효율적으로 찾을 수 있습니다. 이렇게하려면 전역 보조 인덱스 특성을 포함하지 않는 테이블 항목이 전혀 인덱싱되지 않는다는 사실을 이용하십시오. 예를 들어 GameScores 테이블에서 특정 플레이어는 "Champ"와 같은 게임에 대해 특정 업적을 얻었을 수 있지만 대부분의 플레이어는 그렇지 않습니다. Champs의 GameScores 테이블 전체를 검색하는 대신 Champ의 파티션 키와 UserId의 정렬 키를 사용하여 글로벌 보조 인덱스를 만들 수 있습니다. 이렇게하면 테이블을 검색하는 대신 색인을 쿼리하여 모든 Champ를 쉽게 찾을 수 있습니다.

인덱스의 항목 수가 테이블의 항목 수보다 상당히 적기 때문에 이러한 쿼리는 매우 효율적입니다. 또한 인덱스에 투영하는 테이블 속성이 적을수록 인덱스에서 소비하는 읽기 용량 단위가 줄어 듭니다.

+0

CanSahin. 고맙습니다. 나는 이것을 시도하고 작동합니다. 다시 감사드립니다. – ilce

4

불가능합니다! 검색은 항상 기본 테이블의 모든 행을 대상으로하며 인덱스 테이블을 응답으로 스캔하면 해당 인덱스 테이블에 포함 된 속성 만 가져옵니다.

예 : 1000 개 행이있는 테이블이 있고 속성 경우 : ID, 이름, 성, 해, 도시, 우편 번호, 당신은 기본 키 "도시"에 해당 테이블에 대한 GSI을 만들고 "우편 번호"를 포함 투영 된 속성으로 사용하고 인덱스 테이블을 다시 스캔하면 1000 개의 행이 모두 처리되지만 응답으로 각 행에 대해 "도시"및 "우편 번호"가 표시됩니다. Gain은 처리량을 낮추지 만 GSI를 만들 때 설정하는 읽기 및 쓰기 용량 단위에 대해 매달 비용이 부과됩니다.

관련 문제