일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- github
- spring mvc 프로젝트 만들기
- git alias
- 구글애드센스
- 마카롱
- intellij spring mvc
- git config
- 티스토리
- github alias
- 독서
- Git
- git 단축
- 구글
- spring mvc gradle
- 검색
- 소개팅 어플 추천
- git 단축키
- 소개팅
- 독서토론
- 소개팅 어플 후기
- 애드센스
- 소스코드
- 책추천
- 웹마스터
- spring mvc 프로젝트
- 책
- 애드센스신청해지
- 사이트맵
- 블로그
- 책 후기
- Today
- Total
Study Everyday :)
DynamoDB 란? 요약/ 정리 본문
출처 : https://aws.amazon.com/ko/dynamodb
1. DynamoDB 개념
DynamoDB - Key Value Store NoSQL
NoSQL [Not Only SQL]
no need of schema, especially target large sets of distributed data.
스키마를 강제 적용하지 않습니다.
NoSQL 데이터베이스 타입
• Key-value data stores
• Document stores
• Wide-column stores
• Graph stores
NoSQL 데이터베이스 장점
• Scalability
• Performance
• High Availability
• Global Availability
• Flexible Data Modeling
NoSQL은 가용성과 확장성이 높고 고성능에 최적화된 비관계형 데이터베이스를 설명하는 데 사용되는 용어입니다.
2. DynamoDB 핵심 구성 요소
테이블
• 스키마가 없음 데이터 형식을 미리 정의할 필요가 없음
• 테이블 크기 제한 없음
항목
• 최대 항목 크기가 400 KB를 초과할 수 없음. 속성 이름은 크기 제한에 포함
속성
- 스칼라. 하나의 값만 가질수 있음
- 내포 속성 최대 32 수준 내포 속성 지원
E.g Address inside Person
"PersonID" : 1,
"Address" : {
"Street" : "Street",
"City" : "City"
}
기본키
- 테이블 항목 추가, 업데이트, 삭제시 기본 키 속성 값을 지정해야함. 생략 할수 없다.
- 두가지 기본 키
- 파티션 키 (Hash Key)
- 하나의 키만 존재
E.g
기본키 속성
UserId name age street
1 Jess 10 ABC
2 Jack 12 DEF
- 파티션 키 & 정렬 키 (Hash Key & Range Key)
- 같은 파티션 키 값이 존재할 수 있으나 정렬 키는 달라야 함
E.g
기본키 정렬키 속성
UserId name age street
1 Jess 10 ABC
1 Jack 12 DEF
보조인덱스
- 기본 키 속성 값을 제공하여 테이블의 데이터를 읽어 올 수 있음 키가 아닌 속성을 사용하는 데이터를 읽어 올때 사용 보조 인덱스. 테이블에서 데이터를 읽는 것과 같은 방식으로 인덱스에서 데이터를 읽어 올 수 있음.
- 두가지 인덱스 (테이블 당 두개 모두 최대 5개)
- Global secondary index
- 테이블의 파티션 키 및 정렬 키가 다를 수 있음
- 로컬 보조 인덱스
- 테이블의 파티션 키는 동일 정렬 키는 다름
DynamoDB 스트림
- 데이터 수정 이벤트 캡쳐
- 스트림 레코드 기록
- 새로운 항목 추가시 해당 속성 모두 포함하여 이미지 캡처
- 항목 업데이트시 수정된 속성의 사전 및 사후 이미지 캡처
- 항목 삭제시 삭제 전의 전체 항목 이미지 캡처
- 스트림 레코드의 수명은 24시간 25시간 이후에는 자동 제거
- AWS Lambda를 함께 사용하여 트리거를 만들 수 있음
트리거: 관심 있는 이벤트가 스트림에 표시될 때마다 자동으로 실행되는 코드
E.g 새로운 고객에게 자동으로 환영 이메일 보내기
그룹에 사진을 새로 업로드하면 애플리케이션에서 그룹에 속한 모든 친구들에게 즉시 알림을 전송
DynamoDB 스트림를 사용하여 Table Activity 캡처하기
3. 항목 형식
데이터 형식
DynamoDB 항목 크기 제한 (400 KB)
- 스칼라 형식
- 하나의 값만 표현할 수 있습니다. 스칼라 형식은 숫자, 문자열, 이진수, Boolean, Null
- 문자열 항목 크기 제한 400 KB
- 문서 형식
- 내포 속성이 있는 복잡한 구조
- 목록
- 데이터 형식 제한 없음
E.g
FavoriteThings: ["Cookies", "Coffee", 3.14159]
- 맵
- 데이터 형식 제한 없음 JSON 문서 저장하는 것에 이상적
E.g
{
Day: "Monday",
ItemsOnMyDesk: [
"Coffee Cup",
"Telephone",
{
Pens: { Quantity : 3},
Pencils: { Quantity : 2}
}
]
}
- 집합 형식
- 여러 스칼라 값
- 집합내의 모든 형식은 같아야함
E.g
["Black", "Green" ,"Red"]
[42.2, -19, 7.5, 3.14]
4. 파티션 및 데이터 배포
데이터를 파티션에 저장함.
파티션은 SSD(Solid State Drive)로 백업되는 테이블용 스토리지 할당으로,
하나의 AWS 리전 내의 여러 가용 영역에 자동으로 복제됩니다.
파티션 관리는 DynamoDB에서 처리합니다.
파티션 키 값이 동일한 모든 항목을 정렬 키 값을 기준으로 정렬하여 물리적으로 인접하게 저장합니다.
Important
파티션 키 값당 고유 정렬 키 값의 수는 제한이 없습니다.
5. 테이블에서 데이터 읽기
DynamoDB는 테이블 조인을 지원 안하는 대신 한 번에 한 테이블의 데이터를 읽습니다.
- GetItem
- 테이블에서 단일 항목을 가져옴. (BatchGetItem 작업은 최대 100 GetItem 호출을 단일 작업으로 수행할 수 있음)
Important
관계형 데이터베이스에서 DynamoDB로 마이그레이션하는 경우, 조인의 필요성을 제거하기 위해 데이터 모델을 비정규화해야 합니다.
6. DynamoDB 장점과 단점
장점
- 데이터 모델
- 스키마가 없다. JSON 문서를 비롯한 정형 또는 반정형 데이터를 관리 가능
- 확장성
- 테이블당 항목 수, 테이블의 총 크기 제한 없음.
- 셋팅이 쉬움. You do not need to setup any infrastructure.
- AWS가 care 해줌
- 저장 된 데이터 수가 아닌 사용량으로 금액이 책정 됨.
단점
- 셋팅은 쉬우나 해쉬키와 범위키를 전제로 한 잘 짜여진 data model 구성이 필요함. 금액적인 면 때문.
- 한 항목이 400 kb 까지.
- query 에서 1 MB까지의 data만 찾음
7. 프로비저닝된 처리량
Units of Capacity required for writes = Number of item writes per second x item size in 1KB blocks
Units of Capacity required for reads* = Number of item reads per second x item size in 4KB blocks
읽기 용량 단위
- 초당 strongly consistent read 1
- 초당 eventually consistent read 2
읽기 일관성
AWS 리전은 가용 영역이라고 하는 여러 개의 고유한 위치로 구성됩니다.
한 리전의 여러 가용 영역 간 빠른 데이터 복제가 가능합니다.
테이블에 데이터를 쓰고 HTTP 200 응답(OK)을 받으면 데이터의 모든 복사본이 업데이트 됩니다.
보통 1초 이내에 모든 스토리지 위치의 데이터가 일관성을 갖게 됩니다.
- Strongly consistent read
- 최근 완료된 쓰기 작업의 결과를 반영하지 않을 수 있음. 잠시 후 읽기 요청을 반복 시 최신 데이터를 반환.
- Eventually consistent read
- 성공한 가장 최신 데이터로 응답.
Important
지정 안하면 DynamoDB는 Strongly consistent read를 사용합니다.
초당 읽기 계산
E.g
1. 테이블에서 초당 80개의 3KB 항목을 strongly consistent read로 읽기.
3 KB / 4 KB = 0.75 --> 1 가까운 정수로 올림
1 read capacity unit per item × 80 reads per second = 80 read capacity units
eventually consistent read 일 경우 읽기 용량 단위 40 프로비저닝
2. 초당 100의 항목 크기는 6KB를 strongly consistent read로 읽기
6 KB / 4 KB = 1.5 --> 2 가까운 정수로 올림
2 read capacity units per item × 100 reads per second = 200
eventually consistent read 일 경우 읽기 용량 단위 100 프로비저닝
3. want to do 100 strongly consistent reads/second for 4.5KB
need to provision 100 (read per second)
x 2 (number of 4KB blocks required to store 4.5KB)
= 200 units of Read Capacity.
Important
required number of units of Read Capacity is determined by the number of items being read per second, not the number of API calls.
쓰기 용량 단위
- 1은 최대 크기가 1 KB인 항목에 대해 초당 쓰기 1을 나타냅니다.
E.g
1. 초당 100개의 512KB 항목을 테이블에 쓰려고 한다.
512 bytes / 1 KB = 0.5 --> 1 가까운 정수로 올림
1 write capacity unit per item × 100 writes per second = 100 write capacity units
2. 초당 쓰기 10을 수행하려고 하고 항목 크기는 1.5KB일 경우.
1.5 KB / 1 KB = 1.5 --> 2 가까운 정수로 올림
2 write capacity units per item × 10 writes per second = 20 write capacity units
8. 요금
요금 특징
요금 예제
매일 5백만 건의 쓰기와 5백만 건의 strongly consistent read 작업을 수행하고 8GB의 데이터를 저장해야 함.
워크로드가 일정하게 유지되고 테이블 항목 크기가 1KB 미만.
- 쓰기 용량 유닛 (WCU) : 27.26 USD
- 초당 57.9건의 쓰기 작업.
5000000 / 24 / 60 / 60 = 57.87
1개의 WCU에서 초당 1건의 쓰기 작업을 처리하기 때문에 58개의 WCU가 필요.
월별 WCU당 0.47 USD.
58개의 WCU 요금은 월별 27.26 USD.
0.47 * 58 = 27.26
- 읽기 용량 유닛(RCU): 2.61 USD
- 초당 57.9건의 읽기 작업.
5000000 / 24 / 60 / 60 = 57.87
1개의 RCU에서 초당 2건의 최종적 일관된 읽기 작업 (strongly consistent read)을 처리할 수 있으므로 29개의 RCU가 필요.
58 / 2 = 29
월별 RCU당 0.09 USD. 29개의 RCU 요금은 월별 2.61 USD.
0.09 * 29 = 2.61
- 데이터 스토리지: 2.00 USD
- 월별 GB당 0.25 USD.
테이블 요금은 2.00 USD.
0.25 * 8 = 2
총비용은 월별 31.86 USD
프로비저닝된 처리량
예약 용량 (프로비저닝된 처리량)
읽기 및 쓰기 처리량에 대한 수요를 예측할 수 있는 경우 비용을 절감이 가능합니다.
9. DynamoDB JSON 저장
'IT > ETC' 카테고리의 다른 글
Intellij spring MVC gradle 프로젝트 만들기 (2) | 2018.03.22 |
---|---|
Git alias 설정하고 사용하기 (0) | 2018.03.18 |
GitHub ssh key 생성하고 등록하고 사용하기 (3) | 2018.03.13 |