Amazon DynamoDB는 어떤 규모에서도 10밀리초 미만의 성능을 제공하는 키-값 및 문서 데이터베이스입니다. 완전관리형의 내구성이 뛰어난 다중 리전, 다중 활성 데이터베이스로서, 인터넷 규모 애플리케이션을 위한 보안, 백업 및 복원, 인 메모리 캐싱 기능을 기본적으로 제공합니다. DynamoDB는 하루에 10조 개 이상의 요청을 처리할 수 있고, 초당 2,000만 개 이상의 피크 요청을 지원할 수 있습니다.
일관성 모델
- 최종적 일관된 읽기(기본값) – 최종 일관성 옵션은 읽기 처리량을 최대화합니다. 그러나 최종적 일관된 읽기는 최근 완료한 쓰기 결과를 반영하지 못할 수 있습니다. 모든 데이터 사본은 일반적으로 1초 내에 일관성을 가지게 됩니다. 짧은 시간 이후 읽기를 반복하여 갱신한 데이터를 반환해야 합니다.
- 강력한 일관된 읽기 – DynamoDB는 최종 일관성 외에도 애플리케이션 또는 애플리케이션의 요소에서 요구하는 경우 강력한 일관된 읽기를 요청할 수 있는 유연성과 제어도 제공합니다. 강력한 일관된 읽기는 읽기 전에 성공적인 응답을 수신한 모든 쓰기를 반영한 결과를 반환합니다.
- ACID 트랜잭션 - DynamoDB 트랜잭션에서는 개발자에게 단일 AWS 계정 및 지역에서 ACID(원자성, 일관성, 격리성 및 지속성)를 제공합니다. 단일 논리 비즈니스 작업의 일부로 여러 항목에 대한 통합된 삽입, 삭제 또는 업데이트가 필요한 애플리케이션을 구축하는 경우 트랜잭션을 사용할 수 있습니다.
읽기/쓰기 용량 모드
읽기/쓰기 용량 모드에서 설정할 수 있는 모드는 읽기 및 쓰기 처리량에 대한 청구 방법과 관리 방법에 따라 Provisioned Mode, On-Demand Mode가 있습니다.
용량 유닛(Capacity Units)이란 1초당 읽거나 쓸 수 있는 데이터의 단위를 말합니다. 읽기 용량(Read Capacity Unit 줄여서 RCU)은 초당 4KB의 처리 단위로 측정이 되며, 초당 4KB 데이터를 읽어들이는데 1RCU가 소비됩니다. RCU를 계산할 시, 4KB의 배수로 계산을 하기 때문에 1KB의 데이터를 읽는다고 해도 1RCU가 고정적으로 소비됩니다. DynamoDB에서는 데이터를 읽을 때 일관성이 유지되는 정도에 따라 Eventually Consistent Reads, Strongly Consistent Reads 두 가지의 일관성 모델을 지원합니다.
- 최종적 일관된 읽기(Eventually Consistent Reads) - DynamoDB 테이블에서 데이터를 가져올 때 데이터가 최신 버전이 아닐 가능성이 있는 읽기 일관성 모델입니다. DynamoDB 테이블에 데이터를 쓸 때 약 1초 정도의 지연시간이 있기 때문에, 데이터를 읽은 후 읽기 요청을 한 번 더 반복하여 최신 데이터를 가져올 수 있습니다. 1RCU 당 2회의 읽기 작업을 수행할 수 있습니다.
- 강력한 일관된 읽기(Strongly Consistent Reads) - 항상 최신 버전의 데이터를 응답하는 읽기 일관성 모델입니다. 이 모델은 1RCU 당 1회의 읽기 작업을 수행할 수 있습니다. 같은 사이즈의 데이터를 처리하는데 Eventually Consistent Reads 모델보다 더 많은 RCU가 필요함으로 가격이 더 들 수 있고, 읽어들일 때의 지연시간이 더 길 수 있습니다.
How is work?
- 테이블— 다른 데이터베이스 시스템과 마찬가지로 DynamoDB 는 데이터를 테이블에 저장합니다. 테이블은 데이터의 집합입니다. 예를 들어, 친구, 가족 또는 기타 관심 있는 사람에 대한 정보를 저장하는 데 사용할 수 있는 People이라는 예제 테이블을 살펴 봅니다. 또한 Cars 테이블에 사람들이 운전하는 차량에 대한 정보를 저장할 수도 있습니다.
- 항목— 각 테이블에는 0개 이상의 항목이 있습니다. 항목은 모든 기타 항목 중에서 고유하게 식별할 수 있는 속성들의 집합입니다. People 테이블에서 각 항목은 한 사람을 나타냅니다. Cars 테이블의 경우 각 항목은 차량 한 대를 나타냅니다. DynamoDB 의 항목은 여러 가지 면에서 다른 데이터베이스 시스템의 행, 레코드 또는 튜플과 유사합니다. DynamoDB 에서는 테이블에 저장할 수 있는 항목의 수에 제한이 없습니다.
- Attributes— 각 항목은 하나 이상의 속성으로 구성됩니다. 속성은 기본적인 데이터 요소로서 더 이상 나뉠 필요가 없는 것입니다. 예를 들어 People 테이블의 항목에는 PersonID, LastName, FirstName 등의 속성이 있습니다. Department 테이블의 경우 항목에 DepartmentID, Name, Manager 등의 속성이 있을 수 있습니다. DynamoDB 의 속성은 여러 가지 면에서 다른 데이터베이스 시스템의 필드 또는 열과 유사합니다.
Key
- 파티션키
- 파티션키 및 정렬키 - 복합키
파티션 키가 필요한 이유는 무엇인가? DynamoDB의 데이터는 10GB스토리지 단위로 분산되며 하나 이상의 티션으로 구성 되어 있다.
파티션의 키 값은 내부 해시 함수에 대한 입력으로 사용되며 해시 함수의 출력은 항목이 저장되는 파티션을 결정한다. 해시 함수에 의해 파티션이 정해지고 키가 정해졌을때 복합 파티션 키 인 경우 정렬 키 값으로 정렬된다.
파티션 키 요청 제한
DynamoDB는 프로비저닝된 처리량 (읽기 용량 단위(RCU) 및 쓰기 용량 단위(WCU))을 파티션 간에 고르게 분배하고 프로비저닝한 처리량을 사용하여 액세스 패턴을 자동으로 지원합니다. 그러나 액세스 패턴이 단일 파티션 키 값에 대해3000 RCU 또는 1000 WCU 를 초과하는 경우 요청이 ProvisionedThroughputExceededException오류 와 함께 제한될 수 있습니다.
한도를 초과하여 읽거나 쓰는 것은 다음 문제로 인해 발생할 수 있습니다.
- 잘못된 파티션 키 선택으로 인한 데이터의 고르지 못한 분포
- 파티션에서 동일한 키에 대한 빈번한 액세스(가장 많이 사용되는 항목, 핫 키라고도 함)
- 프로비저닝된 처리량보다 큰 요청 비율
요청 제한을 방지하려면 액세스 요구 사항을 충족하고 데이터를 균일하게 배포할 수 있도록 올바른 파티션 키로 DynamoDB 테이블을 설계해야 합니다.
파티션 키 권장 사항
- 높은 카디널리티 속성(고유값이 있는 속성)을 사용합니다.
- 복합 속성을 사용합니다.
- Amazon DynamoDB Accelerator (DAX)를 사용하여 읽기 트래픽이 많을 때 인기 있는 항목을 캐시합니다.
- 쓰기 작업이 많은 사용 사례를 위해 미리 결정된 범위에서 임의의 숫자 또는 숫자를 추가 합니다.
- 접미사 범위 공식 : (Number of writes per second * (roundup (item size in KB),0)* 1KB ) /1000)
- 참고 자료
- 쓰기 샤딩을 사용해 워크로드를 골고루 배포
- GSI 이용한 샤딩, 분산 처리.
- 접미사 범위 공식 : (Number of writes per second * (roundup (item size in KB),0)* 1KB ) /1000)
What is GSI? LSI?
- LSI - 테이블과 파티션 키는 동일하지만 정렬 키는 다른 인덱스입니다.</aside>
- <aside> 💡 LSI를 사용하는 경우 파티션 키 값당 10GB크기 한도가 적용 됩니다.
- GSI - 파티션 키 및 정렬 키가 테이블의 파티션 키 및 정렬 키와 다를 수 있는 인덱스입니다.
- 참고 자료
- 보조 인덱스를 사용하여 데이터 액세스 향상
인덱스 옵션
- KEYS_ONLY— 인덱스의 각 항목은 테이블 파티션 키 및 정렬 키 값, 그리고 인덱스 키 값으로만 구성됩니다. 이KEYS_ONLY옵션은 의 크기를 최소화합니다.
- INCLUDE— KEYS_ONLY에 설명된 속성 외에도 보조인덱스 에서 지정하는 키를 제외한 다른 속성이 포함됩니다.
- ALL— 보조 인덱스에 원본 테이블의 모든 속성이 저장됩니다. 모든 테이블 데이터가 인덱스에 복사되기 때문에ALL프로젝션은 가능한 최대 크기의 보조 인덱스를 생성됩니다.
DynamoDB Streams
DynamoDB Streams은 DynamoDB 테이블의 수정 이벤트를 캡쳐 하는 선택적인 기능입니다. 이러한 이벤트에 대한 데이터가 이벤트 발생 순서대로 준 실시간으로 스트림에 표시 됩니다.
아래의 이벤트중 하나가 발생할 때 마다 Streams 레코드를 기록합닉다.
- 새 항목이 테이블에 추가됩니다. 스트림은 해당 속성을 모두 포함하여 전체 항목의 이미지를 캡처합니다.
- 항목이 업데이트됩니다. 스트림은 항목에서 수정된 속성의 “사전” 및 “사후” 이미지를 캡처합니다.
- 테이블에서 항목이 삭제됩니다. 스트림이 항목이 삭제되기 전에 전체 항목의 이미지를 캡처합니다.
암호화
DynamoDB 테이블의 서버 측 암호화 설정을 선택합니다. 선택할 수 있는 항목은 다음과 같습니다.
- 기본값 : 기본적으로 DynamoDB에서 제공하는 암호화
- KMS-고객 관리형 CMK : AWS KMS 고객 마스터 키를 이용해 테이블을 암호화. 사용자의 계정에서 키를 소유 및 관리
- KMS-AWS 관리형 CMK : AWS KMS 고객 마스터 키를 이용해 테이블을 암호화. 사용자의 계정에서 키를 소유, 관리는 AWS KMS에서 수행
'Server Infra > AWS' 카테고리의 다른 글
AWS Advanced Networking - Specialty 취득 후기 (4) | 2022.01.08 |
---|---|
AWS Database Migration Service (0) | 2022.01.05 |
AWS Elasticsearch Service (0) | 2022.01.05 |
Lambda란? (1) | 2022.01.05 |
AWS Organization (0) | 2022.01.05 |