'Database/DynamoDB'에 해당하는 글 11건

About DynamoDB

Database/DynamoDB 2016. 2. 19. 20:57

DynamoDB는 Amazon의 NoSQL 데이터베이스 서비스로 RDMS 와 달리 스키마가 없다.

테이블의 데이터와 트래픽을 충분한 수의 서버로 자동 분산하여 일관되고 빠른 성능을 유지한다.

데이터가 저장되는 파티션 용량이 초과될 경우 자동으로 추가 파티션을 할당한다.



Table / Item / Attributes


DynamoDB 는 테이블(Table) > 항목(Item) > 속성(Attributes) 으로 구성된다.


테이블은 Primary Key 를 설정한 Attribute 하나 만으로도 생성할 수 있으며, 추후에 Attribute 들을 계속해서 추가할 수 있는 것이 특징이다.

테이블을 설계시에는 DynamoDB가 교차 테이블 조인을 지원하지 않는다는 점을 감안해야 한다.

Item 은 RDBS 에서의 레코드로, Attribute 은 RDBS 에서의 필드로 생각할 수 있다.

Attribute 는 이름/값의 조합이며 값은 scala(단일값) 이나 JSON 일 수 있다.

Attribute 수는 제한이 없지만, 하나의 Item 크기는 400 KB 를 넘을 수 없다.


아래는 제품카탈로그(ProductCalalog) 테이블에서 Id 에 Primary key 를 설정한 하나의 Item 예시이다.


1
2
3
4
5
6
7
8
9
10
11
   Id = 101                                       
   ProductName = "Book 101 Title"
   ISBN = "111-1111111111"
   Authors = [ "Author 1""Author 2" ]
   Price = -2
   Dimensions = "8.5 x 11.0 x 0.5"
   PageCount = 500
   InPublication = 1
   ProductCategory = "Book" 
}
cs


Primary key 인 Id 를 제외하고도 여러 Attribute 가 설정되어 있고, 값도 scala 와 JSON 의 집합으로 되어 있다.



Primary Key


Primary Key 는 테이블에서 각 Item 을 구분할 수 있는 고유 식별자이며, 데이터 타입은 문자열(String), 숫자(Number), 바이너리(Binary) 가 될 수 있다.

DynamoDB 는 두 가지 Primary Key 를 지원한다.


- Partition Key : 하나의 Attribute 로 구성된 Primary Key 이다. 이 Key 로 Item 을 저장할 파티션을 결정한다.

- Partition Key & Sort Key : 두개의 Attribute 로 구성된 복합 Primary Key 이다. Partition Key 로 Item 을 저장할 파티션을 결정하고, Sort Key 를 기준으로 정렬(기본 오름차순)되며, 이 경우 동일한 Partition Key 값에 대해 Sort Key 값은 중복될 수 없다.


Partition Key 는 Hash Attribute 라고도 하며, Sort Key 는 Range Attribute 라고도 한다.



Secondary Indexes


복합 Primary Key 를 갖는 테이블에는 secondary index 를 하나 이상 정의할 수 있다.

Primary Key 가 아닌 attributes 를 사용하여 데이터를 읽으려면, secondary index 를 사용하면 된다.

DynamoDB 는 두 가지 Secondary Indexes 를 지원한다.


- GSI(Global secondary index) : 테이블의 Partition Key & Sort Key 와 다른 Index.

- LSI(Local secondary index) : 테이블의 Partition Key 는 동일하고 Sort Key 는 다른 Index.


테이블 하나마다 GSI, LSI 는 각각 5개 까지 정의할 수 있다.



Data type


- Scalar types : Number, String, Binary, Boolean, Null

- Document types : List, Map

- Set types : String Set, Number Set, and Binary Set


String : UTF-8 사용. Primary Key 가 아니라면 크기는 제한이 없다. (하지만 Item 의 400 KB 제한을 받는다.) 문자열 비교시에는 ASCII 코드 값이 기준이다.

Number : 양/음수, 0 이 될 수 있다. 정밀도 최대 38자리. DynamoDB 로 값을 전달할 때는 숫자를 문자열로 변환하여 전달해야 한다.

Binary : 압축, 암호화 데이터나 이미지 같은 이진 데이터가 저장된다. DynamoDB 로 값을 전달할 때는 바이너리 데이터를 Base64 인코딩 텍스트로 전달해야 한다.

Document types : List 는 JSON 배열, Map 은 JSON 객체와 비슷하여 JSON 문서를 저장하는데 이상적. 여기에 포함되는 데이터들의 형식은 제한이 없다. 중첩 가능.

Set types : 집합이므로 각각의 값은 고유해야 하며 비어 있을 수 없다. 집합 Attribute 는 정렬되지 않는다.(무작위)



Query / Scan


두가지 모두 조건식을 사용하여 반환된 Item 을 제어할 수 있다.

Query 는 복합 Primary Key 가 설정된 테이블에서만 사용할 수 있다. 테이블이나 secondary index 에서 Item 을 가져오는 가장 효율적인 방법이다

Scan 은 테이블, secondary index 의 모든 Item 을 가져오므로 되도록 Query 를 사용할 수 있도록 설계한다.



eventually / Strongly Consistent Read


기본적으로 쓰기 작업이 완료될 경우 DynamoDB는 각 Item 의 여러 사본을 보관하는데 이 사이에 데이터 읽기 요청을 하면 최신 데이터가 반영되지 않은 채로 가져올 수 있다. 사본 복사는 보통 1초 내로 아주 짧은 시간이지만, 이런 상태에서의 데이터 요청을 eventually Consistent Read 라고 한다.

데이터 요청(GetItem, Query, Scan,...) 시, 파라미터를 지정하여 최신 데이터로 응답받는 strongly consistent read 결과를 요청할 수 있다.



Conditional Updates and Concurrency Control


DynamoDB 는 "조건부 쓰기(conditional write)" 기능을 지원하여, 서버 측 Item 과 클라이언트 측의 Item 사본이 동일한지 확인함으로써 데이터 충돌을 방지한다.

또한 "원자성 카운터(atomic counter)" 기능을 지원하여, 동시 쓰기 요청과 충돌없이 요청을 보내 기존 숫자 Attribute 값을 증감할 수 있다.



Provisioned Throughput


DynamoDB 는 테이블로부터 처리될 요청 처리 용량을 지정하는 것에 비례하여 과금이 된다.

읽기/쓰기에 대하여 크게 지정할수록 초당 처리할 수 있는 양은 많아지지만 그만큼 사용액이 추가된다.

아래는 처리 용량 단위를 계산하는 예이다.


- Read Capacity Units

Item 크기를 4 KB 단위로 반올림 하여 초당 몇번 읽기 작업을 할 것인지를 정한다.

strongly consistent read 는 초당 1개를 처리, eventually consistent read 는 초당 2개의 요청으로 구분한다.

예) 3 Kbyte Item 을 strongly consistent read 방식으로 초당 80개 읽으려 한다면 읽기 용량 단위는 80이 된다. (1 * 80)

예) 11 Kbyte Item 을 eventually consistent read 방식으로 초당 80개 읽으려 한다면 읽기 용량 단위는 40이 된다. (3 * 80 / 2)


- Write Capacity Units

Item 크기를 1 KB 단위로 반올림 하여 초당 몇번 쓰기 작업을 할 것인지를 정한다.

예) 512 Byte Item 을 초당 10개 쓰려고 한다면 쓰기 용량 단위는 10이 된다. (1 * 10)

예) 1,512 Byte Item 을 초당 20개 쓰려고 한다면 쓰기 용량 단위는 40이 된다. (2 * 20)




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,