# DynamoDB Table 설계
---------------------------
1. 요소
- 프라이머리 키 선택 = 유니크 키
- 개별 항목에 대한 작업 부하 패턴
2. 테이블 설계 시, 고려 사항
- Randomizing Across Multiple Hash Key Values
- suffix set 를 이용하여 프라이머리키를 고르게 분포되도록 한다 ( write / read 속도 향상 )
- example: 2014-07-09.1, 2014-07-09.2 ~ 2014-07-09.200
- Understand Partition Behavior
- aws 에 의해 table 이 커지면 새로운 partition 이 추가된다
- partition 크기 관련 고려사항
- 테이블 데이터 사이즈
- Provisioned Throughput
- Use Burst Capacity Sparingly
- 설정한 Throughput 만큼 사용하지 않아 남은 것을 "burst" 라 한다
- DynamoDB 는 최근 5분에 대한 "burst" 보관하여 일시적으로 더 빠른 Throughput 를 일시적으로 제공한다
- 일시적으로 사용가능할 뿐 이 값을 의존하여 설계하면 안된다
- Understand Access Patterns for Time Series Data
- Old data 를 S3 로 이동
- Cache Popular Items
- aws 의 ElastiCache 를 이용하여 cache layer 를 구성하는 것을 권장
3. Item 설계
- Use One-to-Many Tables Instead Of Large Set Attributes
- 한 table 에 많은 column 을 만드는 것보다 여러 table 로 중복되게 저장하는 것이 좋다
- 이유
- 하나의 큰 size 를 읽는 것보다 여러 작은 size 를 읽는 것이 비용적으로 효율적인다
- 작은 데이터 가 입출력 I/O 가 더 좋다
- example
- 많은 attr 테이블
- attr 가 적은 테이블 지향
- 긴 Attribute Values 저장하는 것을 지양
- GZIP or LZO 알고리즘 사용하여 압축
- Amazon S3 에 값을 저장
- Multiple Items 으로 쪼개어 저장
- cross-item transactions 을 지원하지 않는 점을 고려하여 설계에 유의
4. Query 조건 고려사항
- Avoid Sudden Bursts of Read Activity
- Reduce Page Size : a Scan operation reads an entire page (by default, 1 MB)
- Isolate Scan Operations
- Take Advantage of Parallel Scans : "sweeper" process
- 조건
- The table size is 20 GB or larger
- Sequential Scan operations are too slow
- 그러나 비싼 과금 지불이 필요하다
5. Secondary Indexes
- 개념
- DynamoDB 는 일반적으로 primary key (hash OR hash+range) 에 대한 index 를 지원한다
- key column 을 제외한 나머지 column 으로 조건을 걸어 조회시, scan 형태로 전체 데이터를 받아온 뒤, 가공하게 된다
- 그래서 **Secondary Indexes** 가 필요하다
- 종류
- Global Secondary Indexes
- index 처리한 column 으로 새로운 table 을 생성하여, 기존 테이블과 비동기 방식으로 데이터를 맞춘다
- 별도의 테이블 이 생성된다
- Local Secondary Indexes :
- 별도의 테이블 생성 없이 기존의 테이블에 추가적으로 작업
- 지원 옵션
- KEYS_ONLY : 가장 작은 단위의 옵션. 단일 column 을 index 로 활용한다
- INCLUDE : KEYS_ONLY 에 추가적으로 column 을 추가하여 index 로 활용한다
- ALL : 모든 column 을 index 로 활용한다
- 별도의 Throughput 설정이 필요하다
6. 가이드 라인 in AWS
- primary 키 선택
- 통일된 작업에 사용될 키를 사용해라
- 값이 고르게 분포될 수 있는 값을 선택해라 == 특정 부분에 집중되어 있는 값을 선택할 경우, 값을 가져오기 힘들다
- 인덱스 선정 시, Take Advantage of Sparse Indexes
- 일부 컬럼에서는 가지고 있지 않은 값을 선택하는 것이 좋다 == index_table 자체를 작게 가져갈 수 있기 때문이다
- 인덱스 사용 시, Use a Global Secondary Index For Quick Lookups
- use non key
- use key : index table 에 컬럼을 일부만 사용
- 읽기 조건 사용 : Create an Eventually Consistent Read Replica
- 자주 사용하지 않을 index 를 만들지 마라 == 파일 I/O 가 더 발생하게 된다
'Nosql > aws dynamoDB' 카테고리의 다른 글
DynamoDB 소개 (0) | 2016.08.02 |
---|---|
DynamoDB 특징 (0) | 2016.08.01 |