NoSQL Guide & Sample

1,406 views

Published on

NoSQL MongoDB install and sample

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,406
On SlideShare
0
From Embeds
0
Number of Embeds
45
Actions
Shares
0
Downloads
87
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

NoSQL Guide & Sample

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

×