DynamoDB Accelerator (DAX)
- DynamoDB를 위한 완전관리형이며 가용성이 높고 원활한 메모리 캐시
- DAX를 사용하면 가장 많이 읽은 데이터를 캐시에 저장해 읽기 혼잡을 해결할 수 있음
- 캐시에 저장된 데이터의 지연 시간을 마이크로초까지 줄여주고 애플리케이션 로직을 변경할 필요가 없어
이미 DynamoDB에 쓰기를 하는 애플리케이션은 동일한 DynamoDB API를 계속 사용할 수 있음 - 애플리케이션이 DynamoDB 테이블에 직접 액세스하거나 다중 캐시 노드로 구성된 DAX 클러스터를 만들어서 작동 시킴
애플리케이션은 가장 중요하거나 많이 읽는 데이터를 캐시에 저장하고 DAX 클러스터를 통해 DynamoDB 테이블에 액세스
- 데이터 인덱스는 5분간 저장되고 5분이 지나면 데이터는 만료되어 DynamoDB에서 새로고침됨
DynamoDB Accelerator (DAX) vs. ElastiCache
- DAX와 ElastiCache는 목적이 서로 다름
- DAX는 DynamoDB용이며 애플리케이션이 DynamoDB에 액세스할 때 사용되는 API를 변경하지 않아
개별 객체 캐시와 쿼리 및 스캔 캐시에 적합하게 사용됨 - ElastiCache는 애플리케이션이 DynamoDB에서 데이터를 회수한 다음 일종의 컴퓨팅을 하고
어딘가에 데이터를 저장하면서 집계 결과를 보관할 겨우 이 캐시에 저장하도록 사용됨
DynamoDB Streams
- DynamoDB Steams은 테이블의 항목 수정을 표시하는 정렬된 데이터 스트림으로
항목을 생성하고 업데이트 및 삭제할 때마다 DynamoDB Steams으로 이동하게 되고
데이터는 Kinesis Data Steam Lambda로 보내지거나 Kinesis Client Library에서 읽을 수 있음 - DynamoDB 스트림 데이터는 최대 24시간 동안 보존되며 원하면 빠르게 처리 가능
- 새로운 사용자에게 환영 메일을 보내거나 데이터 분석을 할 때, 데이터를 변경해서 파생 테이블을 DynamoDB에 삽입하거나
ElastiCache에 넣기도 하며 리전간 복제를 구현할 때 사용하며 테이블에서 실시간으로 변화에 대응하는 경우에 사용 - 애플리케이션이 테이블에서 생성하고 업데이트하고 삭제한 내용 모두 DynamoDB Steam으로 전달된 후
Kinesis Data Steam으로 가서 Kinesis Firehose로 가며, 이 후 RedShift, S3, ElasticSearch로 보내짐
그렇지 않을 때에는 처리 계층을 두고 KCL 혹은 Lambda 애플리케이션이 DynamoDB를 직접 읽으며
이후 SNS Topic이나 다른 DynamoDB 테이블로 데이터를 보내게 되며
테이블 변경 사항을 다루는 로그의 경우 Kinesis, Lambda, EC2에서 실행되는 애플리케이션이 이 로그를 가져감
DynamoDB Global Tables
- 테이블이 여러 리전에 걸쳐서 존재하며 테이블 사이에서 자동으로 양방향 복제가 이루어짐
- 예) US-EAST-1과 AP-SOUTHEAST-2에 같은 테이블이 있으며 이보다 더 많이 서너개 이상의 리전에 동시에 위치할 수 있음
- 여러 리전에 걸쳐 데이터를 이용할 때 지연 시간을 줄이기 위해 사용
이런 경우를 다중 활성 복제라고 하며 애플리케이션이 모든 리전에서 테이블을 읽고 쓸 수 있음 - 글로벌 테이블을 활성하기 위해 꼭 필요한 전제 조건은 DynamoDB Steam이며
변경 로그 업데이트 덕분에 각 테이블이 서로를 업데이트하며 양방향 복제가 가능해짐
DynamoDB –Time To Live (TTL)
- Time To Live를 사용하면 타임스탬프 만료 후에 자동으로 아이템을 삭제할 수 있음
- 세션 데이터 테이블에 만료 시간이라는 속성을 추가하고 숫자를 적게 되면
만료 시간과 가까워질 때마다 과정을 거쳐 표에 표시되며 결국에는 삭제가 됨
즉, 행이나 특정 항목가 만료 및 삭제되도록 알리는 것
- 만약 지난달 데이터만 보관하려면 각 행에서 한 달에 한 번 만료 시간을 지정하면 되며
규제 규정이 있어 특정 테이블의 데이터를 7일만 보관해야 하는 경우에 사용 - 이러한 방식으로 테이블 크기 통제가 가능해짐
DynamoDB - Indexes
- 인덱스에는 GSI(Global Secondary Indexes)와 LSI(Local Secondary Indexes)가 존재
- DynamoDB 테이블의 인덱스는 기본 키 말고도 여러 속성에 쿼리를 수행할 수 있음
- 기본적으로 쿼리를 할 수 있는 건 기본 키(파티션 키와 정렬 키로 쿼리) 뿐이지만
게임 ID, 타임 스탬프, 점수, 결과를 비롯한 속성에 쿼리를 하려면 테이블 맨 위에 인덱스를 생성해야 함
DynamoDB -Transactions
- 트랜잭션을 통해 동시에 두 테이블에 쓰거나 아무 테이블에도 쓰지 않을 수 있음
- 예) 계좌 잔고와 은행 거래를 정리한 테이블이 있을 때
계좌 잔고는 각 계좌에 돈이 얼마나 남아 있는지, 은행 거래 내역은 어떤 계좌에서 거래가 발생했는지 보여줌
이 때 은행 거래 내역 테이블에 트랜잭션을 추가했을 때 계좌 잔고가 자동으로 업데이트 되도록 하기 위해
트랜잭션을 하나 만들고 두 테이블 모두에 내용을 작성하거나 어느 곳에도 작동하지 않도록 함
'Cloud > AWS' 카테고리의 다른 글
[SAA] API Gateway 보안 (0) | 2022.04.13 |
---|---|
[SAA] API Gateway 개요 (0) | 2022.04.13 |
[SAA] DynamoDB 개요 (0) | 2022.04.13 |
[SAA] Lambda@엣지 (0) | 2022.04.13 |
[SAA] Lamba 제한 (0) | 2022.04.13 |