'Nosql/aws dynamoDB'에 해당되는 글 3건

  1. 2016.08.26 DynamoDB 테이블 설계
  2. 2016.08.02 DynamoDB 소개
  3. 2016.08.01 DynamoDB 특징

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

# Intro of DynamoDB  


1. intro  

- Nosql Database service  

- SSD 구축  

- aws 에 의해 관리  

- 데이터 분할, 복제  

- 서버용량 프로비저닝  

2. consistency  

- write : 3 replica 유지 (aws S3 와 마찬가지로 3개의 region 에 복제본 유지)  

- 복제 관리는 aws 에 의해 관리됨  

- read : 

- *Eventually Consistent Read(default)* : 읽기 처리량 최대, 최신 기록을 반영하지 못할 수도 있다.  

- 문서에 의하면 1초 이내에 최신 기록을 3 복제로 반영해준다고 한다  

- Strongly Consistent Read : 해당 읽기 전에 성공적인 응답을 수신한 모든 쓰기를 반영한 결과를 반환함  

3. feature  

- 다양한 쿼리 지원  

- GET : 1 MB 이내 컬럼 처리  

- GetItem

- BatchGet : 다중 컬럼 입력 가능

- SET : 1 MB 이내 컬럼 처리  

- PutItem

- BatchPut : 다중 컬럼 입력 가능

- UPDATE  

- DELETE  

- **TODO : batch 와 일반 입출력 성능 비교?**

    - 조건부 연산 지원  

    - boolean 함수 : ATTRIBUTE_EXIST, CONTAINS, BEGINS_WITH  

    - 비교 : =, <>, Between, In  

    - 논리 : NOT, AND, OR  

    - 증가, 감소 지원  

    

4. data model  

     

- table  

- item 의 모음  

- primary key 는 반드시 지정해야 한다

- 제한 사항

- item 의 개수 제한이 없다

- 한 리전에 최대 256 개의 테이블 생성 가능 (추가 생성요청은 aws 통해서..)

- item  

- attribute 의 모음  

- 제한 사항

            - attribute 의 개수 제한이 없다

        - 한 item 의 attribute (key,value) 의 총 합은 400 KB 이하여야 한다

        - attribute

          - key-value 의 조합

            - hash key (필수) == primary key     /     range key (선택)

   

5. data type  

- scalar data type : number, string, binary

- multi-valued type : number set, string set, binart set

'Nosql > aws dynamoDB' 카테고리의 다른 글

DynamoDB 테이블 설계  (0) 2016.08.26
DynamoDB 특징  (0) 2016.08.01
Posted by 감각적신사
,

# DynamoDB in detail


1. index

- 기본 index : primary key 를 이용 (default)

- Local Secondary Index : 메인 테이블과 별개로 테이블이 생성되는 것은 아니고, 데이터를 저장하는 물리적인 node의 local storage에 색인 데이터가 생성

- Global Secondary Index : 메인 테이블과 별개로 새로운 테이블이 생성되고, 메인 테이블의 일부 item들을 projection한 결과를 저장할 수 있음


2. provisioned throughput

- aws 는 저장용량에 대한 비용 외로 추가적으로 read/write 에 대한 성능을 보장하면서 비용을 더 받는다

- 가격정책은 http://aws.amazon.com/ko/dynamodb/pricing/ 서 확인 가능하다

- Unit : 초당 읽은/쓴 아이템 수 * kb 단위 아이템 크기

- Read Capacity Units

- Eventually Consistent Read * 2 = Strongly Consistent Read

- 200 GetItem = 10 BatchGet (50 times) : api call 수가 아닌 아이템 수 이다...

- Write Capacity Units

- example : 512 byte * 200 read/sec = 1kb * 200 = 200 unit

        - 10TB 이상의 경우 실제 물리 서버가 나뉘게 되는데 이때 throughput 은 나뉘진 물리 서버 갯수만큼 나누어 적용되게 된다

   - example : 10 WCP 의 table 의 경우 node 10개 일 때 각각 1 WC 가 적용된다


3. Get the item

- 2가지 조회 방법이 있으며 두 방법 다 최대 1 mb 까지 조회 가능하다

- scan : 조건 없이 table 내의 모든 item 반환

- query : 조건(primary key)을 통해 해당되는 item 반환


4. Local Test

- http://dynamodb-local.s3-website-us-west-2.amazonaws.com/dynamodb_local_latest.tar.gz

- 압축 해제

- 실행 : java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar 

- 실행옵션

- -port 8888 : 8888 port 로 사용한다 (기본포트는 8000)

- -inMemory : db파일 생성하지 않고 memory 를 사용한다

    - 실행 확인

     - web : http://localhost:8888/shell

     - java client

        client = new AmazonDynamoDBClient(credentials);

               client.setEndpoint("http://localhost:8888");


5. 기타 제약 사항

- http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html

'Nosql > aws dynamoDB' 카테고리의 다른 글

DynamoDB 테이블 설계  (0) 2016.08.26
DynamoDB 소개  (0) 2016.08.02
Posted by 감각적신사
,