2019년 7월 3일 수요일

MongDB 프로그래밍

MongoDB_프로그램밍.jpg MongoDB 프로그래밍


강좌 정보

  • 제공 : T아카데미
  • 강좌 교육 기간 : 2017-01-10 ~ 2017-02-09
  • 위치 :

강사 정보

  • 정금호


약어/용어 들

  1. Sharding : 분산 저장을 의미
  2. 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 형태로 백업 가능

cosmoslight.huni@gmail.com님이 다음 문서를 첨부했습니다.
[강좌]T아카데미_MongDB 프로그래밍
Google 문서: 온라인에서 문서를 만들고 수정해 보세요.
Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA
다른 사용자가 Google 문서의 문서를 나와 공유하여 발송된 이메일입니다.
Google 문서 로고

댓글 없음: