1. Sharding을 위한 Shard key 생성
Sharding을 위해서는 Shard Key를 생성해야 하며, 생성된 Shard Key에는 반드시 인덱스의 생성이 요구됩니다.
$ mongo 192.168.3.2:27017/admin mongos> mongos> db.runCommand( {enablesharding : "test"} ) // test db 의 Shard 기능 활성화 mongos> mongos> use test mongos> db.things.ensureIndex( {empno : 1} ) // empno 항목에 대한 오름차순 색인 생성 mongos> mongos> use admin mongos> db.runCommand( {shardcollection : "test.things", key : {empno : 1}} )
2. 테스트 데이터 입력
mongos의 test db에 접속해서 50,000,000건의 pseudo 데이터를 입력하고, 입력된 데이터로부터 aggregate()을 해보겠습니다. 입력하고자 하는 pseudo 데이터는 회사의 고용자들에 대한 정보로서 사원번호, 소속 부서의 번호(0~100까지), 그리고 데이터가 입력된 시간 정보를 포함하고 있습니다. 소속 부서의 번호는 무작위Random 방법 으로 0부터 100까지의 숫자가 할당되며, 데이터가 입력된 후에는 소속 부서별로 몇 명의 인원 이 할당되어 있는지 Map-Reduce 방법을 통해서 계산하는 예제도 시현해 보려고 합니다. 현재의 시 스템 구성에서 데이터를 입력하는데 약 90분 정도 소요되며, 입력된 데이터의 크기는 약 20GB 물리적 공간을 차지합니다.
$ mongo 192.168.3.2:27017/test ← test db에 접속한다 mongos> mongos> for (var n=10000000; n<60000000; n++) { var deptno = Math.round(Math.random()*100); var added_at = new Date(); db.things.insert( {"empno": n, "deptno": deptno, "added_at": added_at} ) }
3. aggregate() 메써드를 통한 Map-Reduce
MongoDB 2.1.2 이상 버전에서는 내장되어 있는 mapReduce() 메써드 이외에도 aggregate() 메써드를 통해서도 Map-Reduce를 시행할 수 있습니다. 50,000,000건의 데이터에서 소속 부서별로 인 원수를 집계하는 Map-Reduce 계산은 aggregate() 메써드를 이용하면 수분 이면 충분합니다.
$ mongo 192.168.3.2:27017/test // test db에 접속한다 mongos> mongos> db.things.aggregate( {$group : {_id : "$deptno", total : {"$sum":1}}} )
'데이터과학 > 데이터 분석 실습' 카테고리의 다른 글
Data Analysis (1): Neuroimaging Data loading using SPM8 toolbox (11) | 2014.01.26 |
---|---|
유니코드 변환 파이썬 프로그램 - convert to unicode (python program) (0) | 2013.12.16 |
맥미니 몽고디비 분산 시스템 (4) - Replica Set (3) | 2013.07.20 |
맥미니 몽고디비 분산 시스템 (3) - Sharding (0) | 2013.07.20 |
맥미니 몽고디비 분산 시스템 (2) - 클러스터 구축 준비 (0) | 2013.07.20 |