[AWS] DynamoDB read Consistency란? 아주 쉽게 정리 (Eventually Consistent Reads, Strongly Consistent Reads)
DynamoDB에 관한 총 정리: https://jibinary.tistory.com/277
DynamoDB Read Consistency (읽기 일관성)
Consistency 모델은 Read(읽기) 요청 시 데이터가 얼마나 최신인지를 보장하는 방식을 의미한다.
DynamoDB는 2 가지 Read Consistency을 제공한다.
- Eventually Consistent Reads
- Strongly Consistent Reads
비교
특징 | Eventually Consistent Reads | Strongly Consistent Reads |
반환하는 데이터 | 최신 데이터가 아닐 수 있음 (이전 데이터를 반환 할 수 있다.) |
항상 최신 데이터 보장 |
데이터 조회 | 가장 가까운 곳에서 데이터를 반환 | 모든 복제본 동기화 후 데이터를 반환 |
성능 | Strongly Consistent Reads보다 빠르다 지연 시간이 짧음 |
Eventually Consistent Reads보다 느리다 지연 시간이 길 수 있음 |
Throughput | 1 RCU당 최대 2개의 4KB 읽기 | 1 RCU당 1개의 4KB 읽기 처리 |
DynamoDB가 데이터를 읽는 방법
DynamoDB는 table, LSI, GSI, streams에서 데이터를 읽을 수 있다.
table과 LSI(local secondary indexes)는 2 가지 읽기 일관성 옵션을 제공한다
- Eventually Consistent Reads (최종적 일관성 읽기): 기본 설정.
- Strongly Consistent Reads (강한 일관성 읽기): 최신 데이터를 보장.
GSI(global secondary indexes)와 streams에서의 모든 읽기는 Eventually Consistent로 처리된다.
(DynamoDB는 뭐 이런 특징이 있다 라고만 일단 생각하면 될듯.....😅)
1. Eventually Consistent Reads (최종적 일관성 읽기)
(기본 설정) 특별히 지정하지 않으면 DynamoDB는 "Eventually Consistent Reads"을 사용한다.
읽기 요청 시 최신 데이터가 반활될 수도 있고, 이전 데이터가 반환될 수 도 있다.
그러나 최신 데이터가 변경된 후 일정 시간이 지나면 모든 복제본이 동기화되어 결국에는 최신 데이터가 반환하게 된다.
DynamoDB는 한 Region 당 3개의 복제본 가지고 있다.
새로운 데이터를 write하면 여러 복제본에 전파되는데, 이 과정에서 지연이 발생할 수 있다. (그렇기 때문에 이전 데이터를 반환하기도 하는 것이다)
예시) 3개중 2개의 AZ에 새로운 데이터가 Write(쓰기 작업) 된 경우, 나머지 한개의 AZ에는 아직 이전 데이터가 남아있기에 2개의 AZ에서 Replicate(복제)한다.
2. Strongly Consistent Reads (강한 일관성 읽기)
읽기 요청 시 항상 최신 데이터가 반환한다.
DynamoDB는 모든 복제본이 동기화되었는지 확인한 후 데이터를 반환한다.
(최신 데이터가 제대로 모든 DynamoDB에 복제 완료 후에 반환하기에 시간이 오래 걸린다.)
예시) 3개중 2개의 AZ에 새로운 데이터가 Write(쓰기 작업)되었다면, 나머지 1개 AZ쪽에서 2개의 AZ에 각각 같은 파일을 갖고있는지 확인한다. 각각 확인하기 때문에 시간과 코스트가 더 오래걸린다.
🤔 문제
DynamoDB 테이블에서 데이터를 읽을 때 선택한 일관성 모델이 프로비저닝된 처리량에 어떻게 영향을 미칩니까?
- Strongly consistent reads(강한 일관성 읽기)는 Eventually consistent reads(최종적 일관성 읽기)와 동일한 처리량을 사용합니다.
- Strongly consistent reads는 Eventually consistent reads보다 더 많은 처리량을 사용합니다.
- Strongly consistent reads는 Eventually consistent reads보다 적은 처리량을 사용합니다.
- Strongly consistent reads는 읽기 활동에 따라 가변적인 처리량을 사용합니다.
정답
정답. 2번