SlideShare a Scribd company logo
1 of 71
Download to read offline
NoSQL Guide & Sample
S.O.Lab / OracleOn(Lee Sang On)

14년 1월 8일 수요일
NO SQL & Not Only SQL
Oracle , MSSQL , MySQL
카산드라, 몽고DB , H베이스 , 카우치DB
애플리케이션 개발 생산성: 관계형 DB 매핑
대규모 데이터 : 데이터를 더 빨리 수집,처리
비용절감

14년 1월 8일 수요일
강의 목차
왜 NoSQL 인가? 수평확장?
NoSQL 의 3가지 데이터모델
NoSQL 집합구조의 단점,장점
NoSQL 분산 샤딩&복제
NoSQL 데이터 일관성
클러스터, 맵리듀스
몽고DB 구현
데이터베이스 선택 논의

14년 1월 8일 수요일
왜 NoSQL 인가? 수평확장?
RDBMS 는 트랜잭션을 통해 동시성을 보장한다.
RDBMS 는 여러종류의 협업을 하나의DB로 통합
벤더가 달라도 SQL구문의 90%이상 유사성
RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치
- 관계형 모델과 메모리 내 데이터 구조가 다르다.
ID: solab
username: on
Date: 2014-01-06
OrderNum: 201400123
item list
1. 20140111 / S / black / 2 / 3000$
2. 20140112 / m / black / 1 / 7000$
3. 20140113 / L / black / 3 / 5000$
Pay Method
Card: Amex
C.Number : 1234-123-1234
expiry: 04/2014

14년 1월 8일 수요일
왜 NoSQL 인가? 수평확장?
RDBMS 는 트랜잭션을 통해 동시성을 보장한다.
RDBMS 는 여러종류의 협업을 하나의DB로 통합
벤더가 달라도 SQL구문의 90%이상 유사성
RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치
- 관계형 모델과 메모리 내 데이터 구조가 다르다.
ID: solab
username: on
Date: 2014-01-06
OrderNum: 201400123
item list
1. 20140111 / S / black / 2 / 3000$
2. 20140112 / m / black / 1 / 7000$
3. 20140113 / L / black / 3 / 5000$
Pay Method
Card: Amex
C.Number : 1234-123-1234
expiry: 04/2014

14년 1월 8일 수요일

Order_Info
왜 NoSQL 인가? 수평확장?
RDBMS 는 트랜잭션을 통해 동시성을 보장한다.
RDBMS 는 여러종류의 협업을 하나의DB로 통합
벤더가 달라도 SQL구문의 90%이상 유사성
RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치
- 관계형 모델과 메모리 내 데이터 구조가 다르다.
ID: solab
username: on
Date: 2014-01-06
OrderNum: 201400123
item list
1. 20140111 / S / black / 2 / 3000$
2. 20140112 / m / black / 1 / 7000$
3. 20140113 / L / black / 3 / 5000$
Pay Method
Card: Amex
C.Number : 1234-123-1234
expiry: 04/2014

14년 1월 8일 수요일

Order_Info
User_Info
왜 NoSQL 인가? 수평확장?
RDBMS 는 트랜잭션을 통해 동시성을 보장한다.
RDBMS 는 여러종류의 협업을 하나의DB로 통합
벤더가 달라도 SQL구문의 90%이상 유사성
RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치
- 관계형 모델과 메모리 내 데이터 구조가 다르다.
ID: solab
username: on
Date: 2014-01-06
OrderNum: 201400123
item list
1. 20140111 / S / black / 2 / 3000$
2. 20140112 / m / black / 1 / 7000$
3. 20140113 / L / black / 3 / 5000$
Pay Method
Card: Amex
C.Number : 1234-123-1234
expiry: 04/2014

14년 1월 8일 수요일

Order_Info
User_Info
Order_Detail_Info
왜 NoSQL 인가? 수평확장?
RDBMS 는 트랜잭션을 통해 동시성을 보장한다.
RDBMS 는 여러종류의 협업을 하나의DB로 통합
벤더가 달라도 SQL구문의 90%이상 유사성
RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치
- 관계형 모델과 메모리 내 데이터 구조가 다르다.
ID: solab
username: on
Date: 2014-01-06
OrderNum: 201400123
item list
1. 20140111 / S / black / 2 / 3000$
2. 20140112 / m / black / 1 / 7000$
3. 20140113 / L / black / 3 / 5000$
Pay Method
Card: Amex
C.Number : 1234-123-1234
expiry: 04/2014

14년 1월 8일 수요일

Order_Info
User_Info
Order_Detail_Info
credit_info
왜 NoSQL 인가? 수평확장?
RDBMS 는 트랜잭션을 통해 동시성을 보장한다.
RDBMS 는 여러종류의 협업을 하나의DB로 통합
벤더가 달라도 SQL구문의 90%이상 유사성
RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치
- 관계형 모델과 메모리 내 데이터 구조가 다르다.
ID: solab
username: on
Date: 2014-01-06
OrderNum: 201400123
item list
1. 20140111 / S / black / 2 / 3000$
2. 20140112 / m / black / 1 / 7000$
3. 20140113 / L / black / 3 / 5000$
Pay Method
Card: Amex
C.Number : 1234-123-1234
expiry: 04/2014

14년 1월 8일 수요일

Order_Info
User_Info
Order_Detail_Info
credit_info
왜 NoSQL 인가? 수평확장?
RDBMS 는 트랜잭션을 통해 동시성을 보장한다.
RDBMS 는 여러종류의 협업을 하나의DB로 통합
벤더가 달라도 SQL구문의 90%이상 유사성
RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치
- 관계형 모델과 메모리 내 데이터 구조가 다르다.
ID: solab
username: on
Date: 2014-01-06
OrderNum: 201400123
item list
1. 20140111 / S / black / 2 / 3000$
2. 20140112 / m / black / 1 / 7000$
3. 20140113 / L / black / 3 / 5000$
Pay Method
Card: Amex
C.Number : 1234-123-1234
expiry: 04/2014

14년 1월 8일 수요일

Order_Info
User_Info
Order_Detail_Info
credit_info
왜 NoSQL 인가? 수평확장?
RDBMS 는 트랜잭션을 통해 동시성을 보장한다.
RDBMS 는 여러종류의 협업을 하나의DB로 통합
벤더가 달라도 SQL구문의 90%이상 유사성
RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치
- 관계형 모델과 메모리 내 데이터 구조가 다르다.
ID: solab
username: on
Date: 2014-01-06
OrderNum: 201400123
item list
1. 20140111 / S / black / 2 / 3000$
2. 20140112 / m / black / 1 / 7000$
3. 20140113 / L / black / 3 / 5000$
Pay Method
Card: Amex
C.Number : 1234-123-1234
expiry: 04/2014

14년 1월 8일 수요일

Order_Info
User_Info
Order_Detail_Info
credit_info
왜 NoSQL 인가? 수평확장?
RDBMS 는 트랜잭션을 통해 동시성을 보장한다.
RDBMS 는 여러종류의 협업을 하나의DB로 통합
벤더가 달라도 SQL구문의 90%이상 유사성
RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치
- 관계형 모델과 메모리 내 데이터 구조가 다르다.
ID: solab
username: on
Date: 2014-01-06
OrderNum: 201400123
item list
1. 20140111 / S / black / 2 / 3000$
2. 20140112 / m / black / 1 / 7000$
3. 20140113 / L / black / 3 / 5000$
Pay Method
Card: Amex
C.Number : 1234-123-1234
expiry: 04/2014

14년 1월 8일 수요일

Order_Info
User_Info
Order_Detail_Info
credit_info
SNS, Smart Device 데이터 폭주 기관차
부족한 컴퓨팅 자원
더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장

14년 1월 8일 수요일
SNS, Smart Device 데이터 폭주 기관차
부족한 컴퓨팅 자원
더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장
작은장비를 많이 모아 클러스터를 구성 : 수평적 확장

14년 1월 8일 수요일
SNS, Smart Device 데이터 폭주 기관차
부족한 컴퓨팅 자원
더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장
작은장비를 많이 모아 클러스터를 구성 : 수평적 확장
- 낮은 비용의 하드웨어로 클러스터 구성가능
- 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스

14년 1월 8일 수요일
SNS, Smart Device 데이터 폭주 기관차
부족한 컴퓨팅 자원
더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장
작은장비를 많이 모아 클러스터를 구성 : 수평적 확장
- 낮은 비용의 하드웨어로 클러스터 구성가능
- 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스

많은 서비스가 클러스터로 이동하면서 문제점발생

14년 1월 8일 수요일
SNS, Smart Device 데이터 폭주 기관차
부족한 컴퓨팅 자원
더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장
작은장비를 많이 모아 클러스터를 구성 : 수평적 확장
- 낮은 비용의 하드웨어로 클러스터 구성가능
- 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스

많은 서비스가 클러스터로 이동하면서 문제점발생
- 관계형 데이터베이스는 클러스터에서 동작하도록 설계되지 않았다.
- 물론 Oracle Grid, MSSQL2008 에서 공유 디스크 개념은 있다.
- 하지만 여러 공유디스크에 걸치는 쿼리나, 트랜잭션은 불가능하다.

14년 1월 8일 수요일
SNS, Smart Device 데이터 폭주 기관차
부족한 컴퓨팅 자원
더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장
작은장비를 많이 모아 클러스터를 구성 : 수평적 확장
- 낮은 비용의 하드웨어로 클러스터 구성가능
- 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스

많은 서비스가 클러스터로 이동하면서 문제점발생
- 관계형 데이터베이스는 클러스터에서 동작하도록 설계되지 않았다.
- 물론 Oracle Grid, MSSQL2008 에서 공유 디스크 개념은 있다.
- 하지만 여러 공유디스크에 걸치는 쿼리나, 트랜잭션은 불가능하다.

RDBMS에 대한 위협은 실체가 없다. 하지만 클러스터의 위협은 무섭다.

14년 1월 8일 수요일
NoSQL 출현 : 1990년대 후반 오픈소스 RDBMS(Strozzi NoSQL)
질의어로 SQL를 사용하지 않는다. NOSQL
오픈소스, 분산, 비관계형 데이터베이스 , No 스키마

14년 1월 8일 수요일
NoSQL 출현 : 1990년대 후반 오픈소스 RDBMS(Strozzi NoSQL)
질의어로 SQL를 사용하지 않는다. NOSQL
오픈소스, 분산, 비관계형 데이터베이스 , No 스키마
NoSQL 모임의 7인조

14년 1월 8일 수요일
NoSQL 출현 : 1990년대 후반 오픈소스 RDBMS(Strozzi NoSQL)
질의어로 SQL를 사용하지 않는다. NOSQL
오픈소스, 분산, 비관계형 데이터베이스 , No 스키마
NoSQL 모임의 7인조
-볼드모트, 카산드라, 다이노마이트, H베이스,하이퍼테이블,카우치DB,몽고DB

14년 1월 8일 수요일
NoSQL 3가지 데이터모델
키- 값 (Key- value)
- 집합을 불투명한 덩어리로 취급
- 집합을 키로만 찾을수 있다.
- 제한적인 트랜잭션 제어를 제공

문서모델
- 집합을 투명하고 집합을 쿼리하고 일부만 꺼내올수 있다.
- 스키마가 없으므로 문서구조를 최적화 하기 어렵다.

컬럼 패밀리
- 집합을 칼럼 패밀리로 나누어, DB가 칼럼패밀리를 행 집합단위로 처리
- 집합에 구조를 강제하지만, DB가 이 구조정보를 이용해 접근성 향상

14년 1월 8일 수요일
쇼핑몰 DataBase 샘플
사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터

14년 1월 8일 수요일
쇼핑몰 DataBase 샘플
사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터

14년 1월 8일 수요일
쇼핑몰 DataBase 샘플
사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터

14년 1월 8일 수요일
쇼핑몰 DataBase 샘플
사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터
/
/고객
{
“id”:1,
“name”:”Martin”
“billingAddress”:[{“city”:”Chicago”}]
}

14년 1월 8일 수요일
쇼핑몰 DataBase 샘플
사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터
/
/고객
{
“id”:1,
“name”:”Martin”
“billingAddress”:[{“city”:”Chicago”}]
}
/
/주문
{
“id”:99,
“customerId”:1,
“orderItems”:[{
“productId”:27,
“price”:32.45,
“productName”:”NoSQL Distilled”
}],
“shippingAddress”:[{“city”:”Chicago”}],
“orderPayment”:[{
“ccinfo”:”10000-10000-10000-10000”,
“txnId”:”abcdefg123fg”,
“billingAddress”:{“city”:”Chicago”}
}],
}

14년 1월 8일 수요일
쇼핑몰 DataBase 샘플
집합의 경계를 어떻게 하는냐에 따라 구성이 달라진다.
/
/고객
{
“id”:1,
“name”:”Martin”
“billingAddress”:[{“city”:”Chicago”}]
}
/
/주문
{
“id”:99,
“customerId”:1,
“orderItems”:[{
“productId”:27,
“price”:32.45,
“productName”:”NoSQL Distilled”
}],
“shippingAddress”:[{“city”:”Chicago”}],
“orderPayment”:[{
“ccinfo”:”10000-10000-10000-10000”,
“txnId”:”abcdefg123fg”,
“billingAddress”:{“city”:”Chicago”}
}],
}

14년 1월 8일 수요일
쇼핑몰 DataBase 샘플
집합의 경계를 어떻게 하는냐에 따라 구성이 달라진다.
/ 고객
/
{
“customer”:
{
“id”:1,
“name”:”Martin”,
“billingAddress”:[{“city”:”Chicago”}],
/
/주문
“orders”:[{
{
“id”:99,
“id”:99,
“customerId”:1,
“customerId”:1,
“orderItems”:[{
“orderItems”:[{
“productId”:27,
“productId”:27,
“price”:32.45,
“price”:32.45,
“productName”:”NoSQL Distilled”
“productName”:”NoSQL Distilled”
}],
}],
“shippingAddress”:[{“city”:”Chicago”}],
“shippingAddress”:[{“city”:”Chicago”}],
“orderPayment”:[{
“orderPayment”:[{
“ccinfo”:”1000-1000-1000-1000”,
“ccinfo”:”10000-10000-10000-10000”,
“txnId”:”adfncer123df”,
“txnId”:”abcdefg123fg”,
“billingAddress”:{“city”:”Chicago”}
“billingAddress”:{“city”:”Chicago”}
}],
}],
}]
}
}
}
/
/고객
{
“id”:1,
“name”:”Martin”
“billingAddress”:[{“city”:”Chicago”}]
}

14년 1월 8일 수요일
NoSQL 집합구조의 단점,장점
목적에 따라 집합의 구성이 득이될수도 실이될수도.....
- 고객정보+주문정보 집합
- 지난 2주간 판매추이

DataBase DATA UPDATE
스키마 없는 DataBase
데이터 저장구조를 쉽게 바꿀수 있다. RDB는 컬럼삭제시 데이터 손실
뷰를 통해 저장된 형태와 다른 형태로 쉽게 볼수 있다.(RDBMS SQL)
구체화뷰.(NoSQL) 쿼리결과를 미리 계산하여 캐시해놓는다.(맵-리듀스)

14년 1월 8일 수요일
NoSQL 분산&샤딩
클러스터 데이터 분산 방법 복제(replication)와 샤딩(sharding)
- 복제 : 같은 데이터를 복사해 여러 노드에 분산
- 샤딩 : 각 노드마다 다른 데이터를 저장
- 복제와 샤딩은 둘중 하나만 사용할수도 있고 둘다 사용할수도 있다.
샤딩, Master-slave, peer-to-peer

샤딩

A,B

C

A,B,C
14년 1월 8일 수요일

D,E,F
샤딩(sharding)
데이터를 어떻게 뭉쳐놓으면 한 사용자가 한 서버로 부터 데이터를
대부분 얻게 할수 있는가? (server connection count reduce)
함께 접근되는 빈도가 높은 데이터를 모아서 집합 처리하는 것이 유리
NoSQL 집합처리는 분산의 아주 좋은 단위가 된다.
웹주소 역도메인으로 정렬후 샤딩(com.google.*****)
A~D 까지의 고객을 한 샤드에, E~G까지 고객을 다른샤드에....
NoSQL DATABASE에서 제공하는 자동샤딩
- 데이터를 각 샤드에 할당하고 데이터 접근시 올바른 샤드에 접근하도록 데이터베이스가 책임진다.

샤딩적용을 미루다가 적용시,데이터를 새로운 샤드에 옮기는 데 모든자
원을 소모해 DB를 사용할수 없는 지경에 이르기도....

14년 1월 8일 수요일
Master-Slave(복제)
DATA

A,B,C,D
master

A,B,C,D
slave
-

14년 1월 8일 수요일

A,B,C,D
slave

읽기가 많이 발생하는 데이터 집합을 가진경우 유리
읽기와 쓰기경로를 다른게 구성
마스터의 접속이 실패하더라도 슬레이브가 읽기요청을 처리할수 있다.
모든 슬레이브에 전파되기전에는 데이터 값이 다르다.
Peer-To-Peer(복제)
DATA

A,B,C,D
DATA

master

DATA
A,B,C,D

A,B,C,D

master

master

- 모든 노드에서 복제를 하여 동기화 한다.
- 쉽게 노드를 추가해서 성능을 향상 시킬수 있다.
- 두 사람이 동시에 동일한 레코드를 각 노드에 업데이트 하면 쓰기 충돌발생

14년 1월 8일 수요일
Sharding + Master-Slave

A,B

B,D

master

master

D-master& B-slave

A,D

C,B

B,D

slave

14년 1월 8일 수요일

C

slave

slave
Sharding + Peer-To_Peer

A,B

14년 1월 8일 수요일

C

D,B
-

A,C

A,D

C,B

칼럼 패밀리 데이터베이스에서 주로 쓰는 전략
샤딩된 데이터에 수백개 PTP연결이 생성
복제 인수를 3으로 해서, 각 샤드가 세개의 노드에 복제
한 노드 실패시 나머지 2개 노드를 이용하여 복구
NoSQL 데이터 일관성
업데이트 일관성
- 회사의 전화 번호를 2개발자가 동시에 업데이트 시도할 경우
(051-123-1234/0511231234) - 쓰기충돌(write-write conflict)
- 쓰기 잠금(한번에 한 클라이언트만 토큰)
- 조건적 업데이트(자신의 업데이트 이후 값이 변경되었는지 확인)
- 다른 노드에서 업데이트 발생후 충돌시(충돌발생 표시:SVN,GIT)
읽기 일관성
- 세션 일관성 1단계 : 스티키 세션(세션이 유지되는 동안에는 한 노드만 사용)
- 세션 일관성 2단계 : 버전 스탬프
저장소와 세션이 사용한 최근 버전스탬프 포함하여 업데이트,
버전 스탬프가 포함된 업데이트부터 보장

14년 1월 8일 수요일
클러스터 맵- 리듀스

14년 1월 8일 수요일
클러스터 맵- 리듀스
한 고객의 주문 정보를 한번에 보고싶다.

14년 1월 8일 수요일
클러스터 맵- 리듀스
한 고객의 주문 정보를 한번에 보고싶다.
/ 고객
/
{
“customer”:
{
“id”:1,
“name”:”Martin”,
“billingAddress”:[{“city”:”Chicago”}],
“orders”:[{
“id”:99,
“customerId”:1,
“orderItems”:[{
“productId”:27,
“price”:32.45,
“productName”:”NoSQL Distilled”
}],
“shippingAddress”:[{“city”:”Chicago”}],
“orderPayment”:[{
“ccinfo”:”1000-1000-1000-1000”,
“txnId”:”adfncer123df”,
“billingAddress”:{“city”:”Chicago”}
}],
}]
}
}

14년 1월 8일 수요일
클러스터 맵- 리듀스
한 고객의 주문 정보를 한번에 보고싶다.
/ 고객
/
{
“customer”:
{
“id”:1,
“name”:”Martin”,
“billingAddress”:[{“city”:”Chicago”}],
“orders”:[{
“id”:99,
“customerId”:1,
“orderItems”:[{
“productId”:27,
“price”:32.45,
“productName”:”NoSQL Distilled”
}],
“shippingAddress”:[{“city”:”Chicago”}],
“orderPayment”:[{
“ccinfo”:”1000-1000-1000-1000”,
“txnId”:”adfncer123df”,
“billingAddress”:{“city”:”Chicago”}
}],
}]
}
}

12월 한달동안의 A상품 판매 총액을 알고싶다. 헉.....

14년 1월 8일 수요일
클러스터 맵- 리듀스
ID:1001
customer:Ann
Items : {보이차,8개,2000원,16000원},
{현미차,4개,3000원,12000원},
{용정차,2개,5000원,10000원},
........
배송지 주소:~~~
지불방법 : ~~~

14년 1월 8일 수요일
클러스터 맵- 리듀스
NoSQL 에서 제품별 매출 보고서를 구현하는 비빌
ID:1001
customer:Ann
Items : {보이차,8개,2000원,16000원},
{현미차,4개,3000원,12000원},
{용정차,2개,5000원,10000원},
........
배송지 주소:~~~
지불방법 : ~~~

14년 1월 8일 수요일
클러스터 맵- 리듀스
NoSQL 에서 제품별 매출 보고서를 구현하는 비빌
ID:1001
customer:Ann
Items : {보이차,8개,2000원,16000원},
{현미차,4개,3000원,12000원},
{용정차,2개,5000원,10000원},
........
배송지 주소:~~~
지불방법 : ~~~

14년 1월 8일 수요일

map
클러스터 맵- 리듀스
NoSQL 에서 제품별 매출 보고서를 구현하는 비빌
ID:1001
customer:Ann
Items : {보이차,8개,2000원,16000원},
{현미차,4개,3000원,12000원},
{용정차,2개,5000원,10000원},
........
배송지 주소:~~~
지불방법 : ~~~

14년 1월 8일 수요일

map
클러스터 맵- 리듀스
NoSQL 에서 제품별 매출 보고서를 구현하는 비빌
ID:1001
customer:Ann
Items : {보이차,8개,2000원,16000원},
{현미차,4개,3000원,12000원},
{용정차,2개,5000원,10000원},
........
배송지 주소:~~~
지불방법 : ~~~

14년 1월 8일 수요일

보이차:{price:16000,quantity:8}

map
클러스터 맵- 리듀스
NoSQL 에서 제품별 매출 보고서를 구현하는 비빌
ID:1001
customer:Ann
Items : {보이차,8개,2000원,16000원},
{현미차,4개,3000원,12000원},
{용정차,2개,5000원,10000원},
........
배송지 주소:~~~
지불방법 : ~~~

14년 1월 8일 수요일

보이차:{price:16000,quantity:8}
현미차:{price:12000,quantity:4}

map
클러스터 맵- 리듀스
NoSQL 에서 제품별 매출 보고서를 구현하는 비빌
ID:1001
customer:Ann
Items : {보이차,8개,2000원,16000원},
{현미차,4개,3000원,12000원},
{용정차,2개,5000원,10000원},
........
배송지 주소:~~~
지불방법 : ~~~

14년 1월 8일 수요일

보이차:{price:16000,quantity:8}
현미차:{price:12000,quantity:4}

map

용정차:{price:10000,quantity:2}
클러스터 맵- 리듀스
NoSQL 에서 제품별 매출 보고서를 구현하는 비빌
ID:1001
customer:Ann
Items : {보이차,8개,2000원,16000원},
{현미차,4개,3000원,12000원},
{용정차,2개,5000원,10000원},
........
배송지 주소:~~~
지불방법 : ~~~

보이차:
price:16000,quantity:8
price:14000,quantity:7
price:20000,quantity:10

14년 1월 8일 수요일

보이차:{price:16000,quantity:8}
현미차:{price:12000,quantity:4}

map

용정차:{price:10000,quantity:2}
클러스터 맵- 리듀스
NoSQL 에서 제품별 매출 보고서를 구현하는 비빌
ID:1001
customer:Ann
Items : {보이차,8개,2000원,16000원},
{현미차,4개,3000원,12000원},
{용정차,2개,5000원,10000원},
........
배송지 주소:~~~
지불방법 : ~~~

보이차:
price:16000,quantity:8
price:14000,quantity:7
price:20000,quantity:10

14년 1월 8일 수요일

보이차:{price:16000,quantity:8}
현미차:{price:12000,quantity:4}

map

용정차:{price:10000,quantity:2}
클러스터 맵- 리듀스
NoSQL 에서 제품별 매출 보고서를 구현하는 비빌
ID:1001
customer:Ann
Items : {보이차,8개,2000원,16000원},
{현미차,4개,3000원,12000원},
{용정차,2개,5000원,10000원},
........
배송지 주소:~~~
지불방법 : ~~~

보이차:{price:16000,quantity:8}
현미차:{price:12000,quantity:4}

map

보이차:
price:16000,quantity:8
price:14000,quantity:7
price:20000,quantity:10

14년 1월 8일 수요일

reduce

용정차:{price:10000,quantity:2}
클러스터 맵- 리듀스
NoSQL 에서 제품별 매출 보고서를 구현하는 비빌
ID:1001
customer:Ann
Items : {보이차,8개,2000원,16000원},
{현미차,4개,3000원,12000원},
{용정차,2개,5000원,10000원},
........
배송지 주소:~~~
지불방법 : ~~~

보이차:{price:16000,quantity:8}
현미차:{price:12000,quantity:4}

map

용정차:{price:10000,quantity:2}

보이차:

보이차:
{price:50000,quantity:25}

price:16000,quantity:8
price:14000,quantity:7
price:20000,quantity:10

14년 1월 8일 수요일

reduce
클러스터 맵- 리듀스
맵 : 입력이 단일집합이고 출력은 여러개의 키-값 쌍인 함수
리듀스 : 똑같은 키에 대한 출력 여러개를 값을 결합한다.
맵-리듀스는 클러스터에서 계산의 병렬화를 할수 있다.
맵-리듀스 연산은 파이프라인으로 연결하여, 리듀스의 결과를 다른 맵으
로의 입력으로 사용할수 있다.
맵-리듀스 계산결과가 많이 사용된다면 구체화뷰로 저장할수 있다.
구체화뷰는 처음부터 다시 계산하는 대신 변경된 부분만 계산하는 점증
적 맵-리듀스 연산으로 업데이트 할수 있다.

14년 1월 8일 수요일
몽고DB 실습
문서모델 기반의 NoSQL
범위쿼리,인덱스, 정렬 같은 SQL 기능을 제공한다.
맵- 리듀스 집계 연산을 제공한다.
스키마가 없지만 컬렉션(스키마가 없는 테이블)이 있다.
Stored 프로시저 대신에 자바스크립트 함수를 서버단에 구성할수 있다.

{“foo”:3} {“foo”:”3”} {“Foo”:”3”}

14년 1월 8일 수요일
몽고DB install
1. Homebrew 설치(PackageManager)
- xcode 가 설치되어 있어야 한다.
- 터미널에서 다음과 같이 입력한다.

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"

14년 1월 8일 수요일
몽고DB install
2. MongoDB 설치
- 터미널에서 다음과 같이 입력한다.

brew install mongodb

14년 1월 8일 수요일
몽고DB install
3. MongoDB 실행
- 터미널에서 다음과 같이 입력한다.

mongod

- 새로운 터미널에서 다음과 같이 입력한다.

mongo

14년 1월 8일 수요일
몽고DB install
4. MongoDB 서버 접속
- 브라우저에서 다음으로 접속을 한다.

http://localhost:28017/

14년 1월 8일 수요일
MongoDB 쉘
- 터미널에서 mongod 로 서버시작
- 터미널에서 mongo로 쉡시작

14년 1월 8일 수요일
MongoDB 쉘
- 터미널에서 mongod 로 서버시작
- 터미널에서 mongo로 쉡시작

> x= 200
> x/5

14년 1월 8일 수요일
MongoDB 쉘
- 터미널에서 mongod 로 서버시작
- 터미널에서 mongo로 쉡시작

> x= 200
> x/5

14년 1월 8일 수요일

> Math.sin(Math.PI/2)
> new Date(“2014/1/8”)
MongoDB 쉘
- 터미널에서 mongod 로 서버시작
- 터미널에서 mongo로 쉡시작

> x= 200
> x/5

> Math.sin(Math.PI/2)
> new Date(“2014/1/8”)

> “SmADev in Seoul”.replace(“Seoul”,”Pusan”)

14년 1월 8일 수요일
MongoDB 쉘
- 터미널에서 mongod 로 서버시작
- 터미널에서 mongo로 쉡시작

> x= 200
> x/5

> Math.sin(Math.PI/2)
> new Date(“2014/1/8”)

> “SmADev in Seoul”.replace(“Seoul”,”Pusan”)

14년 1월 8일 수요일
MongoDB test DB
- 터미널에서 mongod 로 서버시작
- 터미널에서 mongo로 쉘시작

> use foobar
> db

1. 생성
- insert기능은 컬렉션에 문서를 추가한다.
- 임시문서(post)를 생성한다.

14년 1월 8일 수요일
MongoDB test DB
- 터미널에서 mongod 로 서버시작
- 터미널에서 mongo로 쉘시작

> use foobar
> db

1. 생성
- insert기능은 컬렉션에 문서를 추가한다.
- 임시문서(post)를 생성한다.
> post ={“title”:”My Study Post”,
“content”:”abcdefghijklnm”,
“date”:new Date()}

14년 1월 8일 수요일
MongoDB test DB
- 터미널에서 mongod 로 서버시작
- 터미널에서 mongo로 쉘시작

> use foobar
> db

1. 생성
- insert기능은 컬렉션에 문서를 추가한다.
- 임시문서(post)를 생성한다.
> post ={“title”:”My Study Post”,
“content”:”abcdefghijklnm”,
“date”:new Date()}

> db.blog.insert(post)

14년 1월 8일 수요일
2. 조회
> db.blog.find()

> db.blog.findOne()

14년 1월 8일 수요일
3. 갱신
- post 임시문서를 수정하여 키를 추가한다.

> post.readcount =0
> db.blog.update({title:"My Study Post"},post)
> db.blog.findOne()

14년 1월 8일 수요일
3. 갱신
- post 임시문서를 수정하여 키를 추가한다.

> post.readcount =0
> db.blog.update({title:"My Study Post"},post)
> db.blog.findOne()

14년 1월 8일 수요일
4. 삭제
> db.blog.remove({title : "My Study Post"})
> db.blog.find()
> db.blog.findOne()

14년 1월 8일 수요일
NoSQL DataBase 선택 논의

14년 1월 8일 수요일

More Related Content

What's hot

Mongo db로 배우는 nosql
Mongo db로 배우는 nosqlMongo db로 배우는 nosql
Mongo db로 배우는 nosqlSuwon Chae
 
No sql survey report
No sql survey reportNo sql survey report
No sql survey reportGichan Lee
 
하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기beom kyun choi
 
하둡 HDFS 훑어보기
하둡 HDFS 훑어보기하둡 HDFS 훑어보기
하둡 HDFS 훑어보기beom kyun choi
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷중선 곽
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다민철 정민철
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Yongho Ha
 
about hadoop yes
about hadoop yesabout hadoop yes
about hadoop yesEunsil Yoon
 
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)InBum Kim
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30Donghan Kim
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료beom kyun choi
 
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료BOMI KIM
 
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)Matthew (정재화)
 
181215 MS SQL로 알아보는 데이터베이스
181215 MS SQL로 알아보는 데이터베이스181215 MS SQL로 알아보는 데이터베이스
181215 MS SQL로 알아보는 데이터베이스KWANGIL KIM
 

What's hot (20)

Mongo db로 배우는 nosql
Mongo db로 배우는 nosqlMongo db로 배우는 nosql
Mongo db로 배우는 nosql
 
No sql survey report
No sql survey reportNo sql survey report
No sql survey report
 
하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기
 
10장
10장10장
10장
 
Hadoop발표자료
Hadoop발표자료Hadoop발표자료
Hadoop발표자료
 
(Apacje Spark)아파치 스파크 개요, 소개, 스파크란?
(Apacje Spark)아파치 스파크 개요, 소개, 스파크란?(Apacje Spark)아파치 스파크 개요, 소개, 스파크란?
(Apacje Spark)아파치 스파크 개요, 소개, 스파크란?
 
하둡 HDFS 훑어보기
하둡 HDFS 훑어보기하둡 HDFS 훑어보기
하둡 HDFS 훑어보기
 
Hdfs
HdfsHdfs
Hdfs
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
 
about hadoop yes
about hadoop yesabout hadoop yes
about hadoop yes
 
Spark and Shark
Spark and SharkSpark and Shark
Spark and Shark
 
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)
(11th korea data_tech_seminar)using_mongo_db_4.0_and_nosql_inbum_kim(skc&c)
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
 
Hive 입문 발표 자료
Hive 입문 발표 자료Hive 입문 발표 자료
Hive 입문 발표 자료
 
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
20180714 하둡 스터디 종료 보고 및 연구과제 발표자료
 
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)
Hadoop과 SQL-on-Hadoop (A short intro to Hadoop and SQL-on-Hadoop)
 
181215 MS SQL로 알아보는 데이터베이스
181215 MS SQL로 알아보는 데이터베이스181215 MS SQL로 알아보는 데이터베이스
181215 MS SQL로 알아보는 데이터베이스
 

Viewers also liked

하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기beom kyun choi
 
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음Dongseo University
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)Ubuntu Korea Community
 
NoSQL Database
NoSQL DatabaseNoSQL Database
NoSQL DatabaseSteve Min
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCHo Gyu Lee
 
Spark 소개 2부
Spark 소개 2부Spark 소개 2부
Spark 소개 2부Jinho Yoo
 
Spark 소개 1부
Spark 소개 1부Spark 소개 1부
Spark 소개 1부Jinho Yoo
 
1. introduction to algorithm
1. introduction to algorithm1. introduction to algorithm
1. introduction to algorithmGeunhyung Kim
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Daum DNA
 
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30Donghan Kim
 
GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘Taewoo Lee
 
NoSQL 동향
NoSQL 동향NoSQL 동향
NoSQL 동향NAVER D2
 
[H3 2012] 클라우드기반 앱 만들기 - baas.io SDK 활용
[H3 2012] 클라우드기반 앱 만들기 - baas.io SDK 활용[H3 2012] 클라우드기반 앱 만들기 - baas.io SDK 활용
[H3 2012] 클라우드기반 앱 만들기 - baas.io SDK 활용KTH, 케이티하이텔
 
카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox떠리 이
 
Not only SQL - Database Choices
Not only SQL - Database ChoicesNot only SQL - Database Choices
Not only SQL - Database ChoicesLynn Langit
 
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEPKTH, 케이티하이텔
 
Apache Spark Overview part2 (20161117)
Apache Spark Overview part2 (20161117)Apache Spark Overview part2 (20161117)
Apache Spark Overview part2 (20161117)Steve Min
 

Viewers also liked (20)

하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기
 
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
 
NoSQL Database
NoSQL DatabaseNoSQL Database
NoSQL Database
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 
Spark 소개 2부
Spark 소개 2부Spark 소개 2부
Spark 소개 2부
 
Spark 소개 1부
Spark 소개 1부Spark 소개 1부
Spark 소개 1부
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 
1. introduction to algorithm
1. introduction to algorithm1. introduction to algorithm
1. introduction to algorithm
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012
 
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
 
GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘
 
Cassandra
CassandraCassandra
Cassandra
 
NoSQL 동향
NoSQL 동향NoSQL 동향
NoSQL 동향
 
[H3 2012] 클라우드기반 앱 만들기 - baas.io SDK 활용
[H3 2012] 클라우드기반 앱 만들기 - baas.io SDK 활용[H3 2012] 클라우드기반 앱 만들기 - baas.io SDK 활용
[H3 2012] 클라우드기반 앱 만들기 - baas.io SDK 활용
 
카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox
 
Not only SQL - Database Choices
Not only SQL - Database ChoicesNot only SQL - Database Choices
Not only SQL - Database Choices
 
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
 
Tutorial olap4j
Tutorial olap4jTutorial olap4j
Tutorial olap4j
 
Apache Spark Overview part2 (20161117)
Apache Spark Overview part2 (20161117)Apache Spark Overview part2 (20161117)
Apache Spark Overview part2 (20161117)
 

Similar to NoSQL Guide & Sample

Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoGruter
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoMatthew (정재화)
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습동현 강
 
Mongodb and spatial
Mongodb and spatialMongodb and spatial
Mongodb and spatialJiyoon Kim
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability흥배 최
 
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016Amazon Web Services Korea
 
데이터 레이크 알아보기(Learn about Data Lake)
데이터 레이크 알아보기(Learn about Data Lake)데이터 레이크 알아보기(Learn about Data Lake)
데이터 레이크 알아보기(Learn about Data Lake)SeungYong Baek
 
분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기NAVER D2
 
Spark+Cassandra Data pipeline optimazation at recommend system for recommend ...
Spark+Cassandra Data pipeline optimazation at recommend system for recommend ...Spark+Cassandra Data pipeline optimazation at recommend system for recommend ...
Spark+Cassandra Data pipeline optimazation at recommend system for recommend ...SuseongPark
 
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1승빈이네 공작소
 
추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)AWSKRUG - AWS한국사용자모임
 
하둡 에코시스템 위에서 환상적인 테이크오프 - DSTS 2019
하둡 에코시스템 위에서 환상적인 테이크오프 - DSTS 2019 하둡 에코시스템 위에서 환상적인 테이크오프 - DSTS 2019
하둡 에코시스템 위에서 환상적인 테이크오프 - DSTS 2019 Kenneth Ceyer
 
레코벨의 추천 서비스 고군 분투기 - AWS Summit Seoul 2017
레코벨의 추천 서비스 고군 분투기 - AWS Summit Seoul 2017레코벨의 추천 서비스 고군 분투기 - AWS Summit Seoul 2017
레코벨의 추천 서비스 고군 분투기 - AWS Summit Seoul 2017Amazon Web Services Korea
 
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106SangHoon Lee
 
[빅데이터 컨퍼런스 전희원]
[빅데이터 컨퍼런스 전희원][빅데이터 컨퍼런스 전희원]
[빅데이터 컨퍼런스 전희원]Jayoung Lim
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기Wonha Ryu
 
[경북] I'mcloud openlight
[경북] I'mcloud openlight[경북] I'mcloud openlight
[경북] I'mcloud openlightstartupkorea
 
안정적인 서비스 운영 2013.08
안정적인 서비스 운영   2013.08안정적인 서비스 운영   2013.08
안정적인 서비스 운영 2013.08Changyol BAEK
 
Cloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeCloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeSANG WON PARK
 

Similar to NoSQL Guide & Sample (20)

Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습
 
Mongodb and spatial
Mongodb and spatialMongodb and spatial
Mongodb and spatial
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
 
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
 
데이터 레이크 알아보기(Learn about Data Lake)
데이터 레이크 알아보기(Learn about Data Lake)데이터 레이크 알아보기(Learn about Data Lake)
데이터 레이크 알아보기(Learn about Data Lake)
 
분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기분산저장시스템 개발에 대한 12가지 이야기
분산저장시스템 개발에 대한 12가지 이야기
 
Spark+Cassandra Data pipeline optimazation at recommend system for recommend ...
Spark+Cassandra Data pipeline optimazation at recommend system for recommend ...Spark+Cassandra Data pipeline optimazation at recommend system for recommend ...
Spark+Cassandra Data pipeline optimazation at recommend system for recommend ...
 
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
 
NoSQL?? (marc)
NoSQL?? (marc)NoSQL?? (marc)
NoSQL?? (marc)
 
추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)
 
하둡 에코시스템 위에서 환상적인 테이크오프 - DSTS 2019
하둡 에코시스템 위에서 환상적인 테이크오프 - DSTS 2019 하둡 에코시스템 위에서 환상적인 테이크오프 - DSTS 2019
하둡 에코시스템 위에서 환상적인 테이크오프 - DSTS 2019
 
레코벨의 추천 서비스 고군 분투기 - AWS Summit Seoul 2017
레코벨의 추천 서비스 고군 분투기 - AWS Summit Seoul 2017레코벨의 추천 서비스 고군 분투기 - AWS Summit Seoul 2017
레코벨의 추천 서비스 고군 분투기 - AWS Summit Seoul 2017
 
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
 
[빅데이터 컨퍼런스 전희원]
[빅데이터 컨퍼런스 전희원][빅데이터 컨퍼런스 전희원]
[빅데이터 컨퍼런스 전희원]
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
 
[경북] I'mcloud openlight
[경북] I'mcloud openlight[경북] I'mcloud openlight
[경북] I'mcloud openlight
 
안정적인 서비스 운영 2013.08
안정적인 서비스 운영   2013.08안정적인 서비스 운영   2013.08
안정적인 서비스 운영 2013.08
 
Cloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeCloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflake
 

More from Sangon Lee

Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Sangon Lee
 
Android xml parsing
Android xml parsingAndroid xml parsing
Android xml parsingSangon Lee
 
Naver api for android
Naver api for androidNaver api for android
Naver api for androidSangon Lee
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Sangon Lee
 
번역돋보기 기획서
번역돋보기 기획서번역돋보기 기획서
번역돋보기 기획서Sangon Lee
 
Storyboard iOS 개발실습예제
Storyboard iOS 개발실습예제Storyboard iOS 개발실습예제
Storyboard iOS 개발실습예제Sangon Lee
 
17. cocos2d 기초
17. cocos2d  기초17. cocos2d  기초
17. cocos2d 기초Sangon Lee
 

More from Sangon Lee (10)

Gcd ppt
Gcd pptGcd ppt
Gcd ppt
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
 
Android xml parsing
Android xml parsingAndroid xml parsing
Android xml parsing
 
Naver api for android
Naver api for androidNaver api for android
Naver api for android
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조
 
Facebook api
Facebook apiFacebook api
Facebook api
 
번역돋보기 기획서
번역돋보기 기획서번역돋보기 기획서
번역돋보기 기획서
 
StudyShare
StudyShareStudyShare
StudyShare
 
Storyboard iOS 개발실습예제
Storyboard iOS 개발실습예제Storyboard iOS 개발실습예제
Storyboard iOS 개발실습예제
 
17. cocos2d 기초
17. cocos2d  기초17. cocos2d  기초
17. cocos2d 기초
 

NoSQL Guide & Sample

  • 1. NoSQL Guide & Sample S.O.Lab / OracleOn(Lee Sang On) 14년 1월 8일 수요일
  • 2. NO SQL & Not Only SQL Oracle , MSSQL , MySQL 카산드라, 몽고DB , H베이스 , 카우치DB 애플리케이션 개발 생산성: 관계형 DB 매핑 대규모 데이터 : 데이터를 더 빨리 수집,처리 비용절감 14년 1월 8일 수요일
  • 3. 강의 목차 왜 NoSQL 인가? 수평확장? NoSQL 의 3가지 데이터모델 NoSQL 집합구조의 단점,장점 NoSQL 분산 샤딩&복제 NoSQL 데이터 일관성 클러스터, 맵리듀스 몽고DB 구현 데이터베이스 선택 논의 14년 1월 8일 수요일
  • 4. 왜 NoSQL 인가? 수평확장? RDBMS 는 트랜잭션을 통해 동시성을 보장한다. RDBMS 는 여러종류의 협업을 하나의DB로 통합 벤더가 달라도 SQL구문의 90%이상 유사성 RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다. ID: solab username: on Date: 2014-01-06 OrderNum: 201400123 item list 1. 20140111 / S / black / 2 / 3000$ 2. 20140112 / m / black / 1 / 7000$ 3. 20140113 / L / black / 3 / 5000$ Pay Method Card: Amex C.Number : 1234-123-1234 expiry: 04/2014 14년 1월 8일 수요일
  • 5. 왜 NoSQL 인가? 수평확장? RDBMS 는 트랜잭션을 통해 동시성을 보장한다. RDBMS 는 여러종류의 협업을 하나의DB로 통합 벤더가 달라도 SQL구문의 90%이상 유사성 RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다. ID: solab username: on Date: 2014-01-06 OrderNum: 201400123 item list 1. 20140111 / S / black / 2 / 3000$ 2. 20140112 / m / black / 1 / 7000$ 3. 20140113 / L / black / 3 / 5000$ Pay Method Card: Amex C.Number : 1234-123-1234 expiry: 04/2014 14년 1월 8일 수요일 Order_Info
  • 6. 왜 NoSQL 인가? 수평확장? RDBMS 는 트랜잭션을 통해 동시성을 보장한다. RDBMS 는 여러종류의 협업을 하나의DB로 통합 벤더가 달라도 SQL구문의 90%이상 유사성 RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다. ID: solab username: on Date: 2014-01-06 OrderNum: 201400123 item list 1. 20140111 / S / black / 2 / 3000$ 2. 20140112 / m / black / 1 / 7000$ 3. 20140113 / L / black / 3 / 5000$ Pay Method Card: Amex C.Number : 1234-123-1234 expiry: 04/2014 14년 1월 8일 수요일 Order_Info User_Info
  • 7. 왜 NoSQL 인가? 수평확장? RDBMS 는 트랜잭션을 통해 동시성을 보장한다. RDBMS 는 여러종류의 협업을 하나의DB로 통합 벤더가 달라도 SQL구문의 90%이상 유사성 RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다. ID: solab username: on Date: 2014-01-06 OrderNum: 201400123 item list 1. 20140111 / S / black / 2 / 3000$ 2. 20140112 / m / black / 1 / 7000$ 3. 20140113 / L / black / 3 / 5000$ Pay Method Card: Amex C.Number : 1234-123-1234 expiry: 04/2014 14년 1월 8일 수요일 Order_Info User_Info Order_Detail_Info
  • 8. 왜 NoSQL 인가? 수평확장? RDBMS 는 트랜잭션을 통해 동시성을 보장한다. RDBMS 는 여러종류의 협업을 하나의DB로 통합 벤더가 달라도 SQL구문의 90%이상 유사성 RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다. ID: solab username: on Date: 2014-01-06 OrderNum: 201400123 item list 1. 20140111 / S / black / 2 / 3000$ 2. 20140112 / m / black / 1 / 7000$ 3. 20140113 / L / black / 3 / 5000$ Pay Method Card: Amex C.Number : 1234-123-1234 expiry: 04/2014 14년 1월 8일 수요일 Order_Info User_Info Order_Detail_Info credit_info
  • 9. 왜 NoSQL 인가? 수평확장? RDBMS 는 트랜잭션을 통해 동시성을 보장한다. RDBMS 는 여러종류의 협업을 하나의DB로 통합 벤더가 달라도 SQL구문의 90%이상 유사성 RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다. ID: solab username: on Date: 2014-01-06 OrderNum: 201400123 item list 1. 20140111 / S / black / 2 / 3000$ 2. 20140112 / m / black / 1 / 7000$ 3. 20140113 / L / black / 3 / 5000$ Pay Method Card: Amex C.Number : 1234-123-1234 expiry: 04/2014 14년 1월 8일 수요일 Order_Info User_Info Order_Detail_Info credit_info
  • 10. 왜 NoSQL 인가? 수평확장? RDBMS 는 트랜잭션을 통해 동시성을 보장한다. RDBMS 는 여러종류의 협업을 하나의DB로 통합 벤더가 달라도 SQL구문의 90%이상 유사성 RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다. ID: solab username: on Date: 2014-01-06 OrderNum: 201400123 item list 1. 20140111 / S / black / 2 / 3000$ 2. 20140112 / m / black / 1 / 7000$ 3. 20140113 / L / black / 3 / 5000$ Pay Method Card: Amex C.Number : 1234-123-1234 expiry: 04/2014 14년 1월 8일 수요일 Order_Info User_Info Order_Detail_Info credit_info
  • 11. 왜 NoSQL 인가? 수평확장? RDBMS 는 트랜잭션을 통해 동시성을 보장한다. RDBMS 는 여러종류의 협업을 하나의DB로 통합 벤더가 달라도 SQL구문의 90%이상 유사성 RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다. ID: solab username: on Date: 2014-01-06 OrderNum: 201400123 item list 1. 20140111 / S / black / 2 / 3000$ 2. 20140112 / m / black / 1 / 7000$ 3. 20140113 / L / black / 3 / 5000$ Pay Method Card: Amex C.Number : 1234-123-1234 expiry: 04/2014 14년 1월 8일 수요일 Order_Info User_Info Order_Detail_Info credit_info
  • 12. 왜 NoSQL 인가? 수평확장? RDBMS 는 트랜잭션을 통해 동시성을 보장한다. RDBMS 는 여러종류의 협업을 하나의DB로 통합 벤더가 달라도 SQL구문의 90%이상 유사성 RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다. ID: solab username: on Date: 2014-01-06 OrderNum: 201400123 item list 1. 20140111 / S / black / 2 / 3000$ 2. 20140112 / m / black / 1 / 7000$ 3. 20140113 / L / black / 3 / 5000$ Pay Method Card: Amex C.Number : 1234-123-1234 expiry: 04/2014 14년 1월 8일 수요일 Order_Info User_Info Order_Detail_Info credit_info
  • 13. SNS, Smart Device 데이터 폭주 기관차 부족한 컴퓨팅 자원 더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장 14년 1월 8일 수요일
  • 14. SNS, Smart Device 데이터 폭주 기관차 부족한 컴퓨팅 자원 더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장 작은장비를 많이 모아 클러스터를 구성 : 수평적 확장 14년 1월 8일 수요일
  • 15. SNS, Smart Device 데이터 폭주 기관차 부족한 컴퓨팅 자원 더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장 작은장비를 많이 모아 클러스터를 구성 : 수평적 확장 - 낮은 비용의 하드웨어로 클러스터 구성가능 - 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스 14년 1월 8일 수요일
  • 16. SNS, Smart Device 데이터 폭주 기관차 부족한 컴퓨팅 자원 더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장 작은장비를 많이 모아 클러스터를 구성 : 수평적 확장 - 낮은 비용의 하드웨어로 클러스터 구성가능 - 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스 많은 서비스가 클러스터로 이동하면서 문제점발생 14년 1월 8일 수요일
  • 17. SNS, Smart Device 데이터 폭주 기관차 부족한 컴퓨팅 자원 더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장 작은장비를 많이 모아 클러스터를 구성 : 수평적 확장 - 낮은 비용의 하드웨어로 클러스터 구성가능 - 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스 많은 서비스가 클러스터로 이동하면서 문제점발생 - 관계형 데이터베이스는 클러스터에서 동작하도록 설계되지 않았다. - 물론 Oracle Grid, MSSQL2008 에서 공유 디스크 개념은 있다. - 하지만 여러 공유디스크에 걸치는 쿼리나, 트랜잭션은 불가능하다. 14년 1월 8일 수요일
  • 18. SNS, Smart Device 데이터 폭주 기관차 부족한 컴퓨팅 자원 더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장 작은장비를 많이 모아 클러스터를 구성 : 수평적 확장 - 낮은 비용의 하드웨어로 클러스터 구성가능 - 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스 많은 서비스가 클러스터로 이동하면서 문제점발생 - 관계형 데이터베이스는 클러스터에서 동작하도록 설계되지 않았다. - 물론 Oracle Grid, MSSQL2008 에서 공유 디스크 개념은 있다. - 하지만 여러 공유디스크에 걸치는 쿼리나, 트랜잭션은 불가능하다. RDBMS에 대한 위협은 실체가 없다. 하지만 클러스터의 위협은 무섭다. 14년 1월 8일 수요일
  • 19. NoSQL 출현 : 1990년대 후반 오픈소스 RDBMS(Strozzi NoSQL) 질의어로 SQL를 사용하지 않는다. NOSQL 오픈소스, 분산, 비관계형 데이터베이스 , No 스키마 14년 1월 8일 수요일
  • 20. NoSQL 출현 : 1990년대 후반 오픈소스 RDBMS(Strozzi NoSQL) 질의어로 SQL를 사용하지 않는다. NOSQL 오픈소스, 분산, 비관계형 데이터베이스 , No 스키마 NoSQL 모임의 7인조 14년 1월 8일 수요일
  • 21. NoSQL 출현 : 1990년대 후반 오픈소스 RDBMS(Strozzi NoSQL) 질의어로 SQL를 사용하지 않는다. NOSQL 오픈소스, 분산, 비관계형 데이터베이스 , No 스키마 NoSQL 모임의 7인조 -볼드모트, 카산드라, 다이노마이트, H베이스,하이퍼테이블,카우치DB,몽고DB 14년 1월 8일 수요일
  • 22. NoSQL 3가지 데이터모델 키- 값 (Key- value) - 집합을 불투명한 덩어리로 취급 - 집합을 키로만 찾을수 있다. - 제한적인 트랜잭션 제어를 제공 문서모델 - 집합을 투명하고 집합을 쿼리하고 일부만 꺼내올수 있다. - 스키마가 없으므로 문서구조를 최적화 하기 어렵다. 컬럼 패밀리 - 집합을 칼럼 패밀리로 나누어, DB가 칼럼패밀리를 행 집합단위로 처리 - 집합에 구조를 강제하지만, DB가 이 구조정보를 이용해 접근성 향상 14년 1월 8일 수요일
  • 23. 쇼핑몰 DataBase 샘플 사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터 14년 1월 8일 수요일
  • 24. 쇼핑몰 DataBase 샘플 사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터 14년 1월 8일 수요일
  • 25. 쇼핑몰 DataBase 샘플 사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터 14년 1월 8일 수요일
  • 26. 쇼핑몰 DataBase 샘플 사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터 / /고객 { “id”:1, “name”:”Martin” “billingAddress”:[{“city”:”Chicago”}] } 14년 1월 8일 수요일
  • 27. 쇼핑몰 DataBase 샘플 사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터 / /고객 { “id”:1, “name”:”Martin” “billingAddress”:[{“city”:”Chicago”}] } / /주문 { “id”:99, “customerId”:1, “orderItems”:[{ “productId”:27, “price”:32.45, “productName”:”NoSQL Distilled” }], “shippingAddress”:[{“city”:”Chicago”}], “orderPayment”:[{ “ccinfo”:”10000-10000-10000-10000”, “txnId”:”abcdefg123fg”, “billingAddress”:{“city”:”Chicago”} }], } 14년 1월 8일 수요일
  • 28. 쇼핑몰 DataBase 샘플 집합의 경계를 어떻게 하는냐에 따라 구성이 달라진다. / /고객 { “id”:1, “name”:”Martin” “billingAddress”:[{“city”:”Chicago”}] } / /주문 { “id”:99, “customerId”:1, “orderItems”:[{ “productId”:27, “price”:32.45, “productName”:”NoSQL Distilled” }], “shippingAddress”:[{“city”:”Chicago”}], “orderPayment”:[{ “ccinfo”:”10000-10000-10000-10000”, “txnId”:”abcdefg123fg”, “billingAddress”:{“city”:”Chicago”} }], } 14년 1월 8일 수요일
  • 29. 쇼핑몰 DataBase 샘플 집합의 경계를 어떻게 하는냐에 따라 구성이 달라진다. / 고객 / { “customer”: { “id”:1, “name”:”Martin”, “billingAddress”:[{“city”:”Chicago”}], / /주문 “orders”:[{ { “id”:99, “id”:99, “customerId”:1, “customerId”:1, “orderItems”:[{ “orderItems”:[{ “productId”:27, “productId”:27, “price”:32.45, “price”:32.45, “productName”:”NoSQL Distilled” “productName”:”NoSQL Distilled” }], }], “shippingAddress”:[{“city”:”Chicago”}], “shippingAddress”:[{“city”:”Chicago”}], “orderPayment”:[{ “orderPayment”:[{ “ccinfo”:”1000-1000-1000-1000”, “ccinfo”:”10000-10000-10000-10000”, “txnId”:”adfncer123df”, “txnId”:”abcdefg123fg”, “billingAddress”:{“city”:”Chicago”} “billingAddress”:{“city”:”Chicago”} }], }], }] } } } / /고객 { “id”:1, “name”:”Martin” “billingAddress”:[{“city”:”Chicago”}] } 14년 1월 8일 수요일
  • 30. NoSQL 집합구조의 단점,장점 목적에 따라 집합의 구성이 득이될수도 실이될수도..... - 고객정보+주문정보 집합 - 지난 2주간 판매추이 DataBase DATA UPDATE 스키마 없는 DataBase 데이터 저장구조를 쉽게 바꿀수 있다. RDB는 컬럼삭제시 데이터 손실 뷰를 통해 저장된 형태와 다른 형태로 쉽게 볼수 있다.(RDBMS SQL) 구체화뷰.(NoSQL) 쿼리결과를 미리 계산하여 캐시해놓는다.(맵-리듀스) 14년 1월 8일 수요일
  • 31. NoSQL 분산&샤딩 클러스터 데이터 분산 방법 복제(replication)와 샤딩(sharding) - 복제 : 같은 데이터를 복사해 여러 노드에 분산 - 샤딩 : 각 노드마다 다른 데이터를 저장 - 복제와 샤딩은 둘중 하나만 사용할수도 있고 둘다 사용할수도 있다. 샤딩, Master-slave, peer-to-peer 샤딩 A,B C A,B,C 14년 1월 8일 수요일 D,E,F
  • 32. 샤딩(sharding) 데이터를 어떻게 뭉쳐놓으면 한 사용자가 한 서버로 부터 데이터를 대부분 얻게 할수 있는가? (server connection count reduce) 함께 접근되는 빈도가 높은 데이터를 모아서 집합 처리하는 것이 유리 NoSQL 집합처리는 분산의 아주 좋은 단위가 된다. 웹주소 역도메인으로 정렬후 샤딩(com.google.*****) A~D 까지의 고객을 한 샤드에, E~G까지 고객을 다른샤드에.... NoSQL DATABASE에서 제공하는 자동샤딩 - 데이터를 각 샤드에 할당하고 데이터 접근시 올바른 샤드에 접근하도록 데이터베이스가 책임진다. 샤딩적용을 미루다가 적용시,데이터를 새로운 샤드에 옮기는 데 모든자 원을 소모해 DB를 사용할수 없는 지경에 이르기도.... 14년 1월 8일 수요일
  • 33. Master-Slave(복제) DATA A,B,C,D master A,B,C,D slave - 14년 1월 8일 수요일 A,B,C,D slave 읽기가 많이 발생하는 데이터 집합을 가진경우 유리 읽기와 쓰기경로를 다른게 구성 마스터의 접속이 실패하더라도 슬레이브가 읽기요청을 처리할수 있다. 모든 슬레이브에 전파되기전에는 데이터 값이 다르다.
  • 34. Peer-To-Peer(복제) DATA A,B,C,D DATA master DATA A,B,C,D A,B,C,D master master - 모든 노드에서 복제를 하여 동기화 한다. - 쉽게 노드를 추가해서 성능을 향상 시킬수 있다. - 두 사람이 동시에 동일한 레코드를 각 노드에 업데이트 하면 쓰기 충돌발생 14년 1월 8일 수요일
  • 35. Sharding + Master-Slave A,B B,D master master D-master& B-slave A,D C,B B,D slave 14년 1월 8일 수요일 C slave slave
  • 36. Sharding + Peer-To_Peer A,B 14년 1월 8일 수요일 C D,B - A,C A,D C,B 칼럼 패밀리 데이터베이스에서 주로 쓰는 전략 샤딩된 데이터에 수백개 PTP연결이 생성 복제 인수를 3으로 해서, 각 샤드가 세개의 노드에 복제 한 노드 실패시 나머지 2개 노드를 이용하여 복구
  • 37. NoSQL 데이터 일관성 업데이트 일관성 - 회사의 전화 번호를 2개발자가 동시에 업데이트 시도할 경우 (051-123-1234/0511231234) - 쓰기충돌(write-write conflict) - 쓰기 잠금(한번에 한 클라이언트만 토큰) - 조건적 업데이트(자신의 업데이트 이후 값이 변경되었는지 확인) - 다른 노드에서 업데이트 발생후 충돌시(충돌발생 표시:SVN,GIT) 읽기 일관성 - 세션 일관성 1단계 : 스티키 세션(세션이 유지되는 동안에는 한 노드만 사용) - 세션 일관성 2단계 : 버전 스탬프 저장소와 세션이 사용한 최근 버전스탬프 포함하여 업데이트, 버전 스탬프가 포함된 업데이트부터 보장 14년 1월 8일 수요일
  • 38. 클러스터 맵- 리듀스 14년 1월 8일 수요일
  • 39. 클러스터 맵- 리듀스 한 고객의 주문 정보를 한번에 보고싶다. 14년 1월 8일 수요일
  • 40. 클러스터 맵- 리듀스 한 고객의 주문 정보를 한번에 보고싶다. / 고객 / { “customer”: { “id”:1, “name”:”Martin”, “billingAddress”:[{“city”:”Chicago”}], “orders”:[{ “id”:99, “customerId”:1, “orderItems”:[{ “productId”:27, “price”:32.45, “productName”:”NoSQL Distilled” }], “shippingAddress”:[{“city”:”Chicago”}], “orderPayment”:[{ “ccinfo”:”1000-1000-1000-1000”, “txnId”:”adfncer123df”, “billingAddress”:{“city”:”Chicago”} }], }] } } 14년 1월 8일 수요일
  • 41. 클러스터 맵- 리듀스 한 고객의 주문 정보를 한번에 보고싶다. / 고객 / { “customer”: { “id”:1, “name”:”Martin”, “billingAddress”:[{“city”:”Chicago”}], “orders”:[{ “id”:99, “customerId”:1, “orderItems”:[{ “productId”:27, “price”:32.45, “productName”:”NoSQL Distilled” }], “shippingAddress”:[{“city”:”Chicago”}], “orderPayment”:[{ “ccinfo”:”1000-1000-1000-1000”, “txnId”:”adfncer123df”, “billingAddress”:{“city”:”Chicago”} }], }] } } 12월 한달동안의 A상품 판매 총액을 알고싶다. 헉..... 14년 1월 8일 수요일
  • 42. 클러스터 맵- 리듀스 ID:1001 customer:Ann Items : {보이차,8개,2000원,16000원}, {현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........ 배송지 주소:~~~ 지불방법 : ~~~ 14년 1월 8일 수요일
  • 43. 클러스터 맵- 리듀스 NoSQL 에서 제품별 매출 보고서를 구현하는 비빌 ID:1001 customer:Ann Items : {보이차,8개,2000원,16000원}, {현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........ 배송지 주소:~~~ 지불방법 : ~~~ 14년 1월 8일 수요일
  • 44. 클러스터 맵- 리듀스 NoSQL 에서 제품별 매출 보고서를 구현하는 비빌 ID:1001 customer:Ann Items : {보이차,8개,2000원,16000원}, {현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........ 배송지 주소:~~~ 지불방법 : ~~~ 14년 1월 8일 수요일 map
  • 45. 클러스터 맵- 리듀스 NoSQL 에서 제품별 매출 보고서를 구현하는 비빌 ID:1001 customer:Ann Items : {보이차,8개,2000원,16000원}, {현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........ 배송지 주소:~~~ 지불방법 : ~~~ 14년 1월 8일 수요일 map
  • 46. 클러스터 맵- 리듀스 NoSQL 에서 제품별 매출 보고서를 구현하는 비빌 ID:1001 customer:Ann Items : {보이차,8개,2000원,16000원}, {현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........ 배송지 주소:~~~ 지불방법 : ~~~ 14년 1월 8일 수요일 보이차:{price:16000,quantity:8} map
  • 47. 클러스터 맵- 리듀스 NoSQL 에서 제품별 매출 보고서를 구현하는 비빌 ID:1001 customer:Ann Items : {보이차,8개,2000원,16000원}, {현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........ 배송지 주소:~~~ 지불방법 : ~~~ 14년 1월 8일 수요일 보이차:{price:16000,quantity:8} 현미차:{price:12000,quantity:4} map
  • 48. 클러스터 맵- 리듀스 NoSQL 에서 제품별 매출 보고서를 구현하는 비빌 ID:1001 customer:Ann Items : {보이차,8개,2000원,16000원}, {현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........ 배송지 주소:~~~ 지불방법 : ~~~ 14년 1월 8일 수요일 보이차:{price:16000,quantity:8} 현미차:{price:12000,quantity:4} map 용정차:{price:10000,quantity:2}
  • 49. 클러스터 맵- 리듀스 NoSQL 에서 제품별 매출 보고서를 구현하는 비빌 ID:1001 customer:Ann Items : {보이차,8개,2000원,16000원}, {현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........ 배송지 주소:~~~ 지불방법 : ~~~ 보이차: price:16000,quantity:8 price:14000,quantity:7 price:20000,quantity:10 14년 1월 8일 수요일 보이차:{price:16000,quantity:8} 현미차:{price:12000,quantity:4} map 용정차:{price:10000,quantity:2}
  • 50. 클러스터 맵- 리듀스 NoSQL 에서 제품별 매출 보고서를 구현하는 비빌 ID:1001 customer:Ann Items : {보이차,8개,2000원,16000원}, {현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........ 배송지 주소:~~~ 지불방법 : ~~~ 보이차: price:16000,quantity:8 price:14000,quantity:7 price:20000,quantity:10 14년 1월 8일 수요일 보이차:{price:16000,quantity:8} 현미차:{price:12000,quantity:4} map 용정차:{price:10000,quantity:2}
  • 51. 클러스터 맵- 리듀스 NoSQL 에서 제품별 매출 보고서를 구현하는 비빌 ID:1001 customer:Ann Items : {보이차,8개,2000원,16000원}, {현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........ 배송지 주소:~~~ 지불방법 : ~~~ 보이차:{price:16000,quantity:8} 현미차:{price:12000,quantity:4} map 보이차: price:16000,quantity:8 price:14000,quantity:7 price:20000,quantity:10 14년 1월 8일 수요일 reduce 용정차:{price:10000,quantity:2}
  • 52. 클러스터 맵- 리듀스 NoSQL 에서 제품별 매출 보고서를 구현하는 비빌 ID:1001 customer:Ann Items : {보이차,8개,2000원,16000원}, {현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........ 배송지 주소:~~~ 지불방법 : ~~~ 보이차:{price:16000,quantity:8} 현미차:{price:12000,quantity:4} map 용정차:{price:10000,quantity:2} 보이차: 보이차: {price:50000,quantity:25} price:16000,quantity:8 price:14000,quantity:7 price:20000,quantity:10 14년 1월 8일 수요일 reduce
  • 53. 클러스터 맵- 리듀스 맵 : 입력이 단일집합이고 출력은 여러개의 키-값 쌍인 함수 리듀스 : 똑같은 키에 대한 출력 여러개를 값을 결합한다. 맵-리듀스는 클러스터에서 계산의 병렬화를 할수 있다. 맵-리듀스 연산은 파이프라인으로 연결하여, 리듀스의 결과를 다른 맵으 로의 입력으로 사용할수 있다. 맵-리듀스 계산결과가 많이 사용된다면 구체화뷰로 저장할수 있다. 구체화뷰는 처음부터 다시 계산하는 대신 변경된 부분만 계산하는 점증 적 맵-리듀스 연산으로 업데이트 할수 있다. 14년 1월 8일 수요일
  • 54. 몽고DB 실습 문서모델 기반의 NoSQL 범위쿼리,인덱스, 정렬 같은 SQL 기능을 제공한다. 맵- 리듀스 집계 연산을 제공한다. 스키마가 없지만 컬렉션(스키마가 없는 테이블)이 있다. Stored 프로시저 대신에 자바스크립트 함수를 서버단에 구성할수 있다. {“foo”:3} {“foo”:”3”} {“Foo”:”3”} 14년 1월 8일 수요일
  • 55. 몽고DB install 1. Homebrew 설치(PackageManager) - xcode 가 설치되어 있어야 한다. - 터미널에서 다음과 같이 입력한다. ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)" 14년 1월 8일 수요일
  • 56. 몽고DB install 2. MongoDB 설치 - 터미널에서 다음과 같이 입력한다. brew install mongodb 14년 1월 8일 수요일
  • 57. 몽고DB install 3. MongoDB 실행 - 터미널에서 다음과 같이 입력한다. mongod - 새로운 터미널에서 다음과 같이 입력한다. mongo 14년 1월 8일 수요일
  • 58. 몽고DB install 4. MongoDB 서버 접속 - 브라우저에서 다음으로 접속을 한다. http://localhost:28017/ 14년 1월 8일 수요일
  • 59. MongoDB 쉘 - 터미널에서 mongod 로 서버시작 - 터미널에서 mongo로 쉡시작 14년 1월 8일 수요일
  • 60. MongoDB 쉘 - 터미널에서 mongod 로 서버시작 - 터미널에서 mongo로 쉡시작 > x= 200 > x/5 14년 1월 8일 수요일
  • 61. MongoDB 쉘 - 터미널에서 mongod 로 서버시작 - 터미널에서 mongo로 쉡시작 > x= 200 > x/5 14년 1월 8일 수요일 > Math.sin(Math.PI/2) > new Date(“2014/1/8”)
  • 62. MongoDB 쉘 - 터미널에서 mongod 로 서버시작 - 터미널에서 mongo로 쉡시작 > x= 200 > x/5 > Math.sin(Math.PI/2) > new Date(“2014/1/8”) > “SmADev in Seoul”.replace(“Seoul”,”Pusan”) 14년 1월 8일 수요일
  • 63. MongoDB 쉘 - 터미널에서 mongod 로 서버시작 - 터미널에서 mongo로 쉡시작 > x= 200 > x/5 > Math.sin(Math.PI/2) > new Date(“2014/1/8”) > “SmADev in Seoul”.replace(“Seoul”,”Pusan”) 14년 1월 8일 수요일
  • 64. MongoDB test DB - 터미널에서 mongod 로 서버시작 - 터미널에서 mongo로 쉘시작 > use foobar > db 1. 생성 - insert기능은 컬렉션에 문서를 추가한다. - 임시문서(post)를 생성한다. 14년 1월 8일 수요일
  • 65. MongoDB test DB - 터미널에서 mongod 로 서버시작 - 터미널에서 mongo로 쉘시작 > use foobar > db 1. 생성 - insert기능은 컬렉션에 문서를 추가한다. - 임시문서(post)를 생성한다. > post ={“title”:”My Study Post”, “content”:”abcdefghijklnm”, “date”:new Date()} 14년 1월 8일 수요일
  • 66. MongoDB test DB - 터미널에서 mongod 로 서버시작 - 터미널에서 mongo로 쉘시작 > use foobar > db 1. 생성 - insert기능은 컬렉션에 문서를 추가한다. - 임시문서(post)를 생성한다. > post ={“title”:”My Study Post”, “content”:”abcdefghijklnm”, “date”:new Date()} > db.blog.insert(post) 14년 1월 8일 수요일
  • 67. 2. 조회 > db.blog.find() > db.blog.findOne() 14년 1월 8일 수요일
  • 68. 3. 갱신 - post 임시문서를 수정하여 키를 추가한다. > post.readcount =0 > db.blog.update({title:"My Study Post"},post) > db.blog.findOne() 14년 1월 8일 수요일
  • 69. 3. 갱신 - post 임시문서를 수정하여 키를 추가한다. > post.readcount =0 > db.blog.update({title:"My Study Post"},post) > db.blog.findOne() 14년 1월 8일 수요일
  • 70. 4. 삭제 > db.blog.remove({title : "My Study Post"}) > db.blog.find() > db.blog.findOne() 14년 1월 8일 수요일
  • 71. NoSQL DataBase 선택 논의 14년 1월 8일 수요일