71
NoSQL Guide & Sample S.O.Lab / OracleOn(Lee Sang On) 1418수요일

NoSQL Guide & Sample

Embed Size (px)

DESCRIPTION

NoSQL MongoDB install and sample

Citation preview

Page 1: NoSQL Guide &  Sample

NoSQL Guide & SampleS.O.Lab / OracleOn(Lee Sang On)

14년 1월 8일 수요일

Page 2: NoSQL Guide &  Sample

NO SQL & Not Only SQL

Oracle , MSSQL , MySQL

카산드라, 몽고DB , H베이스 , 카우치DB

애플리케이션 개발 생산성: 관계형 DB 매핑

대규모 데이터 : 데이터를 더 빨리 수집,처리

비용절감

14년 1월 8일 수요일

Page 3: NoSQL Guide &  Sample

강의 목차

왜 NoSQL 인가? 수평확장?

NoSQL 의 3가지 데이터모델

NoSQL 집합구조의 단점,장점

NoSQL 분산 샤딩&복제

NoSQL 데이터 일관성

클러스터, 맵리듀스

몽고DB 구현

데이터베이스 선택 논의

14년 1월 8일 수요일

Page 4: NoSQL Guide &  Sample

왜 NoSQL 인가? 수평확장?

RDBMS 는 트랜잭션을 통해 동시성을 보장한다.

RDBMS 는 여러종류의 협업을 하나의DB로 통합

벤더가 달라도 SQL구문의 90%이상 유사성

RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다.

ID: solabusername: on

Date: 2014-01-06OrderNum: 201400123

item list1. 20140111 / S / black / 2 / 3000$2. 20140112 / m / black / 1 / 7000$3. 20140113 / L / black / 3 / 5000$

Pay MethodCard: Amex

C.Number : 1234-123-1234expiry: 04/2014

14년 1월 8일 수요일

Page 5: NoSQL Guide &  Sample

왜 NoSQL 인가? 수평확장?

RDBMS 는 트랜잭션을 통해 동시성을 보장한다.

RDBMS 는 여러종류의 협업을 하나의DB로 통합

벤더가 달라도 SQL구문의 90%이상 유사성

RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다.

ID: solabusername: on

Date: 2014-01-06OrderNum: 201400123

item list1. 20140111 / S / black / 2 / 3000$2. 20140112 / m / black / 1 / 7000$3. 20140113 / L / black / 3 / 5000$

Pay MethodCard: Amex

C.Number : 1234-123-1234expiry: 04/2014

Order_Info

14년 1월 8일 수요일

Page 6: NoSQL Guide &  Sample

왜 NoSQL 인가? 수평확장?

RDBMS 는 트랜잭션을 통해 동시성을 보장한다.

RDBMS 는 여러종류의 협업을 하나의DB로 통합

벤더가 달라도 SQL구문의 90%이상 유사성

RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다.

ID: solabusername: on

Date: 2014-01-06OrderNum: 201400123

item list1. 20140111 / S / black / 2 / 3000$2. 20140112 / m / black / 1 / 7000$3. 20140113 / L / black / 3 / 5000$

Pay MethodCard: Amex

C.Number : 1234-123-1234expiry: 04/2014

Order_Info

User_Info

14년 1월 8일 수요일

Page 7: NoSQL Guide &  Sample

왜 NoSQL 인가? 수평확장?

RDBMS 는 트랜잭션을 통해 동시성을 보장한다.

RDBMS 는 여러종류의 협업을 하나의DB로 통합

벤더가 달라도 SQL구문의 90%이상 유사성

RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다.

ID: solabusername: on

Date: 2014-01-06OrderNum: 201400123

item list1. 20140111 / S / black / 2 / 3000$2. 20140112 / m / black / 1 / 7000$3. 20140113 / L / black / 3 / 5000$

Pay MethodCard: Amex

C.Number : 1234-123-1234expiry: 04/2014

Order_Info

User_Info

Order_Detail_Info

14년 1월 8일 수요일

Page 8: NoSQL Guide &  Sample

왜 NoSQL 인가? 수평확장?

RDBMS 는 트랜잭션을 통해 동시성을 보장한다.

RDBMS 는 여러종류의 협업을 하나의DB로 통합

벤더가 달라도 SQL구문의 90%이상 유사성

RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다.

ID: solabusername: on

Date: 2014-01-06OrderNum: 201400123

item list1. 20140111 / S / black / 2 / 3000$2. 20140112 / m / black / 1 / 7000$3. 20140113 / L / black / 3 / 5000$

Pay MethodCard: Amex

C.Number : 1234-123-1234expiry: 04/2014

Order_Info

User_Info

Order_Detail_Info

credit_info

14년 1월 8일 수요일

Page 9: NoSQL Guide &  Sample

왜 NoSQL 인가? 수평확장?

RDBMS 는 트랜잭션을 통해 동시성을 보장한다.

RDBMS 는 여러종류의 협업을 하나의DB로 통합

벤더가 달라도 SQL구문의 90%이상 유사성

RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다.

ID: solabusername: on

Date: 2014-01-06OrderNum: 201400123

item list1. 20140111 / S / black / 2 / 3000$2. 20140112 / m / black / 1 / 7000$3. 20140113 / L / black / 3 / 5000$

Pay MethodCard: Amex

C.Number : 1234-123-1234expiry: 04/2014

Order_Info

User_Info

Order_Detail_Info

credit_info

14년 1월 8일 수요일

Page 10: NoSQL Guide &  Sample

왜 NoSQL 인가? 수평확장?

RDBMS 는 트랜잭션을 통해 동시성을 보장한다.

RDBMS 는 여러종류의 협업을 하나의DB로 통합

벤더가 달라도 SQL구문의 90%이상 유사성

RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다.

ID: solabusername: on

Date: 2014-01-06OrderNum: 201400123

item list1. 20140111 / S / black / 2 / 3000$2. 20140112 / m / black / 1 / 7000$3. 20140113 / L / black / 3 / 5000$

Pay MethodCard: Amex

C.Number : 1234-123-1234expiry: 04/2014

Order_Info

User_Info

Order_Detail_Info

credit_info

14년 1월 8일 수요일

Page 11: NoSQL Guide &  Sample

왜 NoSQL 인가? 수평확장?

RDBMS 는 트랜잭션을 통해 동시성을 보장한다.

RDBMS 는 여러종류의 협업을 하나의DB로 통합

벤더가 달라도 SQL구문의 90%이상 유사성

RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다.

ID: solabusername: on

Date: 2014-01-06OrderNum: 201400123

item list1. 20140111 / S / black / 2 / 3000$2. 20140112 / m / black / 1 / 7000$3. 20140113 / L / black / 3 / 5000$

Pay MethodCard: Amex

C.Number : 1234-123-1234expiry: 04/2014

Order_Info

User_Info

Order_Detail_Info

credit_info

14년 1월 8일 수요일

Page 12: NoSQL Guide &  Sample

왜 NoSQL 인가? 수평확장?

RDBMS 는 트랜잭션을 통해 동시성을 보장한다.

RDBMS 는 여러종류의 협업을 하나의DB로 통합

벤더가 달라도 SQL구문의 90%이상 유사성

RDBMS의 숨기고 싶은 약점(?) : 객체-관계 불일치 - 관계형 모델과 메모리 내 데이터 구조가 다르다.

ID: solabusername: on

Date: 2014-01-06OrderNum: 201400123

item list1. 20140111 / S / black / 2 / 3000$2. 20140112 / m / black / 1 / 7000$3. 20140113 / L / black / 3 / 5000$

Pay MethodCard: Amex

C.Number : 1234-123-1234expiry: 04/2014

Order_Info

User_Info

Order_Detail_Info

credit_info

14년 1월 8일 수요일

Page 13: NoSQL Guide &  Sample

SNS, Smart Device 데이터 폭주 기관차

부족한 컴퓨팅 자원

더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장

14년 1월 8일 수요일

Page 14: NoSQL Guide &  Sample

SNS, Smart Device 데이터 폭주 기관차

부족한 컴퓨팅 자원

더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장

작은장비를 많이 모아 클러스터를 구성 : 수평적 확장

14년 1월 8일 수요일

Page 15: NoSQL Guide &  Sample

SNS, Smart Device 데이터 폭주 기관차

부족한 컴퓨팅 자원

더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장

작은장비를 많이 모아 클러스터를 구성 : 수평적 확장

- 낮은 비용의 하드웨어로 클러스터 구성가능- 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스

14년 1월 8일 수요일

Page 16: NoSQL Guide &  Sample

SNS, Smart Device 데이터 폭주 기관차

부족한 컴퓨팅 자원

더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장

작은장비를 많이 모아 클러스터를 구성 : 수평적 확장

- 낮은 비용의 하드웨어로 클러스터 구성가능- 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스

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

14년 1월 8일 수요일

Page 17: NoSQL Guide &  Sample

SNS, Smart Device 데이터 폭주 기관차

부족한 컴퓨팅 자원

더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장

작은장비를 많이 모아 클러스터를 구성 : 수평적 확장

- 낮은 비용의 하드웨어로 클러스터 구성가능- 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스

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

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

14년 1월 8일 수요일

Page 18: NoSQL Guide &  Sample

SNS, Smart Device 데이터 폭주 기관차

부족한 컴퓨팅 자원

더 큰장비에 더 많은 프로세서,디스크 스토리지,메모리 :수직적 확장

작은장비를 많이 모아 클러스터를 구성 : 수평적 확장

- 낮은 비용의 하드웨어로 클러스터 구성가능- 장비 한대가 실패하더라도 전체서비스는 중단없이 서비스

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

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

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

14년 1월 8일 수요일

Page 19: NoSQL Guide &  Sample

NoSQL 출현 : 1990년대 후반 오픈소스 RDBMS(Strozzi NoSQL)

질의어로 SQL를 사용하지 않는다. NOSQL

오픈소스, 분산, 비관계형 데이터베이스 , No 스키마

14년 1월 8일 수요일

Page 20: NoSQL Guide &  Sample

NoSQL 출현 : 1990년대 후반 오픈소스 RDBMS(Strozzi NoSQL)

질의어로 SQL를 사용하지 않는다. NOSQL

오픈소스, 분산, 비관계형 데이터베이스 , No 스키마

NoSQL 모임의 7인조

14년 1월 8일 수요일

Page 21: NoSQL Guide &  Sample

NoSQL 출현 : 1990년대 후반 오픈소스 RDBMS(Strozzi NoSQL)

질의어로 SQL를 사용하지 않는다. NOSQL

오픈소스, 분산, 비관계형 데이터베이스 , No 스키마

NoSQL 모임의 7인조

-볼드모트, 카산드라, 다이노마이트, H베이스,하이퍼테이블,카우치DB,몽고DB

14년 1월 8일 수요일

Page 22: NoSQL Guide &  Sample

NoSQL 3가지 데이터모델

키- 값 (Key- value)- 집합을 불투명한 덩어리로 취급- 집합을 키로만 찾을수 있다.- 제한적인 트랜잭션 제어를 제공

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

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

14년 1월 8일 수요일

Page 23: NoSQL Guide &  Sample

쇼핑몰 DataBase 샘플

사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터

14년 1월 8일 수요일

Page 24: NoSQL Guide &  Sample

쇼핑몰 DataBase 샘플

사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터

14년 1월 8일 수요일

Page 25: NoSQL Guide &  Sample

쇼핑몰 DataBase 샘플

사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터

14년 1월 8일 수요일

Page 26: NoSQL Guide &  Sample

쇼핑몰 DataBase 샘플

사용자, 제품목록,주문, 배송지주소, 청구서 발송지, 결제 데이터

//고객{“id”:1,“name”:”Martin”“billingAddress”:[{“city”:”Chicago”}]}

14년 1월 8일 수요일

Page 27: NoSQL Guide &  Sample

쇼핑몰 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일 수요일

Page 28: NoSQL Guide &  Sample

쇼핑몰 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일 수요일

Page 29: NoSQL Guide &  Sample

쇼핑몰 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”}}],

}

// 고객{“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일 수요일

Page 30: NoSQL Guide &  Sample

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

DataBase DATA UPDATE

스키마 없는 DataBase

데이터 저장구조를 쉽게 바꿀수 있다. RDB는 컬럼삭제시 데이터 손실

뷰를 통해 저장된 형태와 다른 형태로 쉽게 볼수 있다.(RDBMS SQL)

구체화뷰.(NoSQL) 쿼리결과를 미리 계산하여 캐시해놓는다.(맵-리듀스)

14년 1월 8일 수요일

Page 31: NoSQL Guide &  Sample

NoSQL 분산&샤딩클러스터 데이터 분산 방법 복제(replication)와 샤딩(sharding)

- 복제 : 같은 데이터를 복사해 여러 노드에 분산- 샤딩 : 각 노드마다 다른 데이터를 저장- 복제와 샤딩은 둘중 하나만 사용할수도 있고 둘다 사용할수도 있다.

샤딩, Master-slave, peer-to-peer

A,B C D,E,F

A,B,C

샤딩

14년 1월 8일 수요일

Page 32: NoSQL Guide &  Sample

데이터를 어떻게 뭉쳐놓으면 한 사용자가 한 서버로 부터 데이터를 대부분 얻게 할수 있는가? (server connection count reduce)

함께 접근되는 빈도가 높은 데이터를 모아서 집합 처리하는 것이 유리

NoSQL 집합처리는 분산의 아주 좋은 단위가 된다.

웹주소 역도메인으로 정렬후 샤딩(com.google.*****)

A~D 까지의 고객을 한 샤드에, E~G까지 고객을 다른샤드에....

NoSQL DATABASE에서 제공하는 자동샤딩

- 데이터를 각 샤드에 할당하고 데이터 접근시 올바른 샤드에 접근하도록 데이터베이스가 책임진다.

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

샤딩(sharding)

14년 1월 8일 수요일

Page 33: NoSQL Guide &  Sample

Master-Slave(복제)

A,B,C,D

A,B,C,D A,B,C,D

DATAmaster

slave slave

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

14년 1월 8일 수요일

Page 34: NoSQL Guide &  Sample

Peer-To-Peer(복제)

A,B,C,D

A,B,C,D A,B,C,D

DATAmaster

master master

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

DATADATA

14년 1월 8일 수요일

Page 35: NoSQL Guide &  Sample

Sharding + Master-Slave

A,D

A,Bmaster

slave

Cmaster

B,DD-master& B-slave

C,Bslave

B,Dslave

14년 1월 8일 수요일

Page 36: NoSQL Guide &  Sample

Sharding + Peer-To_Peer

A,B A,C C

D,B A,D C,B

- 칼럼 패밀리 데이터베이스에서 주로 쓰는 전략- 샤딩된 데이터에 수백개 PTP연결이 생성- 복제 인수를 3으로 해서, 각 샤드가 세개의 노드에 복제- 한 노드 실패시 나머지 2개 노드를 이용하여 복구

14년 1월 8일 수요일

Page 37: NoSQL Guide &  Sample

NoSQL 데이터 일관성업데이트 일관성

- 회사의 전화 번호를 2개발자가 동시에 업데이트 시도할 경우(051-123-1234/0511231234) - 쓰기충돌(write-write conflict)

- 쓰기 잠금(한번에 한 클라이언트만 토큰)- 조건적 업데이트(자신의 업데이트 이후 값이 변경되었는지 확인)- 다른 노드에서 업데이트 발생후 충돌시(충돌발생 표시:SVN,GIT)

읽기 일관성

- 세션 일관성 1단계 : 스티키 세션(세션이 유지되는 동안에는 한 노드만 사용)

- 세션 일관성 2단계 : 버전 스탬프

저장소와 세션이 사용한 최근 버전스탬프 포함하여 업데이트, 버전 스탬프가 포함된 업데이트부터 보장

14년 1월 8일 수요일

Page 38: NoSQL Guide &  Sample

클러스터 맵- 리듀스

14년 1월 8일 수요일

Page 39: NoSQL Guide &  Sample

클러스터 맵- 리듀스한 고객의 주문 정보를 한번에 보고싶다.

14년 1월 8일 수요일

Page 40: NoSQL Guide &  Sample

클러스터 맵- 리듀스한 고객의 주문 정보를 한번에 보고싶다.

// 고객{“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일 수요일

Page 41: NoSQL Guide &  Sample

클러스터 맵- 리듀스한 고객의 주문 정보를 한번에 보고싶다.

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

// 고객{“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일 수요일

Page 42: NoSQL Guide &  Sample

클러스터 맵- 리듀스

ID:1001customer:AnnItems : {보이차,8개,2000원,16000원},

{현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........배송지 주소:~~~지불방법 : ~~~

14년 1월 8일 수요일

Page 43: NoSQL Guide &  Sample

클러스터 맵- 리듀스NoSQL 에서 제품별 매출 보고서를 구현하는 비빌

ID:1001customer:AnnItems : {보이차,8개,2000원,16000원},

{현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........배송지 주소:~~~지불방법 : ~~~

14년 1월 8일 수요일

Page 44: NoSQL Guide &  Sample

클러스터 맵- 리듀스NoSQL 에서 제품별 매출 보고서를 구현하는 비빌

ID:1001customer:AnnItems : {보이차,8개,2000원,16000원},

{현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........배송지 주소:~~~지불방법 : ~~~ map

14년 1월 8일 수요일

Page 45: NoSQL Guide &  Sample

클러스터 맵- 리듀스NoSQL 에서 제품별 매출 보고서를 구현하는 비빌

ID:1001customer:AnnItems : {보이차,8개,2000원,16000원},

{현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........배송지 주소:~~~지불방법 : ~~~ map

14년 1월 8일 수요일

Page 46: NoSQL Guide &  Sample

클러스터 맵- 리듀스NoSQL 에서 제품별 매출 보고서를 구현하는 비빌

ID:1001customer:AnnItems : {보이차,8개,2000원,16000원},

{현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........배송지 주소:~~~지불방법 : ~~~ map

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

14년 1월 8일 수요일

Page 47: NoSQL Guide &  Sample

클러스터 맵- 리듀스NoSQL 에서 제품별 매출 보고서를 구현하는 비빌

ID:1001customer:AnnItems : {보이차,8개,2000원,16000원},

{현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........배송지 주소:~~~지불방법 : ~~~ map

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

현미차:{price:12000,quantity:4}

14년 1월 8일 수요일

Page 48: NoSQL Guide &  Sample

클러스터 맵- 리듀스NoSQL 에서 제품별 매출 보고서를 구현하는 비빌

ID:1001customer:AnnItems : {보이차,8개,2000원,16000원},

{현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........배송지 주소:~~~지불방법 : ~~~ map

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

현미차:{price:12000,quantity:4}

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

14년 1월 8일 수요일

Page 49: NoSQL Guide &  Sample

클러스터 맵- 리듀스NoSQL 에서 제품별 매출 보고서를 구현하는 비빌

ID:1001customer:AnnItems : {보이차,8개,2000원,16000원},

{현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........배송지 주소:~~~지불방법 : ~~~ map

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

현미차:{price:12000,quantity:4}

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

보이차:

price:16000,quantity:8

price:14000,quantity:7

price:20000,quantity:10

14년 1월 8일 수요일

Page 50: NoSQL Guide &  Sample

클러스터 맵- 리듀스NoSQL 에서 제품별 매출 보고서를 구현하는 비빌

ID:1001customer:AnnItems : {보이차,8개,2000원,16000원},

{현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........배송지 주소:~~~지불방법 : ~~~ map

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

현미차:{price:12000,quantity:4}

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

보이차:

price:16000,quantity:8

price:14000,quantity:7

price:20000,quantity:10

14년 1월 8일 수요일

Page 51: NoSQL Guide &  Sample

클러스터 맵- 리듀스NoSQL 에서 제품별 매출 보고서를 구현하는 비빌

ID:1001customer:AnnItems : {보이차,8개,2000원,16000원},

{현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........배송지 주소:~~~지불방법 : ~~~ map

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

현미차:{price:12000,quantity:4}

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

보이차:

price:16000,quantity:8

price:14000,quantity:7

price:20000,quantity:10reduce

14년 1월 8일 수요일

Page 52: NoSQL Guide &  Sample

클러스터 맵- 리듀스NoSQL 에서 제품별 매출 보고서를 구현하는 비빌

ID:1001customer:AnnItems : {보이차,8개,2000원,16000원},

{현미차,4개,3000원,12000원}, {용정차,2개,5000원,10000원}, ........배송지 주소:~~~지불방법 : ~~~ map

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

현미차:{price:12000,quantity:4}

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

보이차:

price:16000,quantity:8

price:14000,quantity:7

price:20000,quantity:10reduce

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

14년 1월 8일 수요일

Page 53: NoSQL Guide &  Sample

맵 : 입력이 단일집합이고 출력은 여러개의 키-값 쌍인 함수

클러스터 맵- 리듀스

리듀스 : 똑같은 키에 대한 출력 여러개를 값을 결합한다.

맵-리듀스는 클러스터에서 계산의 병렬화를 할수 있다.

맵-리듀스 연산은 파이프라인으로 연결하여, 리듀스의 결과를 다른 맵으로의 입력으로 사용할수 있다.

맵-리듀스 계산결과가 많이 사용된다면 구체화뷰로 저장할수 있다.

구체화뷰는 처음부터 다시 계산하는 대신 변경된 부분만 계산하는 점증적 맵-리듀스 연산으로 업데이트 할수 있다.

14년 1월 8일 수요일

Page 54: NoSQL Guide &  Sample

문서모델 기반의 NoSQL

범위쿼리,인덱스, 정렬 같은 SQL 기능을 제공한다.

맵- 리듀스 집계 연산을 제공한다.

스키마가 없지만 컬렉션(스키마가 없는 테이블)이 있다.

Stored 프로시저 대신에 자바스크립트 함수를 서버단에 구성할수 있다.

몽고DB 실습

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

14년 1월 8일 수요일

Page 55: NoSQL Guide &  Sample

몽고DB install1. Homebrew 설치(PackageManager)

- xcode 가 설치되어 있어야 한다.- 터미널에서 다음과 같이 입력한다.

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

14년 1월 8일 수요일

Page 56: NoSQL Guide &  Sample

몽고DB install2. MongoDB 설치

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

brew install mongodb

14년 1월 8일 수요일

Page 57: NoSQL Guide &  Sample

몽고DB install3. MongoDB 실행

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

mongod

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

mongo

14년 1월 8일 수요일

Page 58: NoSQL Guide &  Sample

몽고DB install4. MongoDB 서버 접속

- 브라우저에서 다음으로 접속을 한다.

http://localhost:28017/

14년 1월 8일 수요일

Page 59: NoSQL Guide &  Sample

MongoDB 쉘- 터미널에서 mongod 로 서버시작- 터미널에서 mongo로 쉡시작

14년 1월 8일 수요일

Page 60: NoSQL Guide &  Sample

MongoDB 쉘

> x= 200> x/5

- 터미널에서 mongod 로 서버시작- 터미널에서 mongo로 쉡시작

14년 1월 8일 수요일

Page 61: NoSQL Guide &  Sample

MongoDB 쉘

> x= 200> x/5

- 터미널에서 mongod 로 서버시작- 터미널에서 mongo로 쉡시작

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

14년 1월 8일 수요일

Page 62: NoSQL Guide &  Sample

MongoDB 쉘

> x= 200> x/5

- 터미널에서 mongod 로 서버시작- 터미널에서 mongo로 쉡시작

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

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

14년 1월 8일 수요일

Page 63: NoSQL Guide &  Sample

MongoDB 쉘

> x= 200> x/5

- 터미널에서 mongod 로 서버시작- 터미널에서 mongo로 쉡시작

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

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

14년 1월 8일 수요일

Page 64: NoSQL Guide &  Sample

MongoDB test DB

> use foobar> db

- 터미널에서 mongod 로 서버시작- 터미널에서 mongo로 쉘시작

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

14년 1월 8일 수요일

Page 65: NoSQL Guide &  Sample

MongoDB test DB

> use foobar> db

- 터미널에서 mongod 로 서버시작- 터미널에서 mongo로 쉘시작

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

> post ={“title”:”My Study Post”,“content”:”abcdefghijklnm”,“date”:new Date()}

14년 1월 8일 수요일

Page 66: NoSQL Guide &  Sample

MongoDB test DB

> use foobar> db

- 터미널에서 mongod 로 서버시작- 터미널에서 mongo로 쉘시작

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

> post ={“title”:”My Study Post”,“content”:”abcdefghijklnm”,“date”:new Date()}

> db.blog.insert(post)

14년 1월 8일 수요일

Page 67: NoSQL Guide &  Sample

> db.blog.find()2. 조회

> db.blog.findOne()

14년 1월 8일 수요일

Page 68: NoSQL Guide &  Sample

- post 임시문서를 수정하여 키를 추가한다.3. 갱신

> db.blog.findOne()

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

14년 1월 8일 수요일

Page 69: NoSQL Guide &  Sample

- post 임시문서를 수정하여 키를 추가한다.3. 갱신

> db.blog.findOne()

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

14년 1월 8일 수요일

Page 70: NoSQL Guide &  Sample

4. 삭제

> db.blog.remove({title : "My Study Post"})> db.blog.find()

> db.blog.findOne()

14년 1월 8일 수요일

Page 71: NoSQL Guide &  Sample

NoSQL DataBase 선택 논의

14년 1월 8일 수요일