MongoDB 프로그래밍
강좌 정보
- 제공 : T아카데미
- 강좌 교육 기간 : 2017-01-10 ~ 2017-02-09
- 위치 :
강사 정보
- 정금호
약어/용어 들
- Sharding : 분산 저장을 의미
- HDFS : Hadoop Distributed File System
정리
- MapReduce 란
- Sharding
- MongoDB Sharding 구조 조사
- 몽고 DB 실행 및 관련 도구 정리 하기
5강. MongoDB와 시작/중단
- mongod -dbpath $DATA_DIR
- mongod : MongoDB의 서버 프로그램 (Daemon)
- $DATA_DIR 위치
- 방화벽에서 외부 접근을 허용 해야 함.
- 기본 포트 번호 : 27017
- MongoDB 서비스(실행)
- mongod --config $PATH\mongodb.conf --install
- mongodb.conf
dbpath = c:\var\data logpath = c:\var\log\logs.log logappend = true rest = true directoryperdb = true |
- MongoDB 종료
- 안전 종료
# mongo > use admin; > db.shutdownServer(); |
6강. MongoDB Shell(mongo) 이용 하기
- MongoDB 데이터베이스 조회
> show dbs; Moviest 0.000GB arduino 0.000GB local 0.000GB test 0.000GB > use test; switched to db test |
- show dbs : 데이타 베이스 목록 조회
- use $db_name : $db 사용하기
- MongoDB 컬렉션 조회
> show collections; scores test users |
- 컬력션은 Table에 해당 함.
- JavaScript 실행
#변수 생성 > a = 5; 5 > a * 10; 50 #반복문 사용 > for(i=0;i<10;i++){print('Hello')}; Hello … -- 10번 반복 #JSON 데이터 저장 > var n = {name:'Ed',lang:['c','java','js']}; |
MongoDB 데이터 저장
- MongoDB 저장 : Save 명령
> db.scores.save({a:99}} WriteResult({ "nInserted" : 1 }) # scores가 존재 하지 않으면 생성 함. > db.scores.find(); # 아무 인자가 없으면 전체 조회를 함. { "_id" : ObjectId("587c99f3b0ab1c17119a1d95"), "a" : 99 } > for(i=0;i<10;i++){ db.scores.save({a:i,exam:5});} > db.scores.find(); { "_id" : ObjectId("587c99f3b0ab1c17119a1d95"), "a" : 99 } { "_id" : ObjectId("587c9cbcb0ab1c17119a1d97"), "a" : 0, "exam" : 5 } { "_id" : ObjectId("587c9cbcb0ab1c17119a1d98"), "a" : 1, "exam" : 5 } { "_id" : ObjectId("587c9cbcb0ab1c17119a1d99"), "a" : 2, "exam" : 5 } { "_id" : ObjectId("587c9cbcb0ab1c17119a1d9a"), "a" : 3, "exam" : 5 } { "_id" : ObjectId("587c9cbcb0ab1c17119a1d9b"), "a" : 4, "exam" : 5 } { "_id" : ObjectId("587c9cbcb0ab1c17119a1d9c"), "a" : 5, "exam" : 5 } { "_id" : ObjectId("587c9cbcb0ab1c17119a1d9d"), "a" : 6, "exam" : 5 } { "_id" : ObjectId("587c9cbcb0ab1c17119a1d9e"), "a" : 7, "exam" : 5 } { "_id" : ObjectId("587c9cbcb0ab1c17119a1d9f"), "a" : 8, "exam" : 5 } { "_id" : ObjectId("587c9cbcb0ab1c17119a1da0"), "a" : 9, "exam" : 5 } |
MongoDB 데이터 조회
- 비교 연산자
- $gt : >
- $lt : <
- $gte : >=
- $lte : <=
- $ne : !=
- eq : 없음
- 조회 질의 예제
# a 값이 2 것들을 조회 > db.scores.find({a:2}); # a 값이 15 보다 큰것들을 조회 > db.scores.find({a:{'$gt':15}}); # and 연산 a가 2이상 4이하 > db.scores.find({a:{'$gte':2,'$lte':4}}); # $in | $nin > db.scores.find({a:{'$in':[2,3,4]}}); # or 연산 > db.scores.find({'$or':[{a:{'$gte':2}},{a:{'$lte':4}}}]}); # 필드 존재 여부 > db.scores.find({exam:{$exists:true}}); # 반환 필드 선택 : a, exam 필드 보이기 ,_id 미 표시 > db.scores.find({},{a:1,exam:1,_id:0}); # 현재 collection을 row 갯수 알아내기 > db.scores.count(); |
9강 . MongoDB의 샤딩에 대해 알아보기
샤딩 시스템 구성
데이터 저장 공간 생성
- 샤드 서버용 저장 공간 생성
- mkdir c:\MongoDB\shard1
- mkdir c:\MongoDB\shard2
- mkdir c:\MongoDB\shard3
- config 서버용 저장 공간 생성
- mkdir c:\MongoDB\config1
서버 실행
- 샤드 서버 실행
- mongod -shardsvr -dbpath c:\MongoDB\shard1 -port 40001
- mongod -shardsvr -dbpath c:\MongoDB\shard2 -port 40002
- mongod -shardsvr -dbpath c:\MongoDB\shard3 -port 40003
- config 서버 실행
- mongod -configsvr -dbpath c:\MongoDB\config1 -port 50001
mongos 서버 실행
- mongos 서버 실행
- mongos -configdb localhost:50001 -port 50000 -chunkSize 1
- chuckSize 단위 1MB
- 샤드 서버 추가
- mongo shell 들어가기 (mongos 서버에 접속 함.
- mongo localhost:50000
- db.runCommand({addshard:"localhost:40001"});
- db.runCommand({addshard:"localhost:40002"});
- db.runCommand({addshard:"localhost:40003"});
- 샤드 키 지정
- db.runCommand({enablesharding:"person"});
- db.runCommand({shardcollection:"person.users",key:{_id:1}});
데이터 저장
- 다량의 데이터 입력
- use person;
- for(i=0; i< 100000;i++){
db.users.save{{name:'name'+i});
}
- 현재 샤드 상태 조회
- printShardingStatus();
shard 삭제
- db.runCommand({removeshard : "localhost:40000"});
10강 . MongoDB를 이용한 복제 방법 살펴보기
에러 메시지 발생
- Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }
DB 삭제
> use $DB
> db.dropDatabase();
12-14강 . MapReduce
개념
- 대용량의 데이터를 안전하고 빠르게 처리하기 위한 방법
- 한 대 이상의 HW를 활용하는 분산 프로그래밍 모델
- 대표적인 제품 : Hadoop
특징
- 데이터를 분산하여 연산하고 다시 합치는 기술
- 두 단계로 구분 : Map 과 Reduce 단계고 나누고 In / Out 으로 Key - Value 형태를 가지고 있음
장점과 단점
장점 | 단점 |
분산모델을 감추어 대용량 처리를 단순하게 함 | 기존 RDBMS보다 불편한 스키마와 질의 |
특정 데이터 모델이나 스키마에 의존적이지 않은 유연성 | DBMS와 비교하여 낮은 성능 |
저장구조의 독립성 | 개발 환경의 불편함과 운영 노하우 부족 |
높은 확장성 | 단순한 데이터 처리 |
MapReduce와 RDBMS 비교
항목 | RDBMS | MapReduce |
Data Size | 기가바이트 | 페타바이트 |
Access | 대화형과 일괄처리 | 일괄처리 |
Update | 여러 번 읽고 쓰기 | 한번 쓰면, 여러 번 읽기 |
구조 | 고정 스키마 | 동적 스키마 |
무결성 | 높음 | 낮음 |
확장성 | 비선형 | 선형 |
HDFS 개요
- Hadoop Distributed File System
- 구성 요소
- Client : 데이터 송수신 요청
- Namenode : HDFS 전체 시스템 제어 ★
- 네임노드 오류 발생 시 : 모든 클러스터가 죽는 문제 발생함
- Datanode : 수천대의 서버로 구성, 데이터 저장 역할
- 데이터 처리 원칙
- Block size : 파일을 저장하는 단위 (64 or 128 MB)
- Replication : 모든 블록은 여러 노드에 분산되어 저장 (기본 3개)
MongoDB 의 맵 리튜스
- 집계 함수를 지원 되지 않기 때문에 map reduce를 통해서 만 구현 함.
Word Count
입력 파일의 텍스트 내용에 포함된 단어의 수를 세는 프로그램(입문용 MapReduce 프로그램 예제)
- map 함수
var map = function (){ var res= this.text.split(" "); for(var i in res){ emit({word:res[i]},{count:1}); ---- //reduce 함수로 전달 한다. } } |
- reduce 함수
var reduce = function (key,values){ var total=0; for(var i in values){ total += values[i].count; } return {count:total}; } |
- 사용
> db.words.mapReduce(map,reduce,”wordcount”); > db.wordcount.find(); { "_id" : { "word" : "a" }, "value" : { "count" : 2 } } { "_id" : { "word" : "book" }, "value" : { "count" : 2 } } { "_id" : { "word" : "read" }, "value" : { "count" : 1 } } { "_id" : { "word" : "write" }, "value" : { "count" : 1 } } |
Inverted Search Index
- value의 내용을 key로 하고 ,key의 내용을 반대로 value로 하는 패턴
- 검색엔진에서 많이 사용함.
- map 함수
var map = function (){ for(var i in this.movies){ emit({movie:this.movies[i]},{actors:[this.actor]}); } } |
- reduce 함수
var reduce = function (key,values){ actor_list = {actors:[]}; for( var i in values){ actor_list.actors = values[i].actors.concat(actor_list.actors); } return actor_list; } |
- 사용
> db.actors.mapReduce(map,reduce,'pivot'); > db.pivot.find(); { "_id" : { "movie" : "Chicago" }, "value" : { "actors" : [ "Julia Roberts", "Richard Gere" ] } } { "_id" : { "movie" : "Pretty Woman" }, "value" : { "actors" : [ "Julia Roberts", "Richard Gere" ] } } { "_id" : { "movie" : "Runaway Bride" }, "value" : { "actors" : [ "Julia Roberts", "Richard Gere" ] } } |
16강 . MongoDB 운영방법 배우기
추가적인 정보들
- BSON : Binary로 인코딩(serialization)된 JSON를 말함
- 참고 사이트 : 링크
백업 복구 방법들
- ShutDown & file copy : 가장 기초적인 방법
- FSyncLock 이용하는 방법 : db 전체 락을 걸고 데이터를 복제 및 복구
- Mongo Dump/Restore : BSON 형태로 백업
- Mongo Export/Import : json , CSV , TSV 형태로 백업 가능
Google 문서: 온라인에서 문서를 만들고 수정해 보세요. Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA 다른 사용자가 Google 문서의 문서를 나와 공유하여 발송된 이메일입니다. |
댓글 없음:
댓글 쓰기