우선 DynamoDB는 NOSQL 데이터베이스이므로 의도적으로 SQL이 아닙니다. 아마 당신은 익숙한 쿼리와 같이 SQL을 수행 할 수있을 것으로 기대해서는 안되며, 두 가지 완전히 다른 유형의 데이터베이스인데 강점과 약점이 있다는 사실에 좌절감을 느껴야합니다.
DynamoDB의 레코드는 해시 키를 사용하여 분할되며 선택적으로 각 파티션 내에서 정렬 될 수 있습니다. 가능한 한 항목이 파티션에 고르게 분산되도록 해시 키를 선택해야합니다. 파티션을 사용하면 DynamoDB를 매우 확장 가능하고 빠르게 만들 수 있습니다. 그러나 필요한 모든 항목에 대해 을 검색하고 정렬 된 순서로 가져 오는 경우 작업에 잘못된 도구를 사용하거나 클라이언트 측에서 항목을 정렬해야합니다.
검색 작업은 모든 파티션을 통과하여 각 파티션의 모든 항목을 반환합니다. 이 시점에서 항목은 해당 파티션 내에서만 정렬 할 수 있습니다.
는 예를 들어, 데이터 세트는 3 개의 파티션으로 분할되고 고려 : 당신이 볼 수 있듯이
Partition A Partition B Partition B
Sort key Sort key Sort key
A D C
C E K
P G L
, 당신은 쉽게 각 파티션을 조회하고 정렬 된 순서에있는 항목을 얻을 수 있습니다. 하지만 스캔하면 정렬 순서가 모두 결정적 일 때 [A, C, P, D, E, G, C, K, L]로 정렬 된 항목을 가져올 수 있습니다. 이 시점에서 직접 항목을 정렬해야합니다.
가끔 "트릭"이라고 표시되는 것은 사용자 자신의 대답에서 언급 한 것처럼 모든 항목에 대해 동일한 값을 가진 "더미"해시 키를 사용하는 것입니다. 이렇게하면 "dummy = 1"을 쿼리하고 정렬 키에 따라 정렬 된 항목을 가져올 수 있습니다. 그러나 이것은 모든 항목이 동일한 파티션에 배치되므로 테이블 크기를 전혀 만들지 않으므로 해시 키의 목적을 완전히 상실합니다. 그러나 실제로 작은 데이터 세트를 보유하고 있어도 DynamoDB를 사용하고 있다면 실용적인 방법으로 사용할 수 있습니다. 그러나 다시 작은 데이터 세트와 이와 같은 사용 사례를 사용하면 처음에는 RDS와 같은 다른 도구를 사용해야합니다.
출처
2017-12-19 08:25:34
JHH
모든 IndexName은 테이블이 아닌 인덱스에서 항목을 반환합니다. – Stu