R과 MongoDB 연동 (Connecting R to MongoDB)

To help people who do not know Korean, I put short notes in English here and there.


이번 주부터 서울대에서 R 특강을 하고 있습니다. 학생분들의 열의도 대단하여 저도 가르칠 맛이 나네요! 쏴쏴!

수업 중에 R이 빅데이터를 다룰 때 적합하다고 소개하며 {rmongodb} 패키지를 추천했습니다.

MongoDB

MongoDB는 웹 프로그램을 위해 탄생했습니다. 읽고 쓰는 작업을 효율적으로 하고 확장도 좋게 하려고 말입니다. 데이터 정규화 등은 깨끗이 무시하고 서비스되는 방식대로 데이터를 넣고 빼는 방식을 취합니다. 관계형 데이터베이스에서 흔히 사용되던 SQL을 쓰지 않고 쿼리를 보내 흔히 NoSQL을 따른다고 합니다.

직관적이며 확장성이 높은 데이터베이스 스키마를 설계할 수 있어서 최근 아주 주목받는 데이터베이스 기술입니다. 또한 Map-Reduce라는 기술을 사용해서 대용량 데이터를 효율적으로 다룰 수도 있습니다.

많은 컴퓨터들을 네트워크로 묶거나 클라우드 서비스를 적극 활용해서 CPU와 저장공간의 한계를 손쉽게 뛰어넘습니다. 샤딩(Sharding)이라 불리는 분산 데이터베이스 기술을 사용하여 사용자가 편리하게 이런 작업들을 처리합니다.

2007년 10gen이라는 회사가 웹앱의 백엔드 기술로 개발했던 MongoDB는 2009년에 들어 첫 release를 시작했고 이제 2.0대 이상의 버전으로 발전했습니다.

하둡과 MongoDB를 흔히 비교하거나 같이 쓰기도 합니다만, 연구 목적으로 생각할 때 MongoDB만 있어도 충분합니다.

MongoDB 기초

MongoDB를 설치하려면: www.mongodb.org
뒷 숫자가 .2로 끝나는 것이 stable 버전입니다. Windows 사용자는 .msi 설치판을 찾아 설치하시면 됩니다. 설치가 어렵지는 않습니다. 받을 파일 실행시키고 적당한 경로에 풀어주면 됩니다.

이제 path를 설정해서 MongoDB의 bin폴더를 시스템이 찾도록 해주고, C: 드라이브에 C:\data\db 폴더를 만듭니다. MongoBD는 기본적으로 이 폴더에 데이터를 읽고 씁니다. 물론 configuration file을 만들어서 다른 설정값을 넣을 수도 있습니다(다른 포스트에서 이를 설명합지요).

설치가 끝났다면 mongod.exe를 실행해서 서버를 돌립니다.

서버가 잘 돌아가면 다른 커맨드 콘솔을 열어 mongo를 실행시킵니다. 이제 데이터베이스를실행한 화면을 볼 수 있습니다.

{rmongodb}

 R과 MongoDB 간의 데이터 교환은 BSON 형식을 따릅니다. JSON의 Binary 형태(010101010111 이런 이진값)라고 생각하시면 됩니다. R의 {rmongodb} 패키지를 설치하기 위해 R의 콘솔에서

Data transfer between R and MongoDB uses BSON which is a binary format of JSON (like, 010101010111...).

To use MongoDB in R, you should install {rmongodb} first.

> install.packages("rmongodb")

설치가 끝났다면
If you done, let's set up connection parameters.

> db <- 'test'
> collection <- 'mycol'
> namespace <- paste(db,collection,sep='.')

이렇게 collection과 namespace를 지정하고


Definitely, we assume that the MongoDB is running in a local computer. Check if mongod is running!

Linking up with MongoDB is so so easy.
> mcon <- mongo.create(host='127.0.0.1',db=db)

MongoDB를 열었습니다. 닫는 것은

To close the connection, run the following code.
> mongo.disconnect(mcon)

JSON을 BSON으로 변환하여 저장하기

R에서 인터넷으로 JSON 형식을 받아 character 오브젝트로 가진다고 생각해 보십시오. 예를 들어 project라는 character객체가 있다고 하고 이것이 JSON 형식을 따른다고 합시다.

Let's assume that we have data in JSON text (e.g., "project" as a character object)
> bson <- mongo.bson.from.JSON(project)
> mongo.insert(mcon,namespace,bson)

The above code inserts project data into the MongoDB.
이렇게 하여 데이터를 간단히 넣을 수 있습니다.

MongoVUE 사용하기

Simply, use MongoVUE to save your time for extracting data. It is free!

데이터를 다루려면 쿼리를 만들어 원하는 것을 뽑아야 합니다. 콘솔을 사용할 수도 있지만 여러 불편함이 있습니다. 이때 MongoVUE를 받아 설치하면 좋습니다.

MongoVUE

개인 사용자는 샤딩할 수 있는 크기가 제한되어 있습니다만 연구목적이니 별 문제 없습니다.



 TreeView와 TableView 사이를 손쉽게 바꾸어 볼 수 있고, 결과물을 CSV나 TSV 형식으로 바꾸기도 좋습니다.

왜 R에 MongoDB?

 몇 가지 이유가 있지만 가장  중요한 이유는 R에서 JSON을 다룰 때 소스코드가 복잡해지는 것을 막고, 데이터를 다루는 속도와 크기를 증가시키기 위해 MySQL과 같은 RDB 대신에 NoSQL을 지원하는 MongoDB를 선호합니다. 또한 Schema가 복잡할 때 document - collection 모델로 된 데이터셋이 정규화되어 있는 것에 비해 훨씬 더 유리하기 때문이기도 합니다.


댓글

이 블로그의 인기 게시물

Bradley-Terry Model: paired comparison models

R에서 csv 파일 읽는 법

xlwings tutorial - 데이터 계산하여 붙여 넣기