1. p a r a d i g m s h i f t
DynamoDB
1
A r a J o
p a r a d i g m s h i f t
2. p a r a d i g m s h i f t 2
1 NoSQLとは
登場背景
RDBMSとの差
RDBSの構造
NoSQLの構造
NoSQLの種類
2 DynamoDBとは
DynamoDBの構造
DynamoDBのデータモデル
料金
目次
3. p a r a d i g m s h i f t
1 NoSQLとは
登場背景
3
RDBMS → 個別のデータが関係を持ち、テーブルで維持される。
データとデータの集合に関係演算ができる。
占有率
90%
が、
大量のデータ処理
RDBMS???
4. p a r a d i g m s h i f t 4
1 NoSQLとは
登場背景
NoSQL
分散データベース
= not only sql
5. p a r a d i g m s h i f t 5
RDBMSとの差
・スキーマが固定されてない
・複雑なクエリーができない
1 NoSQLとは
RDBMSとの差
6. p a r a d i g m s h i f t 6
ID(primary key) 名前 住所 電話番号 社員番号
1 山村 東京都横浜 080-2345-4567 1111112
2 山田 東京都銀座 080-7454-2345 1111113
3 今村
千葉県幕張
本後
080-1234-5633 1111114
テーブル①
テーブル②
社員番号 部署 初級
1111112 開発部 部長
1111113 営業部 課長
1111114 管理部 主任
1 NoSQLとは
RDBSの構造
7. p a r a d i g m s h i f t 7
Action(Primary key) Attributes
login
{
id = ‘ara’
dataTime = ‘2015-09-08
19:58:03’
ipAddress= ’23.56.58.147’
}
create
{
id = ‘ara’
dataTime = ‘2015-09-08
19:58:03’
subject= ’Hello World’
}
1 NoSQLとは
NoSQLの構造
8. p a r a d i g m s h i f t 8
1 NoSQLとは
NoSQLの種類
アーキテクチャ
マスタ型 P2P型
イネーブラ型
オンメモリ オンディスク
データモデル
キー・バリュー型 Hibari
Dynamo
Vooldmort
Rlak
Memcached
Redis
Scalaris
Tokyo
Cabinet/Tyrant
カラム指向型
Bigtable
Hbase
Hypertable
Cassandra
グラフ型 Neo4j InfiniteGraph
ドキュメント指向
型
MongoDB
CouchDB
9. p a r a d i g m s h i f t 9
AZ A
AZ B AZ C
Region
読み
書き
アプリケーショ
ン
2 DynamoDBとは
DynamoDBの構造
10. p a r a d i g m s h i f t 10
2 DynamoDBとは
DynamoDBの構造
アプリケーション
データ追加
A B
C
D E
F
G H
I
...
DynamoDB
11. p a r a d i g m s h i f t 11
2 DynamoDBとは
DynamoDBのデータモデル
DynamoDBの基本的なデータ保存構造
Action(Primary key) Attributes
login
{
id = ‘ara’
dataTime = ‘2015-09-08
19:58:03’
ipAddress= ’23.56.58.147’
}
create
{
id = ‘ara’
dataTime = ‘2015-09-08
19:58:03’
subject= ’Hello World’
}
Item
Table
Attribute
Table
Item
Attribute
Itemの集め
Itemの数に制限なし。
PrimaryKey指定必要
Attributeの集め
Attributeの数に制限なし。
PrimaryKeyを含める
Key-Value方式。Keyは文字列。
12. p a r a d i g m s h i f t 12
2 DynamoDBとは
料金
支払いは実際に使用した分だけ。最低料金は不要
料金が発生するタイミングは以下です。
①処理容量(ユーザが指定、時間課金)
②データの保存量(月額・GB単位)
③データ転送量(月額・GB単位、転送量により価格変化)
https://aws.amazon.com/ko/dynamodb/pricing/?nc1=h_ls
Editor's Notes
점유율이 90나 되는 rdbms는 개별 데이터가 관계를 가지고, 테이블로 유지가 되며
데이터와 데이터의 집합에 관계 연산을 통해서 원하는 정보를 찾을 수 있다는 장점이 있는 반면에
IT인프라의 발전이나 데이터양의 증가로 대량의 데이터 처리가 필요하게 되었지만
RDBMS는 데이터와 테이블들이 서로 관계되어 있다는 점에서 대량의 데이터 처리에는 약하다는 단점이 있습니다.
그런 가운데 등장한 것이 nosqld입니다..
nosql은 쉽게 설명해서 분산 데이터베이스의 범주안에 들고
분산하는 단위는 파일이나 블록등으로 다르지만 발생하는 부하들을 병렬 처리를 통해서 데이터를 빨리 찾을 수 있도록 했다고 합니다.
하지만 그렇게 데이터를 빨리 찾을 수 있는 만큼 트랜잭션등의 기능이 없는데, 그것이 관계형 데이터베이스와의 큰 차이라고 할 수 있습니다.
그래서 이어서 관계형 데이터 베이스와의 차이점에 대해서 설명 드리려고 합니다.
크게 관계형 데이터베이스와는 두가지 큰 차이점이 있습니다.
nosql에는 스키마가 고정되어 있지 않다는 점,
두번째는 복잡한 쿼리가 불가능하다는 점
이 두가지가 관계형 데이터베이스와 크게 다른 두가지 차이점이라고 할 수 있습니다.
스키마가 고정되어 있지 않다는 것은 관계형 데이터베이스의 경우, 테이블에 데이터를 저장하기 전에 그 테이블의 구조를 미리 만들어 놓아야 합니다.
그리고 테이블에서 고정으로 사용할 primary key, foreign key를 정의해야합니다. 이런것들을 데이터베이스 스키마라고 하는데, 관계형에서는 미리 정해진 스키마에 맞게 데이터를 추가해야 하는 반면,
nosql에는 정해진 스키마가 없습니다.
그리고 nosql은 앞서 말했듯이 읽고 쓰는 것이 빠르고 처리 속도가 빠른 반면에 조인같은 복잡한 처리가 불가능합니다.
결론적으로 nosql은 복잡한 쿼리가 필요한 환경에는 적합하지 않다고 할 수 있습니다.
앞서 말씀드린 고정된 스키마가 없다는 차이점에 대해서 조금 더 상세하게 설명을 드리자면
관계형 데이터베이스는 테이블에 데이터를 저장하기 전에 테이블의 구조를 만든다음, 정해진 컬럼에 지정된 값을 넣어야 합니다.
그리고 테이블과 테이블을 관계지어서 쿼리를 하는 것도 가능합니다.
반면에 nosql은 정해진 스키마가 없이, 자신이 원하는 값들을 속성안에 마음껏 넣을 수 있습니다.
이런 nosql은 비 관계형 데이터베이스이기 때문에 그 범위가 매우 넓습니다.
크게 분류방법을 두가지로 나누는데,
어떤 형태로 데이터를 가질지(文字列)에 대해 데이터 모델,
어떻게 분산 데이터를 가질지에 대해 아키텍쳐 크게 이 두가지의 범위로 나누고 또 데이터 모델과 아키텍쳐 모델 안에 각자의 형태를 가지고 있습니다.
우선 키밸류 형이 있습니다. 오늘 설명드릴 다이나모 디비도 키밸류형인데요
키밸류형은 밸류를 단위로 데이터를 저장합니다. 言葉通りにキーとバリューを保存
그리고 장점으로는 심플하고 응답이 빠르다는 장점이 있습니다.
p2p형은 구성하는 노드가 모두 동등한 역할을 한다.
데이터 모델에 대해서는 뒤에서 더 자세하게 설명드리겠습니다
다음은 그런 nosql 형식인 dynamodb에 대해서 설명드리려고합니다.
DynamoDB는 리전별로 생성할 수 있으며 성능과 가용성을 위해 데이터를 3곳의 가용 영역AZ에 복제하여 저장합니다. 가용 영역이 장애가 발생하여 정지하더라도 DB를 정상적으로 사용할 수가 있습니다. 따라서 높은 가용성과 지속성을 제공하기 때문에 사용자가 따로 데이터를 백업할 필요가 없습니다.
DynamoDB는 저장할 수 있는 데이터 용량에 제한이 없습니다. 데이터 용량이 증가하면 DynamoDB가 알아서 스토리지를 늘리고 클러스터를 확장하여 데이터를 분산시킵니다.
기존 데이터베이스는 테이블의 용량이 커지면 샤딩Sharding이라는 방법을 통해 테이블의 데이터를 여러 서버에 분산해서 저장하였습니다. 그래서 애플리케이션 레벨에서 샤딩을 직접 구현하거나, DB에서 지원하는 샤딩 기능을 이용하는 등 개발과 운영이 상당히 번거로웠습니다. DynamoDB는 이런 것들을 자동으로 처리해주기 때문에 데이터가 늘어나는 것에 대해 신경을 쓸 필요가 없습니다.
샤딩(Sharding)은 데이터베이스를 분할(파티셔닝)하여 저장하는 방법입니다. 서버 한대에 대용량의 데이터베이스를 저장하기는 쉽지 않으므로 여러대에 분할하여 저장해야합니다. 테이블 별로 서버를 분할하는 방식, 사용자 이름 순, 날짜 순 등으로 분할하는 방식, 해시 키를 기준으로 분할하는 방식 등 다양한 방식이 있습니다.
DynamoDB와 SSDDynamoDB의 모든 데이터는 SSD(Solid State Drive)에 저장됩니다.
다음은 다이나모디비의 데이터모델에 대해서 입니다.
아까 nosql의 데이터 모델에 대해서 잠깐 설명드렸는데 다이나모 디비에서 구체적으로
어떤식으로 사용하고 있는지에 대해서 설명드리겠습니다.
다이나모 디비의 기본 데이터 저장 구조는 이런식으로 구성되어 있는데요
우선 테이블은 아이템들의 모임입니다. 만들 수 있는 아이템에 제한은 없습니다.
그리고 테이블은 반드시 기본 키를 지정해야 합니다.
한 리전 당 생성할 수 있는 테이블의 최대개수는 256개 -> aws에 요청해서 더 늘릴 수 있음.
다음은 아이템입니다. 아이템은 속성들의 모임입니다. 마찬가지로 속성의 개수에 제한은없습니다.
단지 아이템의 크기는 속성이름 과 값을 포함해서 64kb입니다
마지막으로 속성입니다. 속성은 키밸류 방식입니다. 키는 문자열이라야합니당. 그래서 키밸류ㅇㅇ