42
NoSQL 이이 이 이이 이이이

No sql 이해 및 활용 공개용

Embed Size (px)

Citation preview

Page 1: No sql 이해 및 활용 공개용

NoSQL 이해 및 활용 전영규

Page 2: No sql 이해 및 활용 공개용

HISTORY

Page 3: No sql 이해 및 활용 공개용

1980

1990

2000

2010

Relational Database

Page 4: No sql 이해 및 활용 공개용
Page 5: No sql 이해 및 활용 공개용

1980

1990

2000

2010

Relational Database

Object Database

20 년 동안 Relational Database 지배

Page 6: No sql 이해 및 활용 공개용

많은 트래픽

Page 7: No sql 이해 및 활용 공개용

높은 비용 , 성능 한계

이런 방법은 한계가 있다

Page 8: No sql 이해 및 활용 공개용

Sharding

id 1-2 id 3-4 id 5-6

APPLICATION

id 7-8 id 9-0

slave Slave slave Slave. . .

Master

Master

Page 9: No sql 이해 및 활용 공개용

BigTable, DynamoDB

NoSQL

Page 10: No sql 이해 및 활용 공개용

RDBMS VS NoSQL

RDBMS

relationaltablerow

column schema

jointransaction

stored Procedure trigger index

focus on consistencycentralized

NoSQL

non-relationalopen-source

clusterschema lessdecentralized

distributed systemsno transaction

no joinfocus on availabilitysimpler and faster

VERSUS

Page 11: No sql 이해 및 활용 공개용

Relational DBMS ACIDAtomicity 부분적으로 실행되다가 중단되지 않음예 ) 은행 계좌 예제 에서 송금시 금액 감소 , 금액 증가 동시에 성공 해야

Consistency 트랜잭션이 성공적으로 완료 하면 언제나 일관성 있는 데이터 유지

Isolation특정 트랜잭션 수행 시 다른 트랜잭션의 연산 작업을 볼 수도 끼어 들수도 없음

Durability성공적으로 수행된 트랜잭션은 영원히 반영 되어야 함 .

Page 12: No sql 이해 및 활용 공개용

NoSQL BASEBasic availability클러스터 덕분에 기본적으로 Available

Soft-state입력 데이터가 없는 상황 에서도 시스템의 상태는 항상 변경 될 수 있음

Eventual consistency잠시동안 데이터가 inconsistency 할 수 있으나 결국에는 consistency 상태

Page 13: No sql 이해 및 활용 공개용

ACID versus BASE

Page 14: No sql 이해 및 활용 공개용

Consistency VS AvailabilityConsistency - 항상 같은 데이터가 응답 되어야 한다 . - 예 ) 하나 주문만 되어야 한다 . 중복 예약은 발생 할 수 없음 - RDBMS 에서는 transaction 하여 데이터 consistency 보장

Availability- 언제나 응답할 수 있음- 예 ) 서버중에 장애가 발생해도 서비스 할 수 있음 . 그렇지 않은 경우는 장애페이지

Page 15: No sql 이해 및 활용 공개용

CAP VS PACELC theorem

- CAP 대한 논란이 많음 . - Partition Tolerance 정의가 일관성이 없다는

의견- CAP 장애 상황 일 경우는 성립이 됨

- CAP 보다 명확함- 정상 상황 일때 와 장애 상황 일때 의 특성을 파악- 네트워크 장애 상황 일 때는 A/C 둘 중 선택

장애 상황일 아닐때는 L(Latency)/C 중 선택

if there is a partition (P) how does the system tradeoff between availability and consistency (A and C); else (E) when the system is running as normal in the absence of partitions, how does the system tradeoff between latency (L) and consistency (C)?

Page 16: No sql 이해 및 활용 공개용

NoSQL 종류

Key-value store- Memcached, Redis, Riak, DynamoDB, Berkeley DB

Graph store- Neo4j, InfiniteGraph, AllegroGraph, S2Graph( 카카오 )

Column family store- Apache Cassandra, HBase, Accumulo

Document store- MongoDB, CouchDB, CouchBase, RavenDB, MarkLogic

Page 17: No sql 이해 및 활용 공개용

Key-value store

HashMap

Page 18: No sql 이해 및 활용 공개용

Key-value store 활용

- 대표적인 key-value store memcached/Redis- Memcached 는 논리적으로 메모리를 combine

함으로써낭비되는 메모리가 적음- memcached web cache 로 사용

Page 19: No sql 이해 및 활용 공개용

Document Store

No Schema

Page 20: No sql 이해 및 활용 공개용

Document Store 활용

뉴스 사이트

Blog

회원 가입

복잡한 상품 정보 JSON 포맷 으로 저장

Page 21: No sql 이해 및 활용 공개용

Column-Family Stores- Inspired by Google Bigtable paper

- Rows 에 많은 컬럼이 있음

- 각각의 컬럼은 key-value 형태name -> key

- 하나의 Row 는 여러 key-value 조합

- 각각의 row 에는 timestamp 함께 저장(write conflicts, TTL 등등 )

- RDBMS 와 다른점은 schema fixed null, empty string 넣어야 함 .

Page 22: No sql 이해 및 활용 공개용

Column-Family Stores 활용

- Event Logging(application 마다 고유의 컬럼을 가짐 )application state, error log

- E-Commerce 상품 추천 , 장바구니 등등

Page 23: No sql 이해 및 활용 공개용

Graph Databases- entities 와 entities 사이의

relationship 을 저장

- entities -> “Node” 속성 ( 박지성 , 기성용 ) 을 가짐

- relation -> “edge”방향과 , 속성 (like, friend) 을 가짐

- relationship 데이터에 특화 되어 있음

Page 24: No sql 이해 및 활용 공개용

Graph Databases 활용

- relationship 을 분석 하는데 최적화social networkingrecommend가족 관계shortest-path

Page 25: No sql 이해 및 활용 공개용

왜 NoSQL 을 쓰는가 ?

개발하기 쉽다

big data 처리 가능

Page 26: No sql 이해 및 활용 공개용

Cassandra 파헤치기

Page 27: No sql 이해 및 활용 공개용

- Big Table & Dynamo 장점만 - PA/EL

Page 28: No sql 이해 및 활용 공개용

Cassandra Data Structure

Page 29: No sql 이해 및 활용 공개용

Cassandra Ring- Cassandra cluster is called a ring.

- cassandra 1.1 이전 버전에서는각각의 노드는 token range 를 가지고있었음 .

- 노드를 추가 하거나 제거할 때token range 를 수동으로 계산 .

- 또한 특정 노드를 새로운 노드로 교체 해야 할때 큰 데이터인 경우시간이 오래 걸리고 부하 발생 .

Page 30: No sql 이해 및 활용 공개용

Cassandra 1.1 이후 Virtual nodes- 기존의 cassandra ring 문제점을 해결하기 위해 고안

- 각각의 노드는 small range 를 가짐range 는 자동으로 계산된다 .

- 빠른 복구 가능1.1 version 이하 -> 큰 범위를 가진 노드에서 복구1.1 이상 -> small range 를 가진 여러 노드로 부터 받기 때문에 복구 속도 빠름

Page 31: No sql 이해 및 활용 공개용

Cassandra Write- client cassandra 어느 노드들 중에 하나에 write

요청을 함 . 이 노드를 coordinator 라고 함

- coordinator 는 해당 데이터의 Row key 를 hashing 하여 어느 노드에 저장할지 결정

- Consistency Level 에 따라 몇 개의 노드에 write 할지 참고 함 .

- 특정 노드 상태가 정상이 아니라면 hint hand off 라는 공간에 write 데이터 저장노드가 정상으로 돌아올 때 데이터를 write 하기 위함

- 하지만 hint hand off 가 저장 되어 있는 노드가 장애가 발생하면 복구 불가능

Page 32: No sql 이해 및 활용 공개용

Cassandra write- 데이터 write 요청이 들어 오면 MemTable 메모리에 저장

장애에 대비 하기 위해 Commit log 로컬 디스크에 저장

- MemTable 에 데이터가 쌓이면 SSTable 에 데이터를 flush

- SSTable 은 immutable 하고 sequential 특징이 있어 다수의 SSTable 을 관리

Page 33: No sql 이해 및 활용 공개용

Cassandra Read- client 가 read 시 cassandra 노드들중 하나만

coordinator 로 지정 . 해당 요청의 row key 를 hashing 하여 접근해야할 노드위 위치 파악

- Consistency Level 을 체크하여 몇 개의 Replication 을 확인 할지 결정 후 가장 가까운 노드에 read 요청을 함 .

- 다른 가까운 노드들에는 Data Digest Request 를 함 .

- Data 와 Data Digest Request 를 비교하여 일치 하지 않으면 모든 노드들로부터 full date 를 가지고 와 그중 가장 최신 데이터 리턴

- 이후에 conflicting 노드 들은 최신 데이터로 업데이트 .

Page 34: No sql 이해 및 활용 공개용

1) 데이터 read 요청이 들어오면 먼저 MemTable 을 확인함 . 2) 데이터가 없다면 Multiple SSTable 에 바로 접근 하는게 아니라 Bloom Filter, Index 를 먼저 확인3) 각각의 SSTable 은 메모리에 저장되는 bloom filter 를 확인하여 해당 데이터가 있는지 빠르게 확인4) 데이터가 없으면 여러 다른 bloom filter 확인 하면서 데이터를 확인5) 데이터가 확인되면 index 를 뒤져 해당 데이터의 offset 정보 취득 후 빠르게 SSTable 에서 해당 데이터 retrieve

Cassandra Read within a node

Page 35: No sql 이해 및 활용 공개용

Delete Data- 데이터 삭제 요청이 있을 때 데이터를 바로 삭제 하는 것이 아님

- 해당 데이터에 tombstone marker 를 표시하고 SSTables compaction 시 데이터 삭제함

- 데이터가 삭제 되더라도 Tombstone 이 marked 되어 있는 것일 뿐 여전히 Disk 에 존재 함 .

- 따라서 SSTable 의 데이터를 Sequential 하게 읽어야 하는 Cassandra 특징 때문에 Tombstone 데이터는 무조건 읽힘 .

- 이러한 이유 때문에 Queue 방식으로 Cassandra 를 사용하면 안된다 .

Page 36: No sql 이해 및 활용 공개용

Cassandra Query Language (CQL)KEYSPACECREATE KEYSPACE RECOMMEND WITH REPLICATION = {‘CLASS’ : ‘NetworkTopologyStrategy’, ‘DC1’ : 3}

TABLECREATE TABLE RECOMMEND.ITEMBASE(

ITEM_ID TEXT,RECOMMEND_ID TEXT,PRIMARY KEY(ITEM_ID)

);

SELECTSELECT ITEM_ID FROM RECOMMEND.ITEMBASE;

DELETEDELETE FROM RECOMMEND.ITEMBASE WHERE ITEM_ID = ‘1’;

UPDATEUPDATE RECOMMEND.ITEMBASE SET RECOMMEND_ID = ‘2’ WHERE ITEM_ID = ‘1’;

Page 37: No sql 이해 및 활용 공개용

Cassandra 활용 - 추천

Page 38: No sql 이해 및 활용 공개용

1980

1990

2000

2010

Relational Database

Object Database

20 년 동안 Relational Database 지배

Polyglot persistence

Page 39: No sql 이해 및 활용 공개용

Microservice

NEO4j cassandra

Riak

Page 40: No sql 이해 및 활용 공개용

SUMMARY- NoSQL 는 항상 좋은 툴이 될 수 없다 .

Domain, Business rule 에 따라 신중한 결정이 필요하다

- 잘만 사용하면 이보다 좋을 수 없다

- NoSQL 은 계속 진화 하고 있다 . ACID 지원 하는 NoSQL 있음 ( 예 : RAVEN DB)

Page 41: No sql 이해 및 활용 공개용

참고 서적

Page 42: No sql 이해 및 활용 공개용

참고 사이트 https://www.youtube.com/watch?v=qI_g07C_Q5I&t=142s ( 강추 Martin Fowler NoSQL)

http://eincs.com/2013/07/misleading-and-truth-of-cap-theorem/ (CAP Theorem, 오해와 진실 )

http://meetup.toast.com/posts/58 Apache Cassandra 톺아보기 - 1 편

http://meetup.toast.com/posts/60 Apache Cassandra 톺아보기 - 2 편

http://meetup.toast.com/posts/65 Apache Cassandra 톺아보기 - 3 편