# 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
Posted by 감각적신사
,