공부, 기록

[AWS] DynamoDB 본문

공부/DATABASE

[AWS] DynamoDB

무는빼주세요 2024. 9. 15. 18:34

 

 

AWS 문서를 기반으로 DynamoDB 의 전체적인 개념과 특징에 대하여 공부해보고자 합니다.

DynamoDB는 파티셔닝의 NoSQL DB로 모든 규모에서 10밀리초 미만의 성능을 제공하는 서버리스, 완전관리형 데이터베이스입니다.

 

DynamoDB의 특징

Serverless

DynamoDB는 서버를 프로비저닝하거나 패치, 관리, 설치, 유지 보수가 없습니다. DynamoDB는 가동 중지가 발생하지 않는 유지 관리를 제공합니다. 버전(메이저, 마이너 또는 패치)이 없으며 유지 관리 기간도 없습니다.

DynamoDB의 온디맨드, 프로비저닝 모드를 선택하여 구성할 수 있습니다. 

NoSQL

NoSQL 데이터베이스인 DynamoDB는 기존의 관계형 데이터베이스보다 향상된 성능, 확장성, 관리성 및 유연성을 제공하도록 특별히 구축되었습니다. 다양한 사용 사례를 지원하기 위해 DynamoDB는 Key-Value 및 Document 데이터 모델을 모두 지원합니다.

JOIN을 지원하지 않기 때문에 데이터 모델을 비정규화하는 것이 좋습니다. DynamoDB는 강력한 읽기 일관성과 ACID 트랜잭션을 제공합니다.

완전관리형

설정, 구성, 유지 관리, 3개의 AZ 노드를 사용한 고가용성, 하드웨어 프로비저닝, 보안, 백업, 모니터링 등을 처리합니다. DynamoDB는 업그레이드가 필요하지 않고 가동 중지가 발생하지 않으면서 가용성, 신뢰성, 성능, 보안 및 기능을 지속적으로 개선합니다.

규모를 따지지 않는 한 자릿수 밀리초의 성능

DynamoDB는 모든 규모에서 10밀리초 미만의 성능을 제공하여 관계형 데이터베이스의 성능과 확장성을 개선하기 위해 특별히 개발되었습니다.

DynamoDB는 고성능 워크로드에 최적화되어 있으며 효율적인 데이터베이스 사용을 장려하는 API를 제공합니다. 

 

Amazon DynamoDB의 핵심 구성 요소

테이블

다른 데이터베이스 시스템과 마찬가지로 DynamoDB는 데이터를 테이블에 저장합니다. 테이블은 데이터의 집합입니다. 

항목

각 테이블에는 0개 이상의 항목이 있습니다. 항목은 모든 기타 항목 중에서 고유하게 식별할 수 있는 속성들의 집합입니다. DynamoDB의 항목은 여러 가지 면에서 다른 데이터베이스 시스템의 행, 레코드 또는 튜플과 유사합니다. DynamoDB에서는 테이블에 저장할 수 있는 항목의 수에 제한이 없습니다.

속성

각 항목은 하나 이상의 속성으로 구성됩니다. 속성은 기본적인 데이터 요소로서 더 이상 나뉠 필요가 없는 것입니다. DynamoDB의 속성은 여러 가지 면에서 다른 데이터베이스의 컬럼과 유사합니다.

프라이머리 키

테이블을 생성할 때는 테이블 이름 외에도 테이블의 기본 키를 지정해야 합니다. 기본 키 속성에 허용되는 데이터 형식은 문자열, 숫자 또는 이진수 입니다.

DynamoDB는 두 가지의 기본 키를 지원합니다.

  • 파티션 키 - 하나의 속성으로 구성되는 단순 기본 키파티션 키로만 구성되어 있는 테이블에서는 어떤 두 개의 테이블 항목도 동일한 파티션 키 값을 가질 수 없습니다.
  • DynamoDB는 내부 해시 함수에 대한 입력으로 파티션 키 값을 사용합니다. 해시 함수 출력에 따라 항목을 저장할 파티션(DynamoDB 내부의 물리적 스토리지)이 결정됩니다.
  • 파티션 키 및 정렬 키 - 두 개의 속성으로 구성됩니다. 첫 번째 속성은 파티션 키이고, 두 번째 속성은 정렬 키입니다.파티션 키 값이 동일한 모든 항목은 정렬 키 값을 기준으로 정렬되어 함께 저장됩니다.
  • DynamoDB는 내부 해시 함수에 대한 입력으로 파티션 키 값을 사용합니다. 해시 함수 출력에 따라 항목을 저장할 파티션(DynamoDB 내부의 물리적 스토리지)이 결정됩니다.

보조 인덱스

DynamoDB는 다음과 같이 두 가지 종류의 인덱스를 지원합니다.

  • 글로벌 보조 인덱스(GSI) - 파티션 키 및 정렬 키가 테이블과 다를 수 있는 인덱스입니다.
  • 로컬 보조 인덱스(LSI) - 기본 테이블과 파티션 키는 동일하지만 정렬 키가 다른 인덱스입니다.

DynamoDB의 각 테이블에는 글로벌 보조 인덱스 20개(기본 할당량)와 로컬 보조 인덱스 5개의 할당량이 있습니다.

 

테이블 클래스

Standard 클래스와 Standard-Infrequent Access(DynamoDB Standard-IA) 클래스로 제공이 됩니다. 자주 액세스하지 않는 대용량 데이터가 있는 경우에 Standard-IA 클래스 사용을 고려할 수 있습니다.

  Standard Standard-IA
처리량 비용 낮음 비용 높음
스토리지 비용 비용 눞음 비용 낮음

테이블 클래스 업데이트는 백그라운드 프로세스입니다.

테이블 클래스 업데이트 중에도 여전히 테이블에 정상적으로 액세스할 수 있습니다. 테이블 클래스를 업데이트하는 시간은 테이블 트래픽, 스토리지 크기 및 기타 관련 변수에 따라 다릅니다.

30일 후행 기간에는 테이블에 대한 테이블 클래스 업데이트가 2개 이상 허용되지 않습니다.

 

파티션

Amazon DynamoDB는 데이터를 파티션에 저장합니다. 파티션은 SSD로 AWS 리전 내의 여러 가용 영역에 자동으로 복제됩니다. 

데이터는 기본키 값을 해시 함수 처리를 하여 파티션에 할당 및 저장 합니다.

테이블을 생성할 때 테이블 초기 상태는 CREATING입니다. 이 단계 동안, DynamoDB는 테이블에 충분한 파티션을 할당하여 프로비저닝된 처리량 요구 사항을 만족할 수 있도록 합니다. 테이블 상태가 ACTIVE로 전환되면 테이블 데이터를 쓰거나 읽을 수 있습니다.

DynamoDB는 다음과 같은 상황에서 테이블에 추가 파티션을 할당합니다.

  • 기존 파티션이 지원할 수 있는 한도를 초과하여 테이블의 할당된 처리량 설정을 늘리는 경우.
  • 기존 파티션 용량이 다 차서 추가 스토리지 공간이 필요한 경우.

파티션 관리는 백그라운드에서 자동으로 이루어지므로 애플리케이션에는 표시되지 않습니다. 테이블은 사용 가능한 처리량을 유지하며 프로비저닝된 처리량 요구 사항을 완전히 지원합니다.

DynamoDB의 글로벌 보조 인덱스도 파티션으로 구성됩니다. 글로벌 보조 인덱스의 데이터는 기본 테이블의 데이터와 별도로 저장되지만 인덱스 파티션은 테이블 파티션과 동일한 방식으로 동작합니다.

 

DynamoDB 읽기 및 쓰기

읽기 정합성

Amazon DynamoDB는 테이블, 로컬 보조 인덱스(LSI), 글로벌 보조 인덱스(GSI), 스트림에서 데이터를 읽습니다. 최종 읽기 일관성과 강력히 일관된 읽기라는 두 가지 읽기 일관성 옵션을 제공합니다. GSI와 스트림에서의 읽기는 최종 읽기 일관성만 적용됩니다.

DynamoDB는 읽기 작업이 항상 커밋된 값을 반환하도록 합니다. 읽기는 성공하지 못한 쓰기의 항목을 절대 보여 주지 않습니다. 

 

최종적 일관된 읽기 (Eventually Consistent Reads)

최종적 일관성 읽기는 모든 읽기 작업의 기본 읽기 일관성 모델입니다.

DynamoDB 테이블이나 인덱스에 최종 읽기 일관성을 실행할 때 최근에 완료된 쓰기 작업의 결과가 응답에 반영되지 않을 수 있습니다. 잠시 후 읽기 요청을 반복하면 응답이 최근 항목을 반환합니다. 

최종 읽기 일관성의 비용은 강력히 일관된 읽기 비용의 절반입니다.

강력한 일관된 읽기 (Strongly Consistent Reads)

GetItem, Query, Scan 같은 읽기 작업은 선택적 ConsistentRead 파라미터를 제공합니다. ConsistentRead를 true로 설정하면 DynamoDB는 성공한 모든 이전 쓰기 작업의 업데이트가 반영된 최신 데이터가 포함된 응답을 반환합니다.

강력히 일관된 읽기는 테이블과 로컬 보조 인덱스에서만 지원됩니다. 

글로벌 테이블 읽기 일관성 (Global tables read consistency)

DynamoDB는 다중 활성 및 다중 리전 복제를 위한 글로벌 테이블도 지원합니다. 글로벌 테이블은 서로 다른 AWS 리전에 있는 여러 복제본 테이블로 구성됩니다.

복제본 테이블의 항목이 변경되면 동일한 글로벌 테이블에 있는 다른 모든 복제본에 변경 내용이 복제됩니다. 복제는 일반적으로 1초 내에 이루어지며 최종 일관성을 갖습니다. 

 

 

읽기 및 쓰기 작업

읽기 작업의 용량 단위 소비량

DynamoDB 읽기 요청은 강력히 일관된 읽기, 최종 읽기 일관성 또는 트랜잭션 읽기 요청일 수 있습니다.

  • 최대 4KB 항목의 강력히 일관된 읽기 요청에는 하나의 읽기 단위가 필요합니다.
  • 최대 4KB 항목의 최종적으로 일관된 읽기 요청에는 절반의 읽기 단위가 필요합니다.
  • 최대 4KB 항목의 트랜잭션 읽기 요청에는 2개의 읽기 단위가 필요합니다.

읽기 항목 크기(RCU)는 다음 4KB 배수로 반올림됩니다. 예를 들어, 3,500바이트의 항목을 읽으려면 4KB 항목을 읽을 때와 동일한 처리량이 소비됩니다.

계산 법 : 4 단위로 반올림 → 읽기 수 만큼 곱하기 → 읽기 방법에 따른 계산 추가 (강력한 읽기 : 계산 없음, 최종적 읽기 : 나누기 2, 트랜잭션 읽기 : 곱하기 2)

읽기 작업은 다음과 같은 방법들이 있습니다.

GetItem

테이블에서 단일 항목을 읽습니다. 

BatchGetItem

하나 이상의 테이블에서 최대 100개의 항목을 읽습니다. DynamoDB는 배치의 각 항목을 개별 GetItem 요청으로 처리합니다. DynamoDB는 먼저 각 항목의 크기를 다음 4KB 배수로 반올림한 후 전체 크기를 계산합니다. 

Query

파티션 키 값이 동일한 여러 항목을 읽습니다. 반환되는 모든 항목이 단일 읽기 작업으로 처리됩니다. 

Scan

테이블의 모든 항목을 읽습니다. 

 

존재하지 않는 항목에 대해 읽기 작업을 수행하는 경우 DynamoDB는 위에 설명된 대로 읽기 처리량을 계속 사용합니다. Query/Scan 작업의 경우 데이터가 없더라도 읽기 일관성 및 요청을 처리하기 위해 검색된 파티션 수에 따라 추가 읽기 처리량에 대한 요금이 계속 부과됩니다.

항목을 반환하는 모든 작업에서 검색할 속성의 하위 집합을 요청할 수 있습니다. 그러나 이렇게 해도 항목 크기 계산에 영향이 미치지 않습니다. 또한 Query나 Scan 작업은 속성 값이 아닌 항목 수를 반환하기도 합니다. 항목 수를 가져올 때도 사용되는 읽기 단위의 수는 동일하며, 항목 크기 계산도 똑같이 적용됩니다. 이는 DynamoDB가 수를 늘리기 위해 각 항목을 읽어야 하기 때문입니다.

 

쓰기 작업의 용량 단위 소비량

쓰기 단위(WCU) 는 최대 1KB 크기의 항목에 대해 1회 쓰기를 나타냅니다.

트랜잭션 쓰기 요청은 최대 1KB 크기 항목의 1회 쓰기를 수행하는 데 2개의 쓰기 단위가 필요합니다.

필요한 총 쓰기 요청 단위 수는 항목 크기에 따라 결정됩니다. 

쓰기 작업은 다음과 같은 방법들이 있습니다.

PutItem 

테이블에 단일 항목을 씁니다. 

UpdateItem 

테이블에서 단일 항목을 수정합니다. 

DeleteItem

테이블에서 단일 항목을 제거합니다. 

BatchWriteItem

하나 이상의 테이블에 최대 25개의 항목을 씁니다. DynamoDB는 배치의 각 항목을 개별 PutItem 또는 DeleteItem 요청으로 처리합니다(업데이트는 지원되지 않음). 

 

처리량 용량 모드

온디맨드 모드

Amazon DynamoDB 온디맨드는 용량 계획 없이 초당 수백만 개의 요청을 처리할 수 있는 서버리스 청구 옵션입니다. DynamoDB 온디맨드는 읽기 및 쓰기 요청에 대해 요청당 지불 요금이 적용되므로 사용하는 만큼에 대해서만 비용을 지불하면 됩니다.

온디맨드 모드 테이블의 경우 애플리케이션에서 수행할 것으로 예상되는 읽기 및 쓰기 처리량을 지정할 필요가 없습니다.

온디맨드 모드에서는 DynamoDB가 처리량 관리의 모든 측면을 처리합니다. 테이블의 처리량 용량을 관리하지 않고도 필요에 따라 API 직접 호출을 수행할 수 있습니다.

다음 중 하나에 해당하는 경우 온디맨드 용량 모드가 가장 적합할 수 있습니다.

  • 이제 막 Amazon DynamoDB를 시작한 경우
  • 트래픽 패턴을 알 수 없는 새 애플리케이션을 개발, 테스트, 프로토타이핑하고 프로덕션 환경에서 실행 중인 경우
  • 애플리케이션에 트래픽이 폭주하거나 간헐적이거나 불규칙하여 예측하기 어려운 경우
  • 사용한 만큼에 대해서만 지불하는 요금제를 사용하려는 경우

 

프로비저닝된 모드 (RI 계약 가능)

프로비저닝된 모드에서는 애플리케이션에 필요한 초당 읽기 및 쓰기 횟수를 지정할 수 있습니다. 프로비저닝된 용량을 충분히 활용하지 못하더라도 처리량 용량에 대한 요금이 부과됩니다. 프로비저닝한 시간당 읽기 및 쓰기 용량을 기준으로 요금이 부과됩니다.

Auto Scaling을 사용하여 트래픽 변경에 따라 테이블의 프로비저닝된 용량을 자동으로 조정할 수 있습니다. 그러면 DynamoDB 사용을 정의된 요청 속도 이하로 유지하도록 관리하여 비용을 예측하는 데 도움이 됩니다.

다음 중 하나에 해당하는 경우 프로비저닝된 용량 모드가 가장 적합할 수 있습니다.

  • 애플리케이션 트래픽이 예측 가능하거나 주기적인 경우
  • 트래픽이 일관되거나 점진적으로 변화하는 애플리케이션을 실행할 경우
  • 비용 관리를 위해 용량 요구 사항을 예측할 수 있는 경우
  • 제한적으로 단기간 트래픽이 폭주하는 경우

버스트 및 조정 용량

데이터 액세스가 불균형할 때, '핫' 파티션은 다른 파티션보다 볼륨이 많은 읽기와 쓰기 트래픽을 받을 수 있습니다. 

다음 다이어그램은 조정 용량 작동 방식을 설명합니다. 예제 테이블은 4개의 파티션에 균일하게 공유된 400WCU로 프로비저닝되어 있어 각 파티션은 초당 최대 100WCU를 유지할 수 있습니다.

파티션 1, 2 및 3은 각각 50WCU/초의 쓰기 트래픽을 수신합니다. 파티션 4는 150WCU/초를 수신합니다. 이 핫 파티션은 사용되지 않은 버스트 용량이 아직 있어도 쓰기 트래픽을 수락할 수 있지만, 결국 100WCU/초를 초과하는 트래픽을 제한합니다.

DynamoDB 조정 용량은 파티션 4의 용량을 늘리는 것으로 대응하므로 해당 파티션이 제한되지 않고 150WCU/초의 높은 워크로드를 유지할 수 있습니다.

 

 

 

DynamoDB 테이블, 항목, 쿼리, 스캔 및 인덱스 작업

테이블 작업

테이블 생성

create-table 로 생성 가능합니다. AWS 계정과 리전에서 고유합니다. 명칭과 기본키 설정, 처리량을 설정합니다.

테이블 업데이트 

update-table 작업을 통해 다음 중 하나를 수행할 수 있습니다.

  • 테이블의 프로비저닝된 처리량 설정을 수정합니다
  • 테이블의 읽기/쓰기 용량 모드를 변경합니다.
  • 테이블에서 GSI를 조작합니다.
  • 테이블에서 DynamoDB Streams를 활성화하거나 비활성화합니다.

테이블 삭제

delete-table 명령어를 통해 삭제합니다.

글로벌 테이블

글로벌 테이블은 복제 솔루션을 직접 구축하여 관리하지 않고도 다중 리전의 다중 활성 데이터베이스를 배포할 수 있는 완전관리형 솔루션을 제공합니다. DynamoDB가 지속적인 데이터 변경 사항을 모든 해당 리전으로 전파합니다. 글로벌 테이블은 모든 리전에서 사용할 수 있습니다.

글로벌 테이블을 사용할 때 얻을 수 있는 구체적인 이점은 다음과 같습니다.

  • DynamoDB 테이블을 선택한 AWS 리전 간에 자동으로 복제할 수 있습니다
  • 리전 간에 데이터를 복제하고 업데이트 충돌을 해결하는 어려운 작업이 필요 없어 애플리케이션의 비즈니스 로직에 집중할 수 있습니다.
  • 전체 리전이 격리되거나 성능이 저하되는 예상치 못한 상황에서도 애플리케이션의 가용성을 높게 유지할 수 있습니다.

 

항목 작업

단일 작업으로 Get, Put, Update, Delete 를 사용할 수 있습니다.

배치 작업으로 BatchGet (최대 100개), BatchWrite (최대 25개의 Put 또는 Delete) 를 사용할 수 있습니다. 배치를 통하여 앱과 DB 간의 네트워크 왕복 수 감소하여 성능 향상이 가능합니다. 또한 DDB는 개별 읽기, 쓰기 작업을 병렬로 수행합니다.

TTL

TTL을 설정하여 데이터를 생명 주기를 관리할 수 있습니다. DynamoDB는 쓰기 처리량을 소비하지 않고 만료 후 며칠 내에 만료된 항목을 자동으로 삭제합니다.

쿼리 작업

Amazon DynamoDB에서 Query API 작업을 사용하여 프라이머리 키 값을 기반으로 항목을 찾을 수 있습니다.

파티션 키 속성의 이름과 해당 속성의 단일 값을 제공해야 합니다. Query는 해당 파티션 키 값을 갖는 모든 항목을 반환합니다. 선택에 따라 정렬 키 속성을 제공하고 비교 연산자를 사용하여 검색 결과의 범위를 좁힐 수 있습니다.

Query 작업은 항상 결과 집합을 반환합니다. 일치하는 항목이 없다면 결과 집합은 비어 있습니다.

Query 결과는 항상 정렬 키 값을 기준으로 정렬됩니다. 정렬 키의 데이터 형식이 Number이면 결과가 숫자 순서대로 반환됩니다. 기본적으로 정렬 순서는 오름차순입니다. 오름차순을 역순으로 바꾸려면 ScanIndexForward 파라미터를 false로 설정하면 됩니다.

단일 Query 작업은 최대 1MB의 데이터를 가져올 수 있습니다. 이러한 크기 제한은 FilterExpression 또는 ProjectionExpression이 결과에 반영되기 전에 적용됩니다

필터 작업을 통하여 출력되는 데이터를 조절할 수 있습니다. 다만 Query로 읽기를 진행한 후에 필터로 처리가 되므로 사용되는 RCU는 동일합니다.

Page-size를 사용하여 페이징 처리가 가능합니다.

Limit, ScannedCount(필터 전), Count(필터 후) 등의 옵션 제공합니다.

Scan 작업

Amazon DynamoDB의 Scan 작업은 테이블 또는 보조 인덱스의 모든 항목을 읽어옵니다. 기본적으로 Scan 작업은 테이블이나 인덱스에 속한 항목의 데이터 속성을 모두 반환합니다. 하지만 Scan 작업에서 ProjectionExpression 파라미터를 사용하면 모두가 아닌 일부 속성만 가져올 수 있습니다.

Scan은 항상 결과 집합을 반환합니다. 일치하는 항목이 없다면 결과 집합은 비어 있습니다. 단일 Scan 요청으로 최대 1MB의 데이터를 가져올 수 있습니다.

필터 작업을 통하여 출력되는 데이터를 조절할 수 있습니다. 다만 Scan로 읽기를 진행한 후에 필터로 처리가 되므로 사용되는 RCU는 동일합니다.

Page-size를 사용하여 페이징 처리가 가능합니다.

Limit, ScannedCount(필터 전), Count(필터 후) 등의 옵션 제공합니다.

 

인덱스 작업

Amazon DynamoDB는 기본 키 값을 지정하여 테이블의 항목에 신속하게 액세스할 수 있습니다. 

모든 보조 인덱스는 정확히 하나의 테이블과 연결되어 해당 테이블에서 데이터를 가져옵니다. 이를 인덱스의 기본 테이블이라고 합니다. 인덱스를 생성할 때 인덱스 파티션 및 정렬 키로 대체 키를 정의할 수 있습니다. 또한 기본 테이블에서 인덱스로 프로젝션하거나 복사하려는 속성을 정의합니다.

DynamoDB는 이 속성을 기본 테이블의 기본 키 속성과 함께 인덱스로 복사합니다. 그러면 테이블을 쿼리하거나 스캔하는 것처럼 인덱스를 쿼리하거나 스캔할 수 있습니다.

모든 보조 인덱스는 DynamoDB에서 자동으로 유지 관리됩니다. 기본 테이블의 항목을 추가, 수정 또는 삭제할 때 해당 테이블의 모든 인덱스도 업데이트되어 이 변경 사항이 반영됩니다.

DynamoDB는 두 종류의 보조 인덱스를 지원합니다.

  • 글로벌 보조 인덱스 - 파티션키와 정렬키가 기본 테이블과 다를 수 있는 인덱스입니다. 글로벌 보조 인덱스는 기본 테이블과 별개로 자체 파티션 공간에 저장되며 기본 테이블과는 별도로 크기 조정됩니다.
  • 로컬 보조 인덱스 - 기본 테이블과 파티션 키는 동일하지만 정렬 키가 다른 인덱스입니다.

 

기능 글로벌 보조 인덱스 로컬 보조 인덱스
키 스키마 글로벌 보조 인덱스의 기본 키는 단순 기본 키(파티션 키)이거나 복합 기본 키(파티션 키 및 정렬 키)일 수 있습니다. 로컬 보조 인덱스의 기본 키는 반드시 복합 기본 키(파티션 키 및 정렬 키)여야 합니다.
키 속성 인덱스 파티션 키 및 정렬 키(있을 경우)는 문자열, 숫자 또는 이진수 형식의 기본 테이블 속성일 수 있습니다. 인덱스의 파티션 키는 기본 테이블의 파티션 키와 동일한 속성입니다. 정렬 키는 문자열, 숫자 또는 이진수 형식의 기본 테이블 속성일 수 있습니다.
파티션 키 값당 크기 제한 글로벌 보조 인덱스에는 크기 제한이 없습니다. 파티션 키 값마다 인덱싱된 모든 항목의 전체 크기가 10GB 이하여야 합니다.
온라인 인덱스 작업 글로벌 보조 인덱스는 테이블을 생성할 때 동시에 생성될 수 있습니다.
새 글로벌 보조 인덱스를 기존 테이블에 추가하거나 기존 글로벌 보조 인덱스를 삭제할 수도 있습니다.
로컬 보조 인덱스는 테이블을 생성할 때 동시에 생성됩니다.
기존 테이블에 로컬 보조 인덱스를 추가할 수도 없고 현재 있는 로컬 보조 인덱스를 삭제할 수도 없습니다.
쿼리 및 파티션 글로벌 보조 인덱스를 사용하면 모든 파티션에서 전체 테이블을 쿼리할 수 있습니다. 로컬 보조 인덱스를 사용하면 쿼리에서 파티션 키 값으로 지정하는 단일 파티션을 쿼리할 수 있습니다.
읽기 일관성 글로벌 보조 인덱스의 쿼리는 최종 일관성만 지원합니다. 로컬 보조 인덱스를 쿼리할 때는 최종 일관성 또는 강력한 일관성을 선택할 수 있습니다.
프로비저닝된 처리량 소비 글로벌 보조 인덱스마다 읽기 및 쓰기 활동에 대한 고유한 프로비저닝된 처리량 설정이 있습니다.
글로벌 보조 인덱스의 쿼리 및 스캔은 기본 테이블이 아니라 인덱스의 용량 단위를 소비합니다.
테이블 쓰기로 인한 글로벌 보조 인덱스 업데이트의 경우도 마찬가지입니다. 글로벌 테이블과 연결된 글로벌 보조 인덱스는 쓰기 용량 단위를 소비합니다.
로컬 보조 인덱스의 쿼리 또는 스캔은 기본 테이블의 읽기 용량 단위를 소비합니다.
테이블에 쓸 때 해당 로컬 보조 인덱스도 업데이트됩니다. 이 업데이트는 기본 테이블의 쓰기 용량 단위를 소비합니다.
글로벌 테이블과 연결된 로컬 보조 인덱스는 복제된 쓰기 용량 단위를 소비합니다.
프로젝션 속성 글로벌 보조 인덱스 쿼리 또는 스캔에서는 인덱스로 프로젝션되는 속성만 요쳥할 수 있습니다. DynamoDB가 테이블에서는 어떤 속성도 가져오지 않습니다. 로컬 보조 인덱스를 쿼리 또는 스캔하는 경우에는 인덱스로 프로젝션되지 않는 속성만 요쳥할 수 있습니다.
DynamoDB가 테이블에서 이러한 속성을 자동으로 가져옵니다.

 

DAX

 

DynamoDB는 밀리초 단위의 응답을 보장하지만 더 빠른 시간인 마이크로초 단위의 처리가 필요할 때 동일 리전에서 인메모리 시스템인 DAX를 고려할 수 있습니다.

DAX 클러스터는 하나 이상의 노드로 구성됩니다. 노드 중 하나는 클러스터의 기본 노드로 작동하며, 다른 노드(있는 경우)는 읽기 전용 복제본으로 작동합니다. 

클러스터는 DAX가 단위로 관리하는 하나 이상 노드의 논리적 그룹입니다. 클러스터의 노드 중 하나는 기본 노드로 지정되며, 다른 노드들은 읽기 전용 복제본이 됩니다.

기본 노드는 다음을 담당합니다.

  • 캐시된 데이터에 대한 애플리케이션 요청 이행
  • DynamoDB에 대한 쓰기 작업 처리
  • 클러스터의 제거 정책에 따라 캐시에서 데이터 제거.

프라이머리 노드의 캐시된 데이터가 변경되면 DAX는 복제 로그를 사용하여 모든 읽기 전용 복제본 노드에 변경 내용을 전파합니다. DynamoDB는 모든 읽기 전용 복제본에서 확인을 받은 후 프라이머리 노드에서 복제 로그를 삭제합니다.

읽기 전용 복제본은 다음을 담당합니다.

  • 캐시된 데이터에 대한 애플리케이션 요청 이행
  • 클러스터의 제거 정책에 따라 캐시에서 데이터 제거.

읽기 전용 복제본은 다음과 같은 2가지 역할을 추가로 수행합니다.

  • 확장성. 동시 액세스가 필요한 클라이언트가 많은 경우 읽기 확장을 위해 복제본을 더 추가할 수 있습니다. DAX는 클러스터의 모든 노드에 균일하게 로드를 분산합니다. 
  • 고가용성. 프라이머리 노드에 장애가 발생하면 DAX가 자동으로 읽기 전용 복제본으로 장애 조치하고 이를 새로운 프라이머리 노드로 지정합니다.

 

 

백업 및 복원

온디맨드 백업 

온디맨드 백업 기능을 사용하면 테이블의 전체 백업을 생성하여 규정 준수 요건에 맞도록 장기간 유지하고 보관할 수 있습니다.

테이블의 프로비저닝된 처리량을 사용하지 않고 해당 테이블을 복원합니다.

 

시점 복구(PITR) 백업

PITR 백업은 DynamoDB에서 완전히 관리되며 초당 최대 35일 동안 시점 복구를 제공합니다.

테이블에 PITR을 활성화한 기간 동안 DynamoDB 테이블 크기를 기준으로 요금이 부과됩니다.

DynamoDB에서 시점 복구를 활성화하면 데이터가 지속적으로 백업됩니다. 이렇게 하면 해당 시점의 원래 테이블 상태와 동일한 새 DynamoDB 테이블을 생성하여 35 내의 특정 시점으로 테이블을 복원할 수 있습니다.

 

보안

저장 데이터 암호화

DynamoDB 저장 데이터 암호화는 AWS KMS에 저장된 암호화 키를 사용하여 모든 저장 중 데이터를 암호화하여 향상된 보안을 제공합니다.

저장 시 암호화를 사용하면 엄격한 암호화 규정 준수 및 규제 요구 사항이 필요한, 보안에 민감한 애플리케이션을 구축할 수 있습니다.

프라이머리 키, 로컬 및 글로벌 보조 인덱스, 스트림, 전역 테이블, 백업, DAX 클러스터 등을 비롯한 데이터를 항상 암호화된 테이블에서 보호하여 추가 데이터 보호 계층을 제공합니다.

암호화된 테이블에 액세스하면 DynamoDB가 테이블 데이터를 투명하게 해독합니다. 암호화된 테이블을 사용 또는 관리하기 위해 코드나 애플리케이션을 변경할 필요가 없습니다.

DynamoDB는 사용자가 기대하는 한 자릿수 밀리초 지연 시간을 계속해서 제공하며 모든 DynamoDB 쿼리가 암호화된 데이터에 대해 원활하게 처리됩니다.