4. 4NoSQL 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 maynot require fixed table schemas, usually avoid join operations and typically scale horizontally.- WIKIPEDIA
11. Document DB문서 저장소주요 특징<key, value> 형식으로 문서 저장대부분 JSON 형식 이용No JoinSchema FreeNo SQL싼 장비, 대량 데이터, HA (replication), 분산 처리주요 제품MongoDB, CouchDB, Riak, ...11
16. MongoDB의 구성요소 - Collection, DocumentDatabaseCollectionRDBMS의 Table과 유사Document를 포함DocumentRDBMS의 Row와 유사Schema Free문서마다 고유 키 값을 가짐 (“_id”)지정하지 않을 경우 mongoDB가 자동 생성16
17. 설치 및 실행http://www.mongodb.org 에서 다운로드서버 시작기본DB경로: /data/db (c:\data\db), 포트: 27017서버 중지mongo 콘솔 접속후 shutdownServer() 실행Ctrl+C, kill -2 PID, kill -15 PIDkill -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
25. Sharding하나의 개념적 문서 집합을 다수의 물리적 저장소에 분할해서 보관MongoDB는 인덱스 범위를 이용해서 보관ShardShardShardShardChunkChunkChunkChunkmongosconfig serverClient25
26. MapReduce 지원MapReduceGoogle이 창안 대량의 데이터 집합을 많은 컴퓨터로 병렬 처리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 별 분산∙병렬 처리를 통한 처리 시간 단축/처리량 증가대량 데이터 분석/생성에 적합ShardMapReduce 실행각 Shard에MapReduce 실행 요청ShardMapReduce 실행 요청MapReduce 실행mongosClientShard각 Shard의Reduce 결과MapReduce 실행각 Shard의Reduce 결과의Reduce 결과ShardMapReduce 실행29
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 FreeMapReduce 이해병렬 처리, no group byRDBMS와 Document DB의 알맞은 사용36
37. 참고자료MapReduceWikipedia:http://en.wikipedia.org/wiki/MapReduceMapReduce:distributed computing on large commodity clusters:http://www.slideshare.net/spirosd/mapreduce-distributed-computing-on-large-commodity-clustersNoSQLNoSQL 정의 : http://en.wikipedia.org/wiki/NoSQLMongoDB 관련 문서MongoDB 매뉴얼: http://www.mongodb.org/display/DOCS/Developer+ZoneFast Updates with MongoDB:http://blog.mongodb.org/post/248614779/fast-updates-with-mongodb-update-in-placeMongoDB is Fatastic for Logging: http://blog.mongodb.org/post/172254834/mongodb-is-fantastic-for-loggingUsing MongoDB for Real-time Analytics:http://blog.mongodb.org/post/171353301/using-mongodb-for-real-time-analytics37