DynamoDB에 100 행의 데이터가 있고 경로가있는 API가 있습니다. api/get/{number}
이제 number = 1 api가 처음 10 개의 값을 반환해야합니다. number = 2라고 말하면 다음 10 개의 값을 반환해야 합니다. 쿼리, lastEvaluatedKey 및 정렬 기준으로 이와 같은 작업을 수행했습니다 createdOn
. 이제 사용 사례는 사용자가 number = 2 이후에 number = 10을 전달하면 lastEvaluatedKey는 여전히 2 페이지의 값이고 결과는 3 페이지의 데이터가됩니다. 데이터를 직접 가져올 수있는 방법은 무엇입니까? 또한 사용자가 숫자 = 3에서 숫자 = 1로 이동해도 데이터는 1 페이지가 아닙니다.
HTML에서 페이지 매김을 기반으로 API 호출을 만들기 위해 이것을 사용하고 있습니다.
Java 1.8 및 aws-java-sdk-dynamodb
.
DynamoDB의 비 순차적 페이지 매김은 어렵습니다. 항상 효율적이어야하는 작업 인 경우 데이터 모델을 설계해야합니다. 특정 사례의 권장 사항을 보려면 데이터 및 액세스 패턴에 대한 자세한 내용이 필요합니다.
일반적으로ExclusiveStartKey
쿼리 호출에서 속성 을 설정하는 옵션이 있습니다. 이는 관계형 데이터베이스의 오프셋과 유사하지만 유사하고 동일하지는 않습니다. 는 ExclusiveStartKey
쿼리가 테이블뿐 아니라 다수의 데이터를 의미하는 것입니다 후 열쇠입니다.
즉, 일련 번호가 아닌 이상 일반적으로 추측 할 수 없습니다. 이상적이지 않습니다.
순차적 페이지 매김의 경우, 즉 사용자가 1 페이지에서 2 페이지로, 2 페이지에서 3 페이지 등으로 이동합니다. 요청에서 토큰으로 전달할 수 있지만 사용자가 다른 방향으로 이동하면 작동하지 않습니다. 2 페이지로 이동하거나 무작위로 14 페이지로 이동합니다.
귀하의 경우 에는 제한된 양의 데이터-100 개 항목 만 있으므로 특정 사례에 대한 내 솔루션은 모든 항목을 쿼리하고 응답의 항목 수를 n * 10
, n
결과 페이지 위치 로 제한하는 것입니다. 그런 다음 해당 결과의 마지막 10 개 항목을 고객에게 반환합니다.
이것은 규모 (시간 + 비용) 에서 비용 이 많이 드는 솔루션 이지만 다행히도 많은 사람들이 페이지 매김을 사용하여 페이지 7 또는 8로 이동하지 않을 것입니다 ( Google 검색 결과의 2 페이지에 본문을 묻을 수 있음 ).
Yan Cui가 Hackernoon에이 문제에 대한 흥미로운 게시물을 썼습니다 . 확인해보세요.