R User Conference Korea 2015 Using R with MongoDB 김인범 SK C&C
Tables 1. MongoDB? 2. Rmong & RMOngodb 3. Why R + MongoDB 4.Tips for R + MongoDB
I am... 김인범 (SK C&C) Cloud Computing Infra Service Team 1 MongoDB Korea, R Korea
Table 1. MongoDB...?
MongoDB 첫질문? Mongol 사람들이만들었나요? MongoDB 만든곳의대주주가 Mongol 사람...? 알고보니 MongoDB 만든사람이 Mongol 후손...?
What is MongoDB? humongous = 거대한 humongousdb
What is MongoDB? Document Oriented Database Replication / Sharding Multiple Transaction(CRUD) Map-Reduce also possible Latest Stable Version is 3.0.3(May 2015, bug hunting)
Question?
Answer!
Growing Up!
MongoDB 구조간단 review -1 Mongo 샤딩은 Data collection 에대해 unlimited size 를제공 (big data 를다루는데있어매우중요 )
MongoDB 구조간단 review - 2 mongod - 데이터를저장, 관리하는서버 ( 복제정책적용가능 ) mongos - client 의요청받아환경설정서버의 partitioning 정보를참고해적절한데이터서버로요청을포워딩 Config Server - sharding 에대한환경설정서버 - partitioning 에대한정보를관리
MongoDB Benefit Elements of MongoDB fit for Cloud Environment Open Source Easy Scalability(Scale out), Easy Install, Easy Use Scheme-less High Availability
MongoDB use ( 해외 ) facebook, google, twitter MetLife, foursquare, NewYork Times, Forbes 이외에도 http://www.mongodb.com/who-uses-mongodb
해외사례요약하자면...
MongoDB use ( 국내 ) FIFA Online 2 DaumKakao My Agora LG U+ 그룹웨어, 패턴분석처리시스템 인터파크, 상품검색및채팅서비스시스템
MongoDB use ( 국내 )
시간이없어서나머지는다음기회에
직접해보시려면...
직접해보시려면 MongoDB Download link
귀찮으시죠..?
귀찮으시죠..? MongoDB Shell link http://try.mongodb.org/?_ga=1.232175391.1478816937.1399257850
귀찮으시죠..?
귀찮으시죠..?
이런ㅆ...
직접공부해보려면...
공부해보려면 MongoDB education link https://university.mongodb.com/
공부할수있는것들... MongoDB education link https://university.mongodb.com/
공부하다얻을수있는것...?
MongoDB 이럴때쓰지마세요! 고객이 Oracle이랑비교할때 (RDBMS와는태생이다름 ) 무료라는이야기듣고고객이들이댈때 재정적으로여유가있을때 License에대한이해가불충분한경우
고객이말합니다 (feat. 불특정다수의갑님 ) 오픈소스인데추가비용이왜필요하죠? 라이선스...? 뭐래.. 아니왜오라클보다성능이안나오는것같죠? 오라클은어쩌구, MySQL은저쩌구, 나는왕년에 #$1!@$#$..
MongoDB 이럴때쓰세요! 유연함과확장이필요할때 log data, SNS data 등을적재할때 다양한 open source와연계할때 (ex. Hadoop) 서비스구성시다양한시도가필요할때 고객이 open source에대한이해가충분할때
Table 2. Rmongo & rmongodb
Rmongo Package MongoDB interface for R 인터페이스는 mongo-java-driver로의 java call을통해제공됨. 0.0.25, GPL-3 R( >= 2.14.1), Java( >= 1.6), MongoDB( >= 1.6)
Rmongo : Advantage Rmongo 는매우직관적인스타일의패키지 그렇기때문에이해하기쉽고, 사용하기쉬움 ( 상대적으로 )
Rmongo : Dis-advantage 성능상의아쉬움 인터페이스가 mongo-java-driver 이기때문에 java 에대한두려움이있는이들에게는장벽으로다가올수있음 ( 단순사용이아닌패키지구조확인및 customizing 에있어서..)
rmongodb Package MongoDB interface for R 인터페이스는 mongo-c-driver(ver 0.8) 를이용하여제공됨 1.8.0, Apache License R( >= 2.10), MongoDB, GNU Make
rmongodb : Advantage MongoDB 의대부분의기능을반영함 (Rmongo 와대조됨 ) Good Performance
rmongodb Dis-Advantage MongoDB 3.0 이상에서부터는인증이슈존재 패키지유지문제와신규기능에대한릴리즈의어려움 Mongo-C-Driver 1.0+ 은완전히다른 API 가짐 즉 0.8 에서 1.0 으로업그레이드하려면거의처음부터모든패키지를다시써야함
RMongo workflow mongo <- mongodbconnect("test", "localhost", 27017) output <- dbinsertdocument(mongo, "test_data", '{"foo": "bar"}') output <- dbgetquery(mongo, "test_data", '{"foo": "bar"}') dbdisconnect(mongo)
rmongodb workflow mongo <- mongo.create(host="localhost,db= test ) mongo.get.databases(mongo) ns= test.test_data buf=mongo.bson.buffer.create() Mongo.bson.buffer.append(buf, foo, bar ) a=mongo.bson.from.buffer(buf) Mongo.insert(mongo,ns,a) mongo.find.all(mongo,ns) (or mongo.find.one(mongo, test.test_data, a) ) mongo.disconnect (mongo)
Table 3. Why R + MongoDB
R + MongoDB 의매력 (1) 꾸준히발전하는 OpenSource (release 주기가안정적 ) 명확한역할구분 (r visualization, mongodb backend 저장소 )
R + MongoDB 의매력 (2) 대규모의데이터를다루는 R 에게 NoSQL 은 매력적인선택 명확한역할구분 (r visualization, mongodb backend 저장소 )
R + MongoDB 의매력 (3) 이미많은 Relational SQL 패키지가존재. (RMySQL, RPostgreSQL, Roracle, RJDBC 등 ) 하지만이들의문제는모든결과를 R 메모리상에서 read 한다는것!
R + MongoDB 의매력 (4) Rmongo 역시같은문제, 하지만 rmongodb 는그러한문제에서자유로움 위와더불어 MongoDB 가 bulk insert 에서 탁월한성능을보임.
Table 4. Tips for R + MongoDB
Tips 1. mongodb 설치서버와 R 설치서버는구분하는것이좋다.
Tips 2. 예산의문제가있다면 config 서버에설치하는것도좋다.
Tips 3. CPU 는무조건 64bit~! 메모리는 Maximum 구성 ~!
Tips 4. 굳이 MongoDB 일필요는없다. 특징과목적에맞는구분이필요하다.
Tips 5. MongoDB 는 scheme 에서 free... 하지만!!! 특정주제에맞춰분석을하려면 스키마에대한정의와제한은필요하다.
Tips 6. MongoDB의 release에따른 R의 version 관리가필요함. deprecated 된함수들이종종발생할수있으며, 호환성문제도발생가능
Tips 7. MongoDB상에 concurrent하게데이터를 read/write 하고싶다면... mongodb.splitvector() 를써서 chunk 단위로 collection을분리하고각 chunk 상에 mclapply() 적용
맺음말 물론여전히분석에 focusing 을맞춰야하지만..
맺음말 MongoDB 를비롯한 NOSQL 등은 확장성과유연성을제공할수있는기반.
맺음말 축구는골을넣어야이기는경기지만, 수비가잘되면우승까지노릴수있습니다.
맺음말 NoSQL 활용을통해 R 을사용할수있다면, 여러분은든든한리베로를얻을수있을것입니다.
맺음말 그리고그리베로는여러분을좀더 높은단계로이끌어줄것입니다.
감사합니다! inbum85@gmail.com Special Thanks to Mr. Selivanov