dynamoDB 조회하기
DynamoDB를 조회할 때 사용되는 것이 인덱스이다.
인덱스는 파티션 키, 정렬 키(optional)로 구성되어 있습니다. 테이블을 대표하는 인덱스가 존재하고 그외에도 여러개의 보조 인덱스를 사용하여 조회가 가능합니다
보조 인덱스는 2가지 종류로 나뉩니다. 파티션 키가 테이블의 파티션 키와 일치 여부에 따라서 일치하면 로컬 보조 인덱스, 일치하지 않으면 글로벌 보조 인덱스로 구분됩니다.
글로벌 보조 인덱스는 테이블의 파티션 키와 일치하지 않는 항목을 파티션 키로 가지고 있습니다. 또한 글로벌 보조 인덱스는 언제든 생성 및 수정이 가능합니다.
로컬 보조 인덱스는 테이블의 피타션 키가 동일하지만 정렬 키가 다릅니다. 로컬 보조 인덱스는 테이블을 생성 할 때만 생성이 가능하고 이후에 추가 생성 및 수정 , 삭제가 불가능합니다.
dynamodb에서는 일반 rdb처럼 원하는 조건을 설정해서 조회할 수 없습니다. 사전에 지정한 인덱스로만 검색이 가능합니다. 일반적으로 원하는 정보를 인덱스로 조회한 뒤에 필터로 원하는 조건으로 가공해서 사용합니다. 여기서 필터가 적용되는 시점은 db를 조회할 때 필터가 적용되는 것이 아닙니다. 인덱스로 조건에 맞는 모든 데이터들을 db에서 불러오고 사용자에게 전달되기 전에 필터로 원하는 정보만을 추려서 전달됩니다.
DynamoDB를 자바에서 사용할 때에는 몇가지 선행 작업이 필요합니다.
DynamoDB dynamoDB = new DynamoDB(amazonDynamoDb); // dynamoDB 클라이언트 권한을 획득합니다.
Table table = dynamoDB.getTable(“원하는 테이블 이름”); // 테이블 이름을 설정합니다.
Index index = table.getIndex(“이전에 설정한 보조 인덱스“); // 해당 사항의 경우 글로벌 보조 인덱스를 기준으로
QuerySpec querySpec = new QuerySpec().withKeyConditionExpression(“검색에 사용될 인댁스 파티션값 = :변수 키 and 사용된 인댁스의 정렬키 between :변수1 키 and :변수2 키”)
.withValueMap(new ValueMap().withInt(“:변수 키”, 변수 값).withString(“:변수1 키”,변수1 값).withString(“변수2 키”, 변수2 값));
// 원하는 쿼리문을 작성합니다. 쿼리문에 사용되는 withKeyConditionExpression는 검색할 인덱스를 설정할 때 사용됩니다.
// 테이블 메인 인덱스를 사용 할 때는 별도의 작업이 필요없지만 보조 인덱스로 검색할 때는
// Index index = table.getIndex(“이전에 설정한 보조 인덱스“); 와 같은 보조 인덱스 설정을 해줘야 합니다.
// .withValueMap(new ValueMap().withInt(“:변수 키”, 변수 값).withString(“:변수1 키”,변수1 값).withString(“변수2 키”, 변수2 값))는 쿼리문에 사용될 변수들을 설정해주는 단계입니다.
// 쿼리문 작성에 사용되는 변수들을 넣어줍니다.
// 더 다양한 옵션들이 있으니 자세한 설정은 공식 문서를 참고하시기 바랍니다.
ItemCollection<QueryOutcome> items = index.query(querySpec);
Iterator<Item> iterator = items.iterator();
Item item = null;
Integer count = 0;
https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/QueryingJavaDocumentAPI.html