SlideShare a Scribd company logo
1 of 38
MongoDB 소개 최 범 균 (madvirus@madvirus.net)
2 공통점?
3 NoSQL
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
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
오늘의 주제: MongoDB 세미나의 목적 MongoDB의 주요 기능 & 활용 방안 소개 TOC Document DB와 MongoDB 왜 MongoDB? MongoDB 쓰임새 6
Document DB & MongoDB 7
Document 8
Document: Self-Contained 9
Document: Schema Free 10
Document DB 문서 저장소 주요 특징 <key, value> 형식으로 문서 저장 대부분 JSON 형식 이용 No Join Schema Free No SQL 싼 장비, 대량 데이터, HA (replication), 분산 처리 주요 제품 MongoDB, CouchDB, Riak, ... 11
Document 예시 {     ts : “20100415110001.001”,     user : {         nickname: “madvirus”,         id: 12345     },     site : {         domain: “cc2.wemade.com”,         uri: “/main/main”     } } {     ts : “20100415110001.005”,     user : {         nickname: “wemade”,         id: 1     },     site : {         domain: “cc2.wemade.com”,         uri: “/main/main”     },     referer: {         domain: “www.wemade.com”,         uri: “/main/main”     } } 12
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
MongoDB 레퍼런스 피딩 시스템의 캐시 내부 리포팅 어플리케이션 프론트 페이지, 프로젝트의 백엔드 스토리지 댓글 시스템의 백엔드 스토리지 사이트 데이터, 포스트, 댓글,  이미지 스토리지 서버 모니터링 솔루션 실시간 로그 처리&분석 14
mongoDB 사용 15
MongoDB의 구성요소 - Collection, Document Database Collection RDBMS의 Table과 유사 Document를 포함 Document RDBMS의 Row와 유사 Schema Free 문서마다 고유 키 값을 가짐 (“_id”) 지정하지 않을 경우 mongoDB가 자동 생성 16
설치 및 실행 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
콘솔을 이용한 접근 bin/mongo 콘솔 프로그램 이용 자바스크립트 코드를 이용 $ mongo > use weblog switched to db weblog > db.pageview_minute.find(); { "_id" : ObjectId("4bbc35128319000000001984"), "hour" : "201004071632", "pageviews" : 4000, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc355d8319000000001985"), "hour" : "201004071633", "pageviews" : 601, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc35688319000000001986"), "hour" : "201004071634", "pageviews" : 3194, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc35a48319000000001987"), "hour" : "201004071635", "pageviews" : 3210, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc35e08319000000001988"), "hour" : "201004071636", "pageviews" : 2142, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc361c8319000000001989"), "hour" : "201004071637", "pageviews" : 853, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc3740831900000000198a"), "hour" : "201004071641", "pageviews" : 1026, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc3748831900000000198b"), "hour" : "201004071642", "pageviews" : 7979, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc3784831900000000198c"), "hour" : "201004071643", "pageviews" : 995, "site" : "funpc.wemade.com" } > 18
드라이버를 이용한 접근 각 언어별로 제공되는 드라이버 이용 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
DB/콜렉션 생성/삭제 Lazy Creation 실제 데이터가 생성될 때 DB/콜렉션 생성됨 명시적인 DB/콜렉션 생성 없음 콜렉션 삭제 db.collName.drop() 20
문서 관련 기본 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
왜 끌렸나? 22
MongoDB가 끌린 이유 Replication Sharding MapReduce Atomic 값 증분 Capped Collection Geospacial Index 23
Master-Slave Replication 서버 간 Replication 지원 High Availability (Failover) Read Throughput 증대 구성 Replica Pair Master 24
Sharding 하나의 개념적 문서 집합을 다수의 물리적 저장소에 분할해서 보관 MongoDB는 인덱스 범위를 이용해서 보관 Shard Shard Shard Shard Chunk Chunk Chunk Chunk mongos config server Client 25
MapReduce 지원 MapReduce Google이 창안  대량의 데이터 집합을 많은 컴퓨터로 병렬 처리 2단계 처리 Map단계 /Reduce 단계 응용 데이터 클러스터링 연산 Collective Intelligence 웹 로그 통계 생성 데이터 추출/필터링 상상하는 만큼 … 26
MapReduce 동작 방식 27 발췌: http://www.slideshare.net/spirosd/mapreduce-distributed-computing-on-large-commodity-clusters
MapReduce 예 태그 개수 구하기 {tags: [‘dog’, ‘cat’] } {tags: [‘cat’] } {tags: [‘mouse’, ‘cat’, ‘dog’] } {tags: [] } map = function() {     this.tags.forEach(         function(tag) {             emit( tag, 1 );         }     ); }; {‘dog’: [1, 1] } {‘cat’: [1, 1, 1] } {‘mouse’: [1] } reduce = function( key , values ){     var total = 0;     for ( var i=0; i < values.length ; i++ ) {         total += values[i];     }     return total; }; { "_id" : "cat", "value" : 3 } { "_id" : "dog", "value" : 2 } { "_id" : "mouse", "value" : 1 } 28
MapReduce + Sharding 각 Shard를 통해 데이터 처리 및 수집  클러스터를 이용한 대량 데이터 처리 Shard 별 분산∙병렬 처리를 통한 처리 시간 단축/처리량 증가 대량 데이터 분석/생성에 적합 Shard MapReduce 실행 각 Shard에 MapReduce  실행 요청 Shard MapReduce  실행 요청 MapReduce 실행 mongos Client Shard 각 Shard의 Reduce 결과 MapReduce 실행 각 Shard의 Reduce 결과의 Reduce 결과 Shard MapReduce 실행 29
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
Capped Collection 개수 제한을 갖는 콜렉션 생성 db.createCollection(“mycoll”,     {capped: true, size: 1000, max: 100}) 동작 방식 지정된 개수만큼 차면, 새 문서를 추가 시 가장 오래된 문서 삭제 삽입 순서로 인덱스 자동 생성 제약 기존 문서 수정시, 기존 문서보다 클 경우 수정 실패 문서 삭제 불가 32bit 머신에서 10억 바이트 (약 950M) 크기 제한 64bit 머신은 시스템 자원만큼 활용 캐시 LRU 캐시와 유사한 효과 로깅 인덱스 없는 경우 파일시스템에 근접한 쓰기 속도 31
Geospacial Index 2D 기반의 인덱스 32
Geospacial Index 좌표를 이용한 인덱스 생성 db.position.ensureIndex( {loc: “2d”}, {min: -500, max: 500} ) { loc: [30, 30] }, {loc: {x: 50, y: 30} } 쿼리 근처에 있는 것 검색 (거리 기준) db.place.find( {loc : {$near: {x:50, y:30} } } ) db.place.find( {loc : {$near: {x:50, y:30} } } ).limit(3) 영역 안에 포함된 것 검색 db.place.find( {loc: {$within : {$box: [[0,0],[10,10]] } } } ); db.place.find( {loc: {$within : {$center: [ [50, 50], 20 ] } } } ); 복합 인덱스 근처에 있는 자원 검색 db.place.ensureIndex( {loc: “2d”, cat: 1} ) db.place.find( {loc: {$near: [10,10] }, cat: “bank” }  ).limit(10) 응용 위치(맵) 기반 연산 (웹 게임 등에서 활용) 데이터 클러스터링에서의 활용 33
정리 34
MongoDB의 쓰임새 적합한 용도 웹 App 백엔드 스토리지 세션 데이터 회원 프로필, 이벤트, 댓글, 설문조사 등 실시간 분석 Atomic Inc을 이용한 실시간 통계 (실시간 분당/시간당 PV) 대용량 로그 처리 & 분석 Sharding & MapReduce 기반 대용량 로그 분석/데이터 처리 캐시 <key, value>, Schema Free 특징으로 캐시 구현 적합 Capped Collection 좌표 기반 데이터 처리 알맞지 않은 용도 트랜잭션이 중요한 시스템 예, 금융권 시스템, 빌링 시스템, 회원 테이블 35
맺으며… NoSQL DB에 대한 관심 필요 Document 중심 사고 No Relation, No Join, No SQL, Schema Free MapReduce 이해 병렬 처리, no group by RDBMS와 Document DB의 알맞은 사용 36
참고자료 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
Q&A 38

More Related Content

What's hot

MongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineMongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineJason Terpko
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
Introduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerIntroduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerMydbops
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101DaeMyung Kang
 
Mongodb basics and architecture
Mongodb basics and architectureMongodb basics and architecture
Mongodb basics and architectureBishal Khanal
 
Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기JangHyuk You
 
Deep Dive Into Elasticsearch
Deep Dive Into ElasticsearchDeep Dive Into Elasticsearch
Deep Dive Into ElasticsearchKnoldus Inc.
 
High Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal CloudHigh Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal CloudMongoDB
 
Webinar: When to Use MongoDB
Webinar: When to Use MongoDBWebinar: When to Use MongoDB
Webinar: When to Use MongoDBMongoDB
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기Jongwon Kim
 
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?Juhong Park
 
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Seongyun Byeon
 
Redis trouble shooting
Redis trouble shootingRedis trouble shooting
Redis trouble shootingDaeMyung Kang
 
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱PgDay.Seoul
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리YoungHeon (Roy) Kim
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법Jeongsang Baek
 

What's hot (20)

MongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineMongoDB - Aggregation Pipeline
MongoDB - Aggregation Pipeline
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
Introduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerIntroduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizer
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
 
Mongodb basics and architecture
Mongodb basics and architectureMongodb basics and architecture
Mongodb basics and architecture
 
Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기
 
Deep Dive Into Elasticsearch
Deep Dive Into ElasticsearchDeep Dive Into Elasticsearch
Deep Dive Into Elasticsearch
 
High Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal CloudHigh Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal Cloud
 
Webinar: When to Use MongoDB
Webinar: When to Use MongoDBWebinar: When to Use MongoDB
Webinar: When to Use MongoDB
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
 
Hadoop발표자료
Hadoop발표자료Hadoop발표자료
Hadoop발표자료
 
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
[KAIST 채용설명회] 데이터 엔지니어는 무슨 일을 하나요?
 
MongoDB Sharding Fundamentals
MongoDB Sharding Fundamentals MongoDB Sharding Fundamentals
MongoDB Sharding Fundamentals
 
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라Little Big Data #1. 바닥부터 시작하는 데이터 인프라
Little Big Data #1. 바닥부터 시작하는 데이터 인프라
 
MongoDB 101
MongoDB 101MongoDB 101
MongoDB 101
 
Redis trouble shooting
Redis trouble shootingRedis trouble shooting
Redis trouble shooting
 
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 

Similar to Mongo db 최범균

Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...Chanjin Park
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처Sunggon Song
 
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Elasticsearch
 
Webrtc 허영남 20150528
Webrtc 허영남 20150528Webrtc 허영남 20150528
Webrtc 허영남 20150528영남 허
 
//BUILD/ Seoul - .NET의 현재와 미래. 그 새로운 시작
//BUILD/ Seoul - .NET의 현재와 미래. 그 새로운 시작//BUILD/ Seoul - .NET의 현재와 미래. 그 새로운 시작
//BUILD/ Seoul - .NET의 현재와 미래. 그 새로운 시작Taeyoung Kim
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Gruter
 
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XpressEngine
 
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개beom kyun choi
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나JeongHun Byeon
 
overview of spring4
overview of spring4overview of spring4
overview of spring4Arawn Park
 
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기sung ki choi
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaHyeonSeok Choi
 
MongoDB 도입을 위한 제언
MongoDB 도입을 위한 제언MongoDB 도입을 위한 제언
MongoDB 도입을 위한 제언DongHan Kim
 
MongoDB 도입을 위한 제언 @krmug
MongoDB 도입을 위한 제언 @krmug MongoDB 도입을 위한 제언 @krmug
MongoDB 도입을 위한 제언 @krmug Ha-Yang(White) Moon
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)Sang Don Kim
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
DataWorks Summit 2017
DataWorks Summit 2017DataWorks Summit 2017
DataWorks Summit 2017Daesung Park
 
웹개발자가 알아야할 기술
웹개발자가 알아야할 기술웹개발자가 알아야할 기술
웹개발자가 알아야할 기술jaypi Ko
 

Similar to Mongo db 최범균 (20)

Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처
 
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
 
Webrtc 허영남 20150528
Webrtc 허영남 20150528Webrtc 허영남 20150528
Webrtc 허영남 20150528
 
//BUILD/ Seoul - .NET의 현재와 미래. 그 새로운 시작
//BUILD/ Seoul - .NET의 현재와 미래. 그 새로운 시작//BUILD/ Seoul - .NET의 현재와 미래. 그 새로운 시작
//BUILD/ Seoul - .NET의 현재와 미래. 그 새로운 시작
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)
 
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
 
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나
 
overview of spring4
overview of spring4overview of spring4
overview of spring4
 
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
[아꿈사/111105] html5 9장 클라이언트측 데이터로 작업하기
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, Kibana
 
MongoDB 도입을 위한 제언
MongoDB 도입을 위한 제언MongoDB 도입을 위한 제언
MongoDB 도입을 위한 제언
 
MongoDB 도입을 위한 제언 @krmug
MongoDB 도입을 위한 제언 @krmug MongoDB 도입을 위한 제언 @krmug
MongoDB 도입을 위한 제언 @krmug
 
Meteor IoT
Meteor IoTMeteor IoT
Meteor IoT
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
DataWorks Summit 2017
DataWorks Summit 2017DataWorks Summit 2017
DataWorks Summit 2017
 
웹개발자가 알아야할 기술
웹개발자가 알아야할 기술웹개발자가 알아야할 기술
웹개발자가 알아야할 기술
 

More from beom kyun choi

DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기beom kyun choi
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나beom kyun choi
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)beom kyun choi
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀beom kyun choi
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugbeom kyun choi
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초beom kyun choi
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128beom kyun choi
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유beom kyun choi
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰beom kyun choi
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료beom kyun choi
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개beom kyun choi
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해beom kyun choi
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개beom kyun choi
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기beom kyun choi
 

More from beom kyun choi (20)

DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
 
DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
 
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기
 

Mongo db 최범균

  • 1. MongoDB 소개 최 범 균 (madvirus@madvirus.net)
  • 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
  • 7. Document DB & MongoDB 7
  • 11. Document DB 문서 저장소 주요 특징 <key, value> 형식으로 문서 저장 대부분 JSON 형식 이용 No Join Schema Free No SQL 싼 장비, 대량 데이터, HA (replication), 분산 처리 주요 제품 MongoDB, CouchDB, Riak, ... 11
  • 12. Document 예시 { ts : “20100415110001.001”, user : { nickname: “madvirus”, id: 12345 }, site : { domain: “cc2.wemade.com”, uri: “/main/main” } } { ts : “20100415110001.005”, user : { nickname: “wemade”, id: 1 }, site : { domain: “cc2.wemade.com”, uri: “/main/main” }, referer: { domain: “www.wemade.com”, uri: “/main/main” } } 12
  • 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
  • 18. 콘솔을 이용한 접근 bin/mongo 콘솔 프로그램 이용 자바스크립트 코드를 이용 $ mongo > use weblog switched to db weblog > db.pageview_minute.find(); { "_id" : ObjectId("4bbc35128319000000001984"), "hour" : "201004071632", "pageviews" : 4000, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc355d8319000000001985"), "hour" : "201004071633", "pageviews" : 601, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc35688319000000001986"), "hour" : "201004071634", "pageviews" : 3194, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc35a48319000000001987"), "hour" : "201004071635", "pageviews" : 3210, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc35e08319000000001988"), "hour" : "201004071636", "pageviews" : 2142, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc361c8319000000001989"), "hour" : "201004071637", "pageviews" : 853, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc3740831900000000198a"), "hour" : "201004071641", "pageviews" : 1026, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc3748831900000000198b"), "hour" : "201004071642", "pageviews" : 7979, "site" : "funpc.wemade.com" } { "_id" : ObjectId("4bbc3784831900000000198c"), "hour" : "201004071643", "pageviews" : 995, "site" : "funpc.wemade.com" } > 18
  • 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
  • 28. MapReduce 예 태그 개수 구하기 {tags: [‘dog’, ‘cat’] } {tags: [‘cat’] } {tags: [‘mouse’, ‘cat’, ‘dog’] } {tags: [] } map = function() { this.tags.forEach( function(tag) { emit( tag, 1 ); } ); }; {‘dog’: [1, 1] } {‘cat’: [1, 1, 1] } {‘mouse’: [1] } reduce = function( key , values ){ var total = 0; for ( var i=0; i < values.length ; i++ ) { total += values[i]; } return total; }; { "_id" : "cat", "value" : 3 } { "_id" : "dog", "value" : 2 } { "_id" : "mouse", "value" : 1 } 28
  • 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
  • 32. Geospacial Index 2D 기반의 인덱스 32
  • 33. Geospacial Index 좌표를 이용한 인덱스 생성 db.position.ensureIndex( {loc: “2d”}, {min: -500, max: 500} ) { loc: [30, 30] }, {loc: {x: 50, y: 30} } 쿼리 근처에 있는 것 검색 (거리 기준) db.place.find( {loc : {$near: {x:50, y:30} } } ) db.place.find( {loc : {$near: {x:50, y:30} } } ).limit(3) 영역 안에 포함된 것 검색 db.place.find( {loc: {$within : {$box: [[0,0],[10,10]] } } } ); db.place.find( {loc: {$within : {$center: [ [50, 50], 20 ] } } } ); 복합 인덱스 근처에 있는 자원 검색 db.place.ensureIndex( {loc: “2d”, cat: 1} ) db.place.find( {loc: {$near: [10,10] }, cat: “bank” } ).limit(10) 응용 위치(맵) 기반 연산 (웹 게임 등에서 활용) 데이터 클러스터링에서의 활용 33
  • 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