4. 4 NoSQL is a movement promoting a loosely defined class of non-relational data stores that break with a long history of relational databases. These data stores may not require fixed table schemas, usually avoid join operations and typically scale horizontally. - WIKIPEDIA
5. NoSQL 주요 특징 schema-free replication 간단한 API no relation / no join eventually consistency (not ACID) scalable / distributed NoSQL의 종류 Document store MongoDB, CouchDB, Jackrabbit, Lotus Notes Key/Value store Amazon SimpleDB, MemcacheDB, … Column 기반 Hadoop/HBase, Cassandra, Hypertable, … Graph DB Neo4j, HyperGraphDB, … 5
6. 오늘의 주제: MongoDB 세미나의 목적 MongoDB의 주요 기능 & 활용 방안 소개 TOC Document DB와 MongoDB 왜 MongoDB? MongoDB 쓰임새 6
11. Document DB 문서 저장소 주요 특징 <key, value> 형식으로 문서 저장 대부분 JSON 형식 이용 No Join Schema Free No SQL 싼 장비, 대량 데이터, HA (replication), 분산 처리 주요 제품 MongoDB, CouchDB, Riak, ... 11
13. MongoDB humongous DB 현재 버전:1.4.0 특징 Document-oriented storage index 지원 geospacial 인덱스 지원, multikey 빠른 업데이트 (no row lock, no table block) Replication Sharding (alpha) MapReduce 바이너리 데이터에 대한 효과적인 저장 파일, 이미지 등 쉬운 설치, 압축만 풀면 땡! 언어별 드라이버 제공 공식 지원: C, C++, Java, Perl, PHP, Python, Ruby 커뮤니티 지원: C#/.NET, Erlang, Go, Groovy/Scala/Clojure 13
14. MongoDB 레퍼런스 피딩 시스템의 캐시 내부 리포팅 어플리케이션 프론트 페이지, 프로젝트의 백엔드 스토리지 댓글 시스템의 백엔드 스토리지 사이트 데이터, 포스트, 댓글, 이미지 스토리지 서버 모니터링 솔루션 실시간 로그 처리&분석 14
16. MongoDB의 구성요소 - Collection, Document Database Collection RDBMS의 Table과 유사 Document를 포함 Document RDBMS의 Row와 유사 Schema Free 문서마다 고유 키 값을 가짐 (“_id”) 지정하지 않을 경우 mongoDB가 자동 생성 16
17. 설치 및 실행 http://www.mongodb.org 에서 다운로드 서버 시작 기본DB경로: /data/db (c:atab), 포트: 27017 서버 중지 mongo 콘솔 접속후 shutdownServer() 실행 Ctrl+C, kill -2 PID, kill -15 PID kill -9 PID 사용시 데이터 깨질 수 있음 $ mongod $ mongod --dbpath /wemade/db --port 90912 $ mongod –fork –logpath /wemade/log/db/mongodb.log $ mongo > db.shutdownServer() 17
19. 드라이버를 이용한 접근 각 언어별로 제공되는 드라이버 이용 Mongo mongo = new Mongo("localhost", 27017); DB db = mongo.getDB("weblog"); DBCollection collection = db.getCollection("pageview_minute"); BasicDBObject q = new BasicDBObject(); SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmm"); q.put("hour", format.format(time)); q.put("site", site); BasicDBObject o = new BasicDBObject(); BasicDBObject incVal = new BasicDBObject(); incVal.put("pageviews", new Integer(1)); o.put("$inc", incVal); collection.update(q, o, true, true); 19
20. DB/콜렉션 생성/삭제 Lazy Creation 실제 데이터가 생성될 때 DB/콜렉션 생성됨 명시적인 DB/콜렉션 생성 없음 콜렉션 삭제 db.collName.drop() 20
21. 문서 관련 기본 API 문서 삽입 db.collName.save( {name: “mongo”} ); 문서 조회 db.collName.find() db.collName.find( {name: “mongo”} ) db.collName.find( {…}, {name: 1, ssn: 1} ) db.collName.find( … ).sort( {userid: 1} ) db.collName.find( {}, {}, 10, 20); db.collName.count() 문서 수정 db.collName.update( {userid: “madvirus”}, { lastupts: val}, false ); 문서 삭제 db.collName.remove( {} ) db.collName.remove( {userid: “madvirus”} ) 인덱스 생성 db.collectionName.ensureIndex( {userid: 1, regts: 1} ) 기타 group(), min(), max(), $in, $where (or 연산), 21
23. MongoDB가 끌린 이유 Replication Sharding MapReduce Atomic 값 증분 Capped Collection Geospacial Index 23
24. Master-Slave Replication 서버 간 Replication 지원 High Availability (Failover) Read Throughput 증대 구성 Replica Pair Master 24
25. Sharding 하나의 개념적 문서 집합을 다수의 물리적 저장소에 분할해서 보관 MongoDB는 인덱스 범위를 이용해서 보관 Shard Shard Shard Shard Chunk Chunk Chunk Chunk mongos config server Client 25
26. MapReduce 지원 MapReduce Google이 창안 대량의 데이터 집합을 많은 컴퓨터로 병렬 처리 2단계 처리 Map단계 /Reduce 단계 응용 데이터 클러스터링 연산 Collective Intelligence 웹 로그 통계 생성 데이터 추출/필터링 상상하는 만큼 … 26
27. MapReduce 동작 방식 27 발췌: http://www.slideshare.net/spirosd/mapreduce-distributed-computing-on-large-commodity-clusters
29. MapReduce + Sharding 각 Shard를 통해 데이터 처리 및 수집 클러스터를 이용한 대량 데이터 처리 Shard 별 분산∙병렬 처리를 통한 처리 시간 단축/처리량 증가 대량 데이터 분석/생성에 적합 Shard MapReduce 실행 각 Shard에 MapReduce 실행 요청 Shard MapReduce 실행 요청 MapReduce 실행 mongos Client Shard 각 Shard의 Reduce 결과 MapReduce 실행 각 Shard의 Reduce 결과의 Reduce 결과 Shard MapReduce 실행 29
30. Atomic 값 증분 upsert와 $inc를 이용한 Atomic 값 증분 실시간 통계 데이터 생성에 적합 시간 당 접속자, 10분당 PV, 분당 회원 가입 수 c.update( { hour : "20100415100001”, site : "abc" }, { $inc : { pageviews: 1} }, { upsert : true } ) c.update( { hour : "20100415100001”, site : "abc" }, { $inc : { pageviews: 1} }, { upsert : true } ) c.update( { hour : "20100415100001”, site : "abc" }, { $inc : { pageviews: 1} }, { upsert : true } ) c.update( { hour : "20100415100002”, site : "abc" }, { $inc : { pageviews: 1} }, { upsert : true } ) 데이터 삽입 {hour: “2010041510001”, site: “abc”, pageviews: 1 } pageviews 값 증가 {hour: “2010041510001”, site: “abc”, pageviews: 2 } pageviews 값 증가 {hour: “2010041510001”, site: “abc”, pageviews: 3 } 데이터 삽입 {hour: “2010041510002”, site: “abc”, pageviews: 1 } 30
31. Capped Collection 개수 제한을 갖는 콜렉션 생성 db.createCollection(“mycoll”, {capped: true, size: 1000, max: 100}) 동작 방식 지정된 개수만큼 차면, 새 문서를 추가 시 가장 오래된 문서 삭제 삽입 순서로 인덱스 자동 생성 제약 기존 문서 수정시, 기존 문서보다 클 경우 수정 실패 문서 삭제 불가 32bit 머신에서 10억 바이트 (약 950M) 크기 제한 64bit 머신은 시스템 자원만큼 활용 캐시 LRU 캐시와 유사한 효과 로깅 인덱스 없는 경우 파일시스템에 근접한 쓰기 속도 31
35. MongoDB의 쓰임새 적합한 용도 웹 App 백엔드 스토리지 세션 데이터 회원 프로필, 이벤트, 댓글, 설문조사 등 실시간 분석 Atomic Inc을 이용한 실시간 통계 (실시간 분당/시간당 PV) 대용량 로그 처리 & 분석 Sharding & MapReduce 기반 대용량 로그 분석/데이터 처리 캐시 <key, value>, Schema Free 특징으로 캐시 구현 적합 Capped Collection 좌표 기반 데이터 처리 알맞지 않은 용도 트랜잭션이 중요한 시스템 예, 금융권 시스템, 빌링 시스템, 회원 테이블 35
36. 맺으며… NoSQL DB에 대한 관심 필요 Document 중심 사고 No Relation, No Join, No SQL, Schema Free MapReduce 이해 병렬 처리, no group by RDBMS와 Document DB의 알맞은 사용 36
37. 참고자료 MapReduce Wikipedia:http://en.wikipedia.org/wiki/MapReduce MapReduce:distributed computing on large commodity clusters:http://www.slideshare.net/spirosd/mapreduce-distributed-computing-on-large-commodity-clusters NoSQL NoSQL 정의 : http://en.wikipedia.org/wiki/NoSQL MongoDB 관련 문서 MongoDB 매뉴얼: http://www.mongodb.org/display/DOCS/Developer+Zone Fast Updates with MongoDB:http://blog.mongodb.org/post/248614779/fast-updates-with-mongodb-update-in-place MongoDB is Fatastic for Logging: http://blog.mongodb.org/post/172254834/mongodb-is-fantastic-for-logging Using MongoDB for Real-time Analytics: http://blog.mongodb.org/post/171353301/using-mongodb-for-real-time-analytics 37