DynamoDB
DynamoDB는 AWS에서 제공하는 완전관리형 NoSQL 데이터베이스 서비스로서 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공한다.
DynamoDB의 특징으로 완전관리형 NoSQL DB라는 점과 뛰어난 확장성이 있다.
- 완전 관리형: 인프라 관리, 백업과 복원 등등 이러한 여러 가지 작업들을 모두 AWS가 자동으로 처리해 주는 것을 말한다.
- 확장성: DynamoDB는 수 백만 개의 요청을 초당 처리하고 테라바이트 이상의 데이터를 저장할 수 있다고 한다.
DynamoDB는 두 가지 종류의 기본 키(primary key)를 지원하는데 오늘은 이 두 가지 키에 대해 공부했다.
Partition key
partiotion key는 한가지 속성으로 구성된 기본키(primary key)를 의미한다.
DynamoDB는 partition key의 값을 내부 해시 함수에 대한 입력으로 사용한다. 해시 함수의 출력에 따라 항목이 저장될 partition(DynamoDB 내부의 물리적 저장소)이 결정이 된다. 즉, 같은 partition key를 갖고 있는 item은 모두 같은 collection에 저장이 된다.
만일 테이블에서 파티션 키만 사용하면 두 item이 동일한 partition key 값을 가질 수 없다. 즉 partition key값은 고유해야 한다.
partition은 아래 사진처럼 각 테이블 당 하나 이상의 partition이 존재하고, 10gb storage 단위로 분산되어 있다고 한다. 만일 partition의 크기가 10gb보다 커지면 DynamoDB는 sort key별로 partition을 분할한다고 한다.
Collection은 partition key는 같지만 sort key가 다른 item의 그룹으로 정의되는데 이 말의 의미는 아래 partition key and sort key에서 설명하겠다.
Partition key and sort key
composite primary key라고도 하는 이 키는 partition key와 sort key 두가지 속성으로 구성이 된다.
아까 partition key를 설명할 때 두 개의 item이 동일한 partition key를 가질 수 없다고 했는데 이 키를 사용하면 동일한 partition key 값을 이용할 수 있다.
동일한 partition key를 가진 item들을 같은 collection에 저장하고 sort key를 이용해 정렬된 순서대로 collection에 저장한다. 이때 sort key는 다른 값을 가져야 한다.
이 말이 위에서 말한 Collection은 partition key는 같지만 sort key가 다른 item의 그룹으로 정의한다는 말이다.
partition key and sort key에 대해 이해하기 쉬운 사진이 있어 가져왔다.
위 사진을 보면 Product ID가 partition key이고 type이 sort key로 사용하고 있다.
Product ID가 2인 Item이 2개 이지만 sort key가 달라서 다른 collection에 저장되는 것을 확인할 수 있다.
partition key를 이용해서 데이터를 저장했을때 장점
- 데이터 분산: DynamoDB는 partition key를 기반으로 데이터를 여러 노드에 분산(분산 데이터베이스)시킨다. 이렇게 하면 모든 데이터를 하나의 위치에 저장하는 것보다 더 높은 확장성과 성능을 기대할 수 있다.
- 빠른 읽기와 쓰기 작업: 같은 파티션 키를 가진 item들은 같은 파티션에 저장되므로, 단일 파티션 키로 읽거나 쓸 때 더 빠른 성능을 얻을 수 있다.
- sort key와의 결합: partition key와 함께 sort key를 사용하면, 각 파티션 내에서 데이터를 효과적으로 정렬하고 필터링할 수 있다. 이를 통해 특정 범위의 item을 빠르게 검색하거나, 특정 partition key 값에 대해 특정 순서로 item을 가져오는 등의 쿼리를 용이하게 만든다.
References
https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/HowItWorks.Partitions.html
https://aws.amazon.com/ko/blogs/database/choosing-the-right-dynamodb-partition-key/
https://dynobase.dev/dynamodb-partition-key/
'성장이야기 > TIL' 카테고리의 다른 글
[개발일지] 230629 Spring WebFlux란? (with. Reactive programming) (0) | 2023.06.29 |
---|---|
[개발일지] 230628 AWS DynamoDB Partition (0) | 2023.06.28 |
[개발일지] 230620 GraphQL과 AppSync를 이용해 실시간 데이터 전송 (With Redis) (0) | 2023.06.20 |
[개발일지] 230616 Quarkus Redis WRONGTYPE Operation against a key holding the wrong kind of value (0) | 2023.06.17 |
[개발일지] 230614 Amplify GraphQL (0) | 2023.06.14 |