일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- redis-cli
- 환급챌린지
- vscode
- 캐시백
- putty Inactive
- AWS S3 버킷 삭제
- AWS S3 계정이동
- ERR unknown command 'JSON.SET'
- nodemailer
- aws
- 패스트캠퍼스후기
- 직장인자기계발
- redis cli
- ERR unknown command 'JSON.GET'
- Ngrinder Docker
- gitlab 잔디옮기기
- aws s3
- Window redis-cli
- AWS S3 migration
- Avast 구독취소
- RedisJSON
- 패캠챌린지
- elastic cache
- 캐시백챌린지
- 잔디이전
- 한 번에 끝내는 AWS 인프라 구축과 DevOps 운영 초격차 패키지 Online
- Redis
- 직장인인강
- 패스트캠퍼스
- Avast Security
- Today
- Total
Developing
DynamoDB와 DynamoDB Accelerator(DAX) 정리 본문
DynamoDB VS RDB 용어 및 개념 비교
RDB | DynamoDB |
Tables | Tables |
Rows | Items |
Columns | Attributes |
Primary Keys(Optional) | Primary Keys(Mandatory / Minimum One and Maximum Two Attribtues) |
Indexes | Local Secondary Indexes |
Views | Global Secondary Indexes |
- Strict Schema VS Flexible Schema
- Predefined set of columns VS Unstructured data
- Each record has same number of columns VS Different records can have different number of columns
- Enforces strict ACID properties/Loss of flexibility VS Trades some ACID properties/Flexible data model
- Vertical Scaling/You scale by adding more power(faster hardware,CPU,RAM) VS Horizontal Scaling/You scale by adding more machines,partitions or low-cost hardware
읽기 정합성(Read Consistency)
- Strong Consistency(강력한 일관된 읽기) : 정확한 최신 데이터 제공
- Eventual Consistency(최종적 일관된 읽기) : 최신 반영이 안되있을지도 모르는 데이터, Strong Consistency에 비해 50% 저렴하다.
데이터 핸들링
- Item-based Actions : 하나의 Item에 대해 write,delete,update 가능
- Query : Read-only action, 한번의 요청으로 여러 Item 처리 가능
- Scan : 모든 Item을 보는 기능, 고비용으로 사용을 최대한 지양해야함.
- Primary Key, Sort Key로 Access Pattern을 만족할 수 없을때 Secondary Index를 사용한다.
용량 유닛(Capacity Unit)
- Capacity Unit : 1초당 읽거나 쓸 수 있는 데이터의 단위
- RCU / WCU
RCU : Read Capacity Units
1RCU : 초당 1번의 Strongly Consistent Read 혹은 초당 2번의 Eventually Consistent Read
=>1RCU로 초당 4KB까지 읽을 수 있다.
WCU : Write Capacity Units
1WCU : 최대 1KB 데이터 쓰기 용량
- RCU/WCU 예시
초당 10KB data를 읽는 RCU(Strong Consistency) : 10KB/4KB = 2.5 ⇒ rounded up ⇒ 3 RCUs
초당 10KB data를 읽는 RCU(Eventually Consistency) : 3 RCUs X 0.5 = 1.5 RCUs
초당 10KB data를 쓰기 위한 WCU : 10KB/1KB = 10 WCUs
초당 1.5KB data를 쓰기 위한 WCU : 1.5KB/1KB ⇒ 1.5 ⇒ rounded up ⇒ 2WCUs
- DynamoDB에서는 1 Paritition 당 1000 WCUs 혹은 3000 RCUs를 처리 - WCU, RCU 조정값에 따라 몇개의 파티션이 생성될지 알 수 있다.
[예시]
Provisioned Capacity : 500 RCUs and 500 WCUs
⇒ Number of Partitions ⇒ 500 RCUs/ 3000 + 500 WCUs/1000 = 0.67 ⇒ rounded up ⇒ 1 partition
New Capacity : 1000 RCUs and 1000 WCUs
⇒ Number of Partitions ⇒ 1000 RCUs/3000 + 1000 WCUs / 1000 = 1.33 ⇒ rounded up ⇒ 2 partitions
Local Secondary Indexes
- Local Secondary Index는 테이블 생성시 생성해주어야한다.
- 테이블당 5개까지 생성가능하다.
- 선택 기준
⇒ 같은 파티션키 사용이 요구될때 Sort Key를 수정하고싶을때
⇒ 추가적인 비용을 줄이고 싶을때
⇒ Strongly consistent index read가 필요할때(Strongly Consistent,Eventually Consistent Read 둘다 지원함)
Dept(Partition Key) | Emp Id(Sort Key) | Name | Age | Location | DOJ(Secondary Sort Key) |
Training | 1 | Steve | 26 | SFO | 08-03-2018 |
IT | 2 | Chris | 24 | NYC | 18-02-2018 |
Sales | 3 | Tina | 25 | NYC | 15-02-2018 |
Training | 4 | Bill | 27 | NJ | 01-02-2018 |
IT | 5 | Alan | 26 | SFO | 12-01-2018 |
Sales | 6 | Megan | 24 | NYC | 01-01-2018 |
만약 위 테이블에서 DoJ에 Local Secondary Index를 적용한다면 IT부서에 일하고 있는 인력들의 리스트를 DoJ가 정렬된 형태로 만들 수 있다.
Global Secondary Indexes
- 파티션으로부터 독립적으로 보관되어 언제든지 생성가능하다.
- 테이블당 20개까지 생성가능하다. (19년도에는 5개까지 됬던듯.)
- Strongly Consistent read는 지원하지 않는다.
- duplicate item 가질 수 있음
- 선택 기준
⇒ 같거나 다른 파티션키 사용을 필요로 할때
⇒ 세밀한 throughput 통제가 필요할때 혹은 다른 partition key로 query해야 할 때
⇒ consistent index read가 필요할 때
Dept(Partition Key) | Emp Id(Sort Key) | Name | Age | Location(Seondary Partition Key) | DoJ(Seconary Sort Key) |
Training | 1 | Steve | 26 | SFO | 08-03-2018 |
IT | 2 | Chris | 24 | NYC | 18-02-2018 |
Sales | 3 | Tina | 25 | NYC | 15-02-2018 |
Training | 4 | Bill | 27 | NJ | 01-02-2018 |
IT | 5 | Alan | 26 | SFO | 12-01-2018 |
Sales | 6 | Megan | 24 | NYC | 01-01-2018 |
만약 Location에 Global Secondary Index가 걸려있다면 ‘NYC’에서 일하는 인력들을 출력할 수 있을 것이다.
DynamoDB Accelerlator (DAX)
- In-Memory Caching Service
- Microsecond Latency
- Eventual Consistency Read만 가능
- Application과 DynamoDB 사이에서 proxy 역할
(Write 시)
DynamoDB에도 데이터를 쓴 후 DAX에도 데이터를 return해줌.
(Read 시)
[Cache Hit] : DAX가 데이터 가지고있을때 DynamoDB로 가지않고 바로 리턴
[Cache Miss] : DynamoDB로부터 데이터 리턴, update된 index Master Node에 반영
DynamoDB 적용 의사결정
규모가 매우 큰 데이터의 경우 RDB는 Cluster/Division 나누는 작업이 필요하지만 DynamoDB는 그에반해 latency가 적다.
Key 설계시 Single Table로 관리하면서 JOIN이 많이 발생하는 결과물을 빠르고 쉽게 가져쓸 수 있는 경우,페타바이트 규모의 데이터/트래픽이 많이 발생하는 경우 적용하기 좋다. 따라서 DB의 Size가 커진다면 DynamoDB가 유리하지만 국내에서 그정도 규모의 트래픽을 받는 회사는 매우적다.
한편 DAX 캐싱의 경우 도쿄 region만 제공되기에, ap-northeast-2 region의 EC2에서 도쿄 region의 DAX를 바라보는 구조는 네트워크 비용 + latency가 발생할 것으로 예상됨.
Udemy 강의자분께서 DynamoDB 사용해본 경험을 공유해주셨다.
하루에 50GB 처리 및 2백만 READ/WRITE 연산이 발생하는 SASS Service의 Trouble Shooting 사례는 다음과 같다.
⇒mysql 하나만 쓰다가 Database Lock 빈번하게 문제발생 ⇒ RDS DB로 하드웨어 업그레이드
⇒고객증가로 다시 Lock 문제 발생 => 데이터베이스 multi AZ 리플리케이션 적용 및 Read Replica 적용
⇒고객증가하니 또 문제 생김 ⇒ NOSQL dynamodb 전환하였더니 3년정도 운영하면서 사소한 문제도 잘 안생겨서 다른 서비스에서도 우선적으로 사용중이심.
Reference
https://www.udemy.com/course/dynamodb/
https://dynobase.dev/dynamodb-read-consistency/
https://velog.io/@soongjamm/Eventual-Consistency-란
https://blog.kico.co.kr/2022/03/17/aws-dynamodb/
https://www.youtube.com/watch?v=I7zcRxHbo98&ab_channel=AmazonWebServicesKorea
'Tips(Reference) > etc' 카테고리의 다른 글
Windows,WSL2,Linux 환경에서 Redis-CLI 사용 Setting(Local,Server) (0) | 2023.07.05 |
---|---|
Ngrinder Stress Testing Tool Setting(download + Docker 활용 방식) (0) | 2023.06.27 |
Avast Security 구독취소하기(계정 모를때 해결방법) (2) | 2023.06.11 |
Udemy 강의를 무료로 수강하는 방법(with Kmooc) (0) | 2022.12.06 |
PORT 종료하는방법 (netstat,taskkill) (0) | 2022.08.18 |