-
Hash type key (Partition key)
-> RDB의 프라이머리 키와 같은 역할을 합니다.
-> 테이블에 무조건 하나가 존재해야합니다.
-> 일치(Equal) 방식의 검색만 지원합니다. ( like , > 등은 할수 없습니다. )
-> Partitioning(sharding)에 사용됩니다.
파티션
다이나모디비는 파티션이 10G를 초과하거나 Provisioning Throughput이 일정 수준 이상이 되면 데이터에 대한 Partition을 나눕니다.
이때 파티션을 나누는 기준이 되는 것이 해쉬 키입니다.
해쉬키가 같은 데이터는 같은 파티션에 저장됩니다. 이때 Hash key가 같은 데이터에 요청할 수 있는 throughtput은 해당 파티션이 지원하는 throughtput을 넘지 못한다는 이슈가 발생합니다.
DanamoDB는 기본적으로 파티션의 크기와는 상관 없이 균일한 수용 유닛을 할당 받습니다.
Range type key (sort key)
->일치 , 부등호 , 포함 등의 범위를 지정할 수 있는 검색을 지원합니다.
->같은 파티션키라면 레인지키를 기준으로 정렬됩니다.
ex)
public List<주문데이터> 주문조회(String 주문번호,LocalDateTime 등록일시) { return DdbQuery.<주문>on(dynamoDBMapper()) .withConsistentRead(false) .withS(":hk", 주문번호) .withS(":sk", 등록일시) .withKeyConditionExpression("hk = :hk and begins_with(sk, :sk)") .query(주문DO.class); }
@EqualsAndHashCode(callSuper=false) @DynamoDBTable(tableName="주문") public class 주문DO { @DynamoDBHashKey(attributeName="hk") private String hk; @DynamoDBRangeKey(attributeName="sk") private String sk; @ApiModelProperty(value = "주문번호") @DynamoDBAttribute(attributeName = "주문번호") private String 주문번호; @ApiModelProperty(value = "등록일시") @DynamoDBAttribute(attributeName = "등록일시") @DynamoDBTypeConverted(converter = LocalDateTimeConverter.class) private LocalDateTime 등록일시; }
cf)
ConsistentRead ->
변경되지 않은 데이터를 읽는다 만약 변경된 데이터가 있으면 과거 이미지를 가지고 있는 블록을 읽습니다.
그니까 데이터의 일관성을 보장합니다..
좀 더 자세히 설명하자면 A 라는 sql이 실행하는 도중에 데이터가 변경되더라도 쿼리가 시작된 시점을 기준으로 데이터를 읽습니다.
KeyConditionExpression ->
key ( 해쉬키 , 레인지키)를 통해 조건 표현식을 간단히 적을 수 있습니다.
'개발 > AWS' 카테고리의 다른 글
dynamodb write (0) 2024.08.20 카프카 (0) 2022.03.13 DynamoDB 활용기 (0) 2021.12.28 Athena (0) 2021.12.16 VPC (0) 2021.12.16