using r with mongodb(r user conference korea 2015, sk c&c 김인범)

61
Using R with MongoDB R User Conference Korea 2015 김 인 범 SK C&C

Upload: inbum-kim

Post on 08-Aug-2015

666 views

Category:

Data & Analytics


7 download

TRANSCRIPT

Using R with MongoDB R User Conference Korea 2015

김 인 범 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을 사용할 수 있다면,

여러분은 든든한 리베로를 얻을 수 있을 것입니다.

맺음말

그리고 그 리베로는 여러분을 좀 더

높은 단계로 이끌어 줄 것 입니다.

맺음말

감사합니다! [email protected] Special Thanks to Mr. Selivanov