슬라이드 1

Similar documents
NoSQL

PowerPoint 프레젠테이션

슬라이드 1

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

슬라이드 1

쉽게 풀어쓴 C 프로그래밊

PowerPoint 프레젠테이션

DBMS & SQL Server Installation Database Laboratory

Windows 8에서 BioStar 1 설치하기

슬라이드 1

Microsoft PowerPoint - 10Àå.ppt

5 주차 -mongodb 설치잠깐! CAP 이론 NoSQL이나온이유와 MongoDB NoSQL의데이터저장구조에따른세가지분류 RDBMS와 NoSQL특성비교 RDBMS와 NoSQL의사용시기 MongoDB 소개및특징 MongoDB와 RDBMS와의공통 MongoDB CRUD

윈도우시스템프로그래밍

Microsoft Word - src.doc

MySQL-Ch10

초보자를 위한 분산 캐시 활용 전략

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.

Tablespace On-Offline 테이블스페이스 온라인/오프라인

단계

표준프레임워크 Nexus 및 CI 환경구축가이드 Version 3.8 Page 1

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

강의 개요

adfasdfasfdasfasfadf

chap 5: Trees

Cloud Friendly System Architecture

MongoDB Trends and Introduction 우정웅연구원 Dec. 02, 2014

PowerPoint 프레젠테이션

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

빅데이터분산컴퓨팅-5-수정

MySQL-.. 1

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint 프레젠테이션

윈도우시스템프로그래밍

rmi_박준용_final.PDF

PowerPoint Presentation

PowerPoint 프레젠테이션

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

슬라이드 1

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

슬라이드 1

untitled

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

FileMaker 15 ODBC 및 JDBC 설명서

슬라이드 1

28 THE ASIAN JOURNAL OF TEX [2] ko.tex [5]

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

Microsoft PowerPoint - 27.pptx

비디오 / 그래픽 아답터 네트워크 만약에 ArcGolbe를 사용하는 경우, 추가적인 디스크 공간 필요. ArcGlobe는 캐시파일을 생성하여 사용 24 비트 그래픽 가속기 Oepn GL 2.0 이상을 지원하는 비디오카드 최소 64 MB 이고 256 MB 이상을 메모리

vRealize Automation용 VMware Remote Console - VMware

TTA Journal No.157_서체변경.indd

Visual Basic 반복문

PowerPoint Template

Windows Server 2012

JDBC 소개및설치 Database Laboratory

초보자를 위한 ADO 21일 완성

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

PowerPoint 프레젠테이션

5장 SQL 언어 Part II

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

작성자 : 기술지원부 김 삼 수

슬라이드 1

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게 해 주는 프로그램입니다. 다양한 기능을 하는 플러그인과 디자인

UI TASK & KEY EVENT

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

슬라이드 제목 없음

Unit Four

FileMaker ODBC 및 JDBC 가이드

6. 설치가시작되는동안 USB 드라이버가자동으로로드됩니다. USB 드라이버가성공적으로로드되면 Setup is starting( 설치가시작되는중 )... 화면이표시됩니다. 7. 화면지침에따라 Windows 7 설치를완료합니다. 방법 2: 수정된 Windows 7 ISO

설계란 무엇인가?


슬라이드 1

3. MOBIUS 서버플랫폼의 SOURCE 구조몇구성 MOBIUS 서버플랫폼 SOURCE 구조 MOBIUS 서버플랫폼의구성 MOBIUS 서버설치 (WINDOWS) REDIS DB 설치

Tcl의 문법

목차 1. 제품 소개 특징 개요 Function table 기능 소개 Copy Compare Copy & Compare Erase

제11장 프로세스와 쓰레드

JVM 메모리구조

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

Microsoft PowerPoint 자동설치시스템검증-V05-Baul.pptx

항목

PowerPoint Presentation

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터

1. efolder 시스템구성 A. DB B. apache - mod-perl - PHP C. SphinxSearch ( 검색서비스 ) D. File Storage 2. efolder 설치순서 A. DB (MySQL) B. efolder Service - efolder

게시판 스팸 실시간 차단 시스템

PowerPoint Template

슬라이드 1

[Brochure] KOR_TunA

PowerPoint Presentation

슬라이드 1

Microsoft PowerPoint 웹 연동 기술.pptx

APOGEE Insight_KR_Base_3P11

Contributors: Myung Su Seok and SeokJae Yoo Last Update: 09/25/ Introduction 2015년 8월현재전자기학분야에서가장많이쓰이고있는 simulation software는다음과같은알고리즘을사용하고있다.

Transcription:

MongoDB 1. 도구개요 2. 설치및실행 3. 주요기능 4. MongoDB 구성

1. 도구개요 1.1 도구정보요약 도구명소개특징주요기능 MongoDB (http://www.mongodb.org) 문서지향데이터베이스로분류되는 NoSQL 라이선스 GNU AGPL v3.0 NoSQL 데이터베이스중에서대중적인지도가가장높은데이터베이스 JSON 기반의유연한스키마를지원하며, 일관성 (Consistency) 와장애내구성 (Partition Tolerance) 를지원 유연하고확장성이높은데이터베이스 범위쿼리, 보조인덱스, 정렬기능을제공하고집합연산을위한 MapReduce 와지리검색색인을제공 파일저장소로활용가능, 파일과파일의메타정보를저장하는프로토콜제공 다중언어지원 : C, C++, C#,.Net, Java, Node.js, Perl, PHP, Python, Ruby, Scala, Go, Erlang 문서지향데이터베이스 (Document-Oriented Database) Schema free Full Index 지원 GridFS 실행환경 Windows, Linux, OS X, Solaris 사전설치도구 없음 카테고리 데이터베이스최신버전 2.6 (2014.11) 관련도구 CouchDB, Redis, BigCouch, Riak, MemCached, 2

1. 도구개요 1.2 스크린캡쳐및주요기능 JSON 스타일의문서기반 NoSQL 데이터베이스 다양한프로그래밍언어및프레임워크지원 Auto-Sharding, 복제및고가용성, Full-Index, MapReduce 작업지원 MongoDB 는서버용프로그램으로스크린캡쳐할도구화면은없음 Auto-Sharding Replication High-Availability Full-Index MapReduce 3

2. 설치및실행 세부목차 2.1 다운로드 2.2 설치및실행 ( 윈도우 ) 2.3 설치및실행 ( 리눅스 ) 2.4 설치및실행 (OS X) 2.5 MongoDB 구성 2.6 mongod 옵션과실행 4

2. 설치및실행 2.1 다운로드 MongoDB 는윈도우, 리눅스, 맥그리고솔라리스를지원한다. http://www.mongodb.org/downloads 에서운영체제별설치파일을다운로드받을수있다. 5

2. 설치및실행 2.2 설치및실행 ( 윈도우 ) 설치 http://www.mongodb.org/downloads 에서윈도우를선택하고설치파일을다운로드받는다. 2.6.5 버전의설치파일명은 mongodb-win32-x86_64-2008plus-2.6.5- signed.msi 이다. 이설치파일을더블클릭하여다음과같이설치를진행한다. 6

2. 설치및실행 2.2 설치및실행 ( 윈도우 ) MongoDB 의기본설치디렉터리 : C:\Program Files\MongoDB 2.6 Standard MongoDB 설치디렉터리아래의 bin 디렉터리를윈도우환경변수에등록하는것이편리하다. 윈도우환경변수등록절차 [ 내컴퓨터 ]-[ 마우스오른쪽버튼 ]-> 관리 -> 시스템 -> 고급시스템설정 환경변수클릭 -> 시스템환경변수에서 path 변수드블클릭 Path 의마지막에 ;C:\Program Files\MongoDB 2.6 Standard\bin 추가 7

2. 설치및실행 2.2 설치및실행 ( 윈도우 ) MongoDB 를실행하기위해서는데이터가저장될물리적인디렉터리를지정해야한다. MongoDB 데이터저장디렉터리생성 : c:\mongodb\data Command Console 을오픈하고 mongod 프로세스시작 두번째 Command Console 을오픈하고 mongo 입력 mongod 프로세스실행윈도우커멘드콘솔 C:\mongodb>mongod --dbpath c:\mongodb\data 2014-11-02T12:47:10.642+0900 [initandlisten] MongoDB starting : pid=4576 p ort=27017 dbpath=c:\mongodb\data 64-bit host=alvin-pc 2014-11-02T12:47:10.642+0900 [initandlisten] targetminos: Windows 7/Windo ws Server 2008 R2 2014-11-02T12:47:10.642+0900 [initandlisten] db version v2.6.5 2014-11-02T12:47:10.642+0900 [initandlisten] git version: e99d4fcb4279c0279 796f237aa92fe3b64560bf6 2014-11-02T12:47:10.642+0900 [initandlisten] build info: windows sys.getwind owsversion(major=6, minor=1, build=7601, platform=2, service_pack='service Pack 1 ) BOOST_LIB_VERSION=1_49 2014-11-02T12:47:10.642+0900 [initandlisten] allocator: system 2014-11-02T12:47:10.642+0900 [initandlisten] options: { storage: { dbpath: "c: \mongodb\data", smallfiles: true } } ## ## 로그중간생략 ## 2014-11-02T12:47:11.547+0900 [initandlisten] command local.$cmd command: create { create: "startup_log", size: 10485760, capped: true } ntoreturn:1 keyupdates:0 numyields:0 reslen:37 565ms 2014-11-02T12:47:11.547+0900 [initandlisten] waiting for connections on port 27017 mongo 프로세스실행윈도우커멘드콘솔 C:\mongodb>mongo MongoDB shell version: 2.6.5 connecting to: test > 8

2. 설치및실행 2.3 설치및실행 ( 리눅스 ) 리눅스용 MongoDB 설치파일다운로드 http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.5.tgz 압축풀기 tar zxvf mongodb-linux-x86_64-2.6.5.tgz MongoDB 데이터보관디렉터리생성 : mkdir data Mongod 데몬실행 :./mongod dbpath /home/mongodb/data 설치파일다운로드, 압축풀기및데이터디렉터리생성 (Terminal 1) mongod 데몬실행 (Terminal 1) mongodb@mongodb:~$ wget http://fastdl.mongodb.org/lin ux/mongodb-linux-x86_64-2.6.5.tgz ########## ## 로그생략 ########## 2014-11-02 15:05:45 (64.8 MB/s) - `mongodb-linux-x86_64-2.6.5.tgz' s aved [115741898/115741898] mongodb@mongodb:~$ tar zxvf mongodb-linux-x86_64-2.6.5.tgz mongodb-linux-x86_64-2.6.5/readme mongodb-linux-x86_64-2.6.5/third-party-notices mongodb-linux-x86_64-2.6.5/gnu-agpl-3.0 ########## ## 로그생략 ########## mongodb-linux-x86_64-2.6.5/bin/mongo mongodb@mongodb:~$ mkdir data mongodb@mongodb:~/mongodb-linux-x86_64-2.6.5/bin$ pwd /home/mongodb/mongodb-linux-x86_64-2.6.5/bin mongodb@mongodb:~/mongodb-linux-x86_64-2.6.5/bin$./mong od --dbpath /home/mongodb/data 2014-11-02T15:08:48.319+0900 [initandlisten] MongoDB starting : pid =5516 port=27017 dbpath=/home/mongodb/data 64-bit host=mong odb ########## ## 로그생략 ########## 2014-11-02T15:14:48.489+0900 [clientcursormon] connections:0 mongo 데몬실행 (Terminal 2) /home/mongodb/mongodb-linux-x86_64-2.6.5/bin mongodb@mongodb:~/mongodb-linux-x86_64-2.6.5/bin$./mongo ########## ## 로그생략 ########## Questions? Try the support group http://groups.google.com/group/mongodb-user > 9

2. 설치및실행 2.4 설치및실행 (OS X) 맥 OS X 에는리눅스와마찬가지로배포본을다운로드하고설치하는방법과 brew 를이용하여설치하는방법두가지가있다. 설치배포본을다운로드하고설치하는방법은리눅스설치와동일하다. OS X 에 brew 설치되어있다면, 터미널에서다음과같은 brew 명령으로설치를할수있다. # 으로시작하는문자열은터미널상의주석 ># brew 페지키데이터업데이트 >brew update ># MongoDB 바이너리설치 >brew install mongodb ># 최신개발버전설치 >brew install mongodb --devel 10

2. 설치및실행 2.5 MongoDB 구성 MongoDB 는여러서버에데이터를분산하여저장하도록클러스터를구성할수있다. 클러스터내의각서버는특정영역의데이터를관리하며 MongDB 에서는이것을샤딩 (Sharding) 이라고한다. MongoDB 는 3 가지종류의서버를이용하여샤딩을구성한다. mongod 서버 Config 서버 mongos 서버서버유형 설명 mongod 데이터를저장및관리하고복제정책을적용하는서버. mongod (configsvr) 특수한형태의 mongod 서버, 샤딩에대한환결설정서버로클러스터의메타정보 ( 파티셔닝정보 ) 를관리하는서버. mongod 서버시작시 configsvr 옵션으로시작함. 안정성을위해서운영모드에서는 3 개의 configsvr 서버를운영해야함. 2 개의 configsvr 서버가장애가발생할경우남아있는 1 개의서버는읽기전용으로운영됨 mongos configsvr 서버의파티셔닝정보를참조하여사용자요청을포워드하는역할을담당, configsvr 서버의메타정보를캐쉬하여사용. 11

2. 설치및실행 2.6 mongod 옵션과실행 MongoDB 클러스터의데이터를관리하는 mongod 서버다수의옵션을포함한다. 구분옵션설명 dbpath 데이터저장디렉터리 ( 기본값 : /data/db) port 포트번호지정 ( 기본값 : 27017) 일반옵션 smallfiles fork 기본파일사이즈보다작은파일사이즈사용 백그라운드프로세스로실행 maxconns 동시최대커넥션수 ( 기본값 : 1,000,000) 마스터 / 슬레이브옵션 logpath config master slave source 로그파일경로옵션을포함하는설정파일지정마스터 / 슬레이브구성시마스터서버역할수행마스터 / 슬레이브구성시슬레이브서버역할수행마스터 / 슬레이브구성시마스터서버역할설정 리프리카옵션 replset 복제-셋서버구성으로실행 shardsvr 데이터를여러노드에분산하는샤딩구성으로서버실행 샤드옵션 configsvr 클러스터의메타정보저장데이터베이스로실행 12

2. 설치및실행 2.6 mongod 옵션과실행 mongod 를실행하는방법에는명령어에옵션을추가하거나설정파일을사용하는방법두가지가있다. 명령어옵션지정방식 > bin/mongod --dbpath /home/mongodb/data --port 30000 --logpath / home/mongodb/mongolog 설정파일지정방식 설정파일 ( 파일명 : config) dbpath = /home/mongodb/data port = 30000 logpath = /home/mongodb/mongolog > bin/mongod --config./config 13

세부목차 3.1 MongoDB 개요 3.2 MongoDB Shell 3.3 기본 CRUD 3.4 Aggregation ( 집계 ) 3.5 웹관리콘솔 3.6 자바드라이버 14

3.1 MongoDB 개요 MongoDB 와 RDBMS MongoDB 와 RDBMS 의용어비교 Database Table Index Row Column Join Primary key RDBMS MongoDB Database Collection Index BSON Document BSON field Embedding & Linking _id field 15

3.1 MongoDB 개요 Document MongoDB 는 JSON 기반의 Document( 문서 ) 를데이터저장단위로한다. 실제저장되는 Document 의형태는 BSON(Binary JSON) 이다. BSON 은 JSON 을바이너리형태로직렬화한다. Document 크기제한 : 16 Mbyte { "_id" : 1, "name" : { "first" : "John", "last" : "Backus" }, "contribs" : [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ], "awards" : [ { "award" : "W.W. McDowell Award", "year" : 1967, "by" : "IEEE Computer Society" }, { "award" : "Draper Prize", "year" : 1993, "by" : "National Academy of Engineering" } ] } 16

3.2 MongoDB Shell MongoDB 접속 MongoDB 는자바스크립트를기반으로하는 Mongo Shell 을제공한다. Mongo Shell 은 MongoDB 에접근하여데이터베이스에데이터를저장하고관리하는기능을수행할수있다. Mongo Shell 은 bin/mongo 로실행한다. bin/mongo 사용법 mongo 명령어사용예제 mongo foo mongo dbserver.mydomain.com/foo mongo dbserver.mydomain.com:30000/foo 로컬머신 (127.0.0.1) 의 27017 포토에연결 로컬머신 (127.0.0.1) 의 27017 포토의 foo 데이터베이스에연결 dbserver.mydomain.com 의 27017 포트의 foo 데이터베이스에연결 dbserver.mydomain.com 의 30000 포트의 foo 데이터베이스에연결 17

3.2 MongoDB Shell 데이터베이스정보조회 MongoDB 의모든데이터베이스조회 show dbs 데이터베이스로이동 use db_name 이동한데이터베이스의모든 Collection 조회 Show collections use db_name 으로새로운데이터베이스에접근할경우해당데이터베이스는실제로존재하지않는다. 첫번째데이터가추가될때데이터베이스가만들어진다. mongodb@mongodb:~/mongdb/bin$./mongo MongoDB shell version: 2.6.5 connecting to: test > show dbs admin (empty) local 0.078GB > use local switched to db local > show collections startup_log system.indexes > 18

3.2 MongoDB Shell 데이터베이스정보조회 데이터베이스정보요약 db.stats() > db.stats() { } "db" : "demo", "collections" : 3, "objects" : 604, "avgobjsize" : 102.19867549668874, "datasize" : 61728, "storagesize" : 188416, "numextents" : 5, "indexes" : 1, "indexsize" : 32704, "filesize" : 67108864, "nssizemb" : 16, "datafileversion" : { "major" : 4, "minor" : 5 }, "extentfreelist" : { "num" : 4, "totalsize" : 303104 }, "ok" : 1 19

3.2 Mongo Shell 데이터베이스정보조회 Collection 정보요약 db.[collection_name].stats() > show collections movies system.indexes > db.movies.stats() { "ns" : "demo.movies", "count" : 600, "size" : 61472, "avgobjsize" : 102, "storagesize" : 172032, "numextents" : 3, "nindexes" : 1, "lastextentsize" : 131072, "paddingfactor" : 1, "systemflags" : 1, "userflags" : 1, "totalindexsize" : 32704, "indexsizes" : { "_id_" : 32704 }, "ok" : 1 } 20

3.3 기본 CRUD Document 생성 (Insert) MongoDB 는 db.collection_name.insert() 와 db.collection_name.save() 를이용하여문서를저장한다. collection_name 은사용하고자하는 Collection 이름으로대체된다. Collection 이존재하지않을경우즉시만들어진다. insert() 와 save() 의차이점 insert() 는저장할문서의 _id 가기존에존재할경우에러발생시킨다. save() 는저장할문서의 _id 가기존에존재할경우기존문서를수정하고기존에 _id 가존재하지않을경우 insert() 와동일하게동작한다. _id 는 MongoDB 가자동할당한키필드이다. > db.baseball.insert( {playername:"park chanho"} ) WriteResult({ "ninserted" : 1 }) > db.baseball.save( {playername:"ryu hyunjin"} ) WriteResult({ "ninserted" : 1 }) > db.baseball.find() // 현재 baseball 컬렉션에모든데이터를조회하는함수 { "_id" : ObjectId("545828a5693831f8b1a1ea42"), "playername" : "park chanho" } { "_id" : ObjectId("545829e8693831f8b1a1ea43"), "playername" : "Ryu hyunjin" } > // _id 를포함한 document 를 save 함수로저장 > db.baseball.save( { "_id" : ObjectId("545829e8693831f8b1a1ea43"), "playername" : "Ryu hyunjin", team:"la Dodgers"} ) WriteResult({ "nmatched" : 1, "nupserted" : 0, "nmodified" : 1 }) > db.baseball.find() { "_id" : ObjectId("545828a5693831f8b1a1ea42"), "playername" : "park chanho" } { "_id" : ObjectId("545829e8693831f8b1a1ea43"), "playername" : "Ryu hyunjin", "team" : "LA Dodgers" } 21

3.3 기본 CRUD Document 조회 조회함수 MongoDB 의가장큰강점중하나는 RDBMS 의테이블대신 BSON 문서를필터링하고반환하지만, 기존의관계형데이터베이스와거의같은방식으로작동하는쿼리를강력하게지원한다는점이다. MongoDB 를사용하면비교적복잡한 SQL 쿼리를 Javascript 함수호출로쉽게변환할수있다. db.collection.findone(<criteria>, <projection>) // 조건에맞는문서 1 개를반환 db.collection.find(<criteria>, <projection>) // 조건에맞는문서를반환하는 Curson 를반환 Parameter Type 설명예제 criteria document 선택적파라미터 조회조건을 document 형태로전달 이파라미터를생략하거나빈문서 ( { } ) 를전달할경우전체문서반환 projection document 선택적파라미터 반환할문서의필드를지정 전체필드를모두반환할경우, 이파라미터를생략함 Query Operator 를사용 { field1: true, field2: false... } Value true or 1 false or 0 22

3.3 기본 CRUD Document 조회쿼리예제 조회쿼리 설명 db.bios.find() db.products.find( { qty: { $gt: 25 } } ) db.bios.find( { _id: 5 } ) db.bios.find( { _id: { $in: [ 5, ObjectId("507c35dd8fada716c89d0013") ] } } ) db.products.find( { qty: { $gt: 25, $lt:50 } } ) db.bios.find( { contribs: "UNIX" } ) db.bios.find( { awards: { $elemmatch: { award: "Turing Award", year: { $gt: 1980 } } } } ) db.bios.find( { "name.first": "Yukihiro", "name.last": "Matsumoto" } ) bios 컬렉션의모든문서조회 productions 컬렉션에서 qty 필드가 25 보다큰문서를조회 bios 컬렉션에서 _id 필드가 5 인문서조회 Bios 컬렉션에서 _id 가 5 이거나 ObjectId("507c35dd8fada716 c89d0013") 인문서를조회 productions 컬렉션에서 qty 필드가 25 보다크고 50 보다작은문서를조회 bios 컬렉션에서배열필드인 contribs 에 UNIX 를포함하는문서를조회 bios 컬렉션에서배열로중첩 json 문서 (subdocument) 를포함하는 awards 필드에서 award 가 Turing Award 이고 year 가 1980 보다큰중첩 json 문서를포함하는문서조회 bios 컬렉션에서 name 필드가중첩 json 문서를갖는문서중에서, 중첩 json 문서의 first 필드가 Yukihiro 이고 last 필드가 Matsumoto 인문서조회 23

3.3 기본 CRUD Document 조회쿼리 Query Selector 연산자설명연산자설명 $lt 미만 $in 배열에있는하나이상의값과 일치 $lte 이하 $nin 배열에있는 0 값과일치 $gt 초과 $or 쿼리중하나와일치 $gte 이상 $or 쿼리중하나와일치 $all 배열에있는모든값과일치 $nor 쿼리중어느것과도일치하지 않음 $exists 필드의존재여부확인 $size 정의된요소수가있는배열과 일치 $mod 모듈 $type 지정된 BSON 데이터유형의값 과일치 $ne 같지않음 $not 같지않음 $where 실행결과를비교 24

3.3 기본 CRUD Document 조회결과정렬및 Paging 조회결과에대한정렬및 Paging 관련함수 db.collection.find().sort (<projection>) // sql 문의 order by 역할 db.collection.find().limit(num) // 조회결과문서수를제한 sql문중에 LIMIT 문에해당 db.collection.find().skip(num) // 조회결과문서중에서시작문서의위치를지정 조회쿼리 db.bios.find().sort( { name: 1 } ) db.bios.find().limit( 5 ) db.bios.find().skip( 5 ) db.bios.find().sort( { name: 1 } ).limit( 5 ) db.bios.find().limit( 5 ).sort( { name: 1 } ) 설명 name 필드를기준으로오름차순정렬 bios 컬렉션의조회결과를 5 개문서로제한 bios 컬렉션의조회결과중앞에 5 개문서를제외하고반환 bios 컬렉션의조회결과중앞에 5 개문서를제외하고 name 필드를기준으로오름차순정렬하여반환 bios 컬렉션의조회결과중앞에 5 개문서를제외하고 name 필드를기준으로오름차순정렬하여반환 25

3.3 기본 CRUD Document 변경 db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean> } ) 파라미터 Type 설명 <query> document 수정대상이되는문서의조건 Find() 의 Query Selector 를사용할수있음 find() <update> document 적용할변경값 Update Parameter 를사용가능 upsert boolean 선택적파라미터 True 로설정될경우 <query> 의대상문서가없을경우 insert 됨 multi boolean 선택적파라미터 True 로설정될경우 <query> 조건을만족하는복수의문서에 <update> 가적용됨 26

3.3 기본 CRUD Document 변경 (Update Operator) 연산자설명연산자설명 $currentdate 현재 Date 를설정한다. $pop 배열의마지막요소를제거한다. $inc $max $min $mul 지정된필드에주어진값을더한다 지정된값이기존필드의값보다크면이값으로수정한다. 지정된값이기존필드의값보다작을경우이값으로수정한다. 지정된값으로기존필드의값을곱하여수정한다. $push 하나의값을배열에추가한다. $pushall 모든값을배열에추가한다. $addtoset $pull Push 와유사하지만중복값을넣지는않는다. 일차하는값하나를배열에서제거한다. $rename 필드명수정 $pullall 모든일치값을배열에서제거한 다. $set 지정된필드에지정된값을설정한다. $unset 지정한필드를문서에서제겅한다. 27

3.3 기본 CRUD Document 변경 원본데이터수정함수결과데이터 { } _id: 1, item: "TBD", stock: 0, info: { publisher: "1111", pages: 430 }, tags: [ "technology", "computer" ], ratings: [ { by: "ijk", rating: 4 }, { by: "lmn", rating: 5 } ], reorder: false db.books.update( { _id: 1 }, { $inc: { stock: 5 }, $set: { item: "ABC123", "info.publisher": "2222", tags: [ "software" ], "ratings.1": { by: "xyz", ratin g: 3 } } } ) { } "_id" : 1, "item" : "ABC123", "stock" : 5, "info" : { "publisher" : "2222", "pages" : 430 }, "tags" : [ "software" ], "ratings" : [ { "by" : "ijk", "rating" : 4 }, { "by" : "xyz", "rating" : 3 } ], "reorder" : false 28

3.3 기본 CRUD Document 삭제 db.collection.remove( <query>, <justone> ) 파라미터 Type 설명 <query> document 삭제대상이되는문서의조건 find() 의 Query Selector 를사용할수있음 모든문서를삭제할경우빈문서 ( {} ) 를넘김 <justone> boolean 선택적파라미터 true 로설정하면한개의문서만삭제 false 로설정하면복수의문서를삭제 db.bios.remove( { } ) 조회쿼리 db.products.remove( { qty: { $gt: 20 } } ) db.products.remove( { qty: { $gt: 20 } }, true ) 설명 bios 컬렉션의모든문서삭제 Products 컬렉션중 qty 필드가 20 을넘는문서삭제 bios 컬렉션에서 qty 필드가 20 을넘는문서중에 1 개를삭제 29

3.3 기본 CRUD Index 조회결과를반환하기위하여 200 번의객체스캔을경유한다. 조회결과 > db.movies.count() 200 > db.movies.find({title:" 이상한나라의앨리스 "}, {sales:tr ue, screen:true}) { "_id" : ObjectId("545903754728b18f59ca55c3"), "sales" : NumberLong("20334399500"), "screen" : 397 } 조회연산처리내역 > db.movies.find({title:" 이상한나라의앨리스 "}, {sales:tr ue, screen:true}).explain() { "cursor" : "BasicCursor", "ismultikey" : false, "n" : 1, "nscannedobjects" : 200, "nscanned" : 200, "nscannedobjectsallplans" : 200, "nscannedallplans" : 200, "scanandorder" : false, "indexonly" : false, "nyields" : 1, "nchunkskips" : 0, "millis" : 0, "server" : "alvin.local:27017", "filterset" : false } > 30

3.3 기본 CRUD Index 인덱스생성후객체조회횟수가 1 번으로조정됨 인덱스생성및결과조회 > db.movies.count() // 컬렉션총문서수 > db.movies.ensureindex( {title : 1}) // 인덱스생성 { "createdcollectionautomatically" : false, "numindexesbefore" : 1, "numindexesafter" : 2, "ok" : 1 } > db.movies.find({title:" 이상한나라의앨리스 "}, {sale s:true, screen:true}) // 결과조회 { "_id" : ObjectId("545903754728b18f59ca55c3"), "sales" : NumberLong("20334399500"), "screen" : 397 } 조회연산처리내역 > db.movies.find({title:" 이상한나라의앨리스 "}, {sales:true, screen:true}).explain() { "cursor" : "BtreeCursor title_1", "ismultikey" : false, "n" : 1, "nscannedobjects" : 1, "nscanned" : 1, "nscannedobjectsallplans" : 1, "nscannedallplans" : 1, "scanandorder" : false, "indexonly" : false, "nyields" : 0,"nChunkSkips" : 0, "millis" : 0, "indexbounds" : { "title" : [[ " 이상한나라의앨리스, " 이상한나라의앨리스 ] ] }, "server" : "alvin.local:27017, "filterset" : false } 31

3.3 기본 CRUD Index 쿼리에대한실행정보를제공 explain() > db.movies.find({title:" 이상한나라의앨리스 "}, {sales: true, screen:true}).explain() { "cursor" : "BtreeCursor title_1", "ismultikey" : false, "n" : 1, "nscannedobjects" : 1, "nscanned" : 1, "nscannedobjectsallplans" : 1, "nscannedallplans" : 1, "scanandorder" : false, "indexonly" : false, "nyields" : 0,"nChunkSkips" : 0, "millis" : 0, "indexbounds" : { "title" : [[ " 이상한나라의앨리스, " 이상한나라의앨리스 ] ] }, "server" : "alvin.local:27017, "filterset" : false } 필드 cursor nscanned n mills 설명 Title 로색인이되어있을을표시힌다. 인덱스가없을경우 BasicCursor 가출력됨 데이터베이스가훓어본문서의수. 반환하는문서의수와가까운것이좋음 반환하는문서의수 쿼리수행시간, 1/1000 초단위 32

3.3 기본 CRUD Index 인덱스생성방법 db.collection.ensureindex( <keys>, <options> ) 파라미터 Type 설명 <keys> document 인덱스를만들필드와정렬방식을 key:value 로하는문서 Value 가 1 일경우오름차순정렬이고 -1 일경우내림차순이다. <options> document 선택적파라미터 인덱스유형을결정하는문서 unique, name, dropdups 조회쿼리 설명 db.collection.ensureindex( { orderdate: 1 } ) orderdate 필드를오름차순으로인덱스생성 db.collection.ensureindex( { orderdate: 1, z ipcode: -1 } ) db.collection.ensureindex( { orderdate: 1, z ipcode: -1 }, {unique: true, dropdups:true} ) 2 개의필드로 Compound 인덱스생성 2 개의필드로 Compound 고유한 (unique) 인덱스생성, 중복된문서는제거 (dropdups) 33

3.3 기본 CRUD Index 인덱스삭제방법 db.collection.dropindex(index) // 인덱스삭제 db.collection.dropindexes() // 컬렉션의모든인덱스삭제 > db.movies.find({title:" 이상한나라의앨리스 "}, {sales:true, screen:true}).explain() { "cursor" : "BtreeCursor title_1", "ismultikey" : false, "n" : 1, "nscannedobjects" : 1, "nscanned" : 1, "nscannedobjectsallplans" : 1, "nscannedallplans" : 1, "scanandorder" : false, "indexonly" : false, "nyields" : 0,"nChunkSkips" : 0, "millis" : 0, "indexbounds" : { "title" : [[ " 이상한나라의앨리스, " 이상한나라의앨리스 ] ] }, "server" : "alvin.local:27017, "filterset" : false } 34

3.4 Aggregation ( 집계 ) 예제컬렉션으로 movies 를사용한다. movies 의예제 document title: 영화제목 open_date: 개봉일 sales: 총매출액 audience: 관객수 screen: 상영관수 showing: 상영횟수 nationality: 국적 distributor: 배급사 { } "_id" : ObjectId("54582d4d693831f8b1a1ea44"), "title" : " 명량 ", "open_date" : ISODate("2014-07-29T15:00:00Z"), "sales" : 135708680410, "audience" : 17609040, "screen" : 1586, "showing" : 188559, "nationality" : " 한국 ", "distributor" : " 씨제이이앤엠 ( 주 )" 35

3.4 Aggregation ( 집계 ) 문서의갯수 db.collection.count() // 컬렉션의문서의수를반환 db.collection.find().count() // 조회된문서의수를반환 조회쿼리 설명 db.movies.count() db.movies.find({audience: {$gt:10000000}}).count() movies 컬렉션의전체문서수를반환 Movies 컬렉션중에서관객이 10,000,000 명을넘은영화의문서갯수 > db.movies.find().count() 200 > db.movies.find({audience: {$gt:10000000}}).count() 10 36

3.4 Aggregation ( 집계 ) 주어진키의고유의값을찾음 db.collection.distinct() // 고유의값을반환 파라미터 Type 설명 field String 고유의값을반환할필드명 query document 대상문서의조건 > db.movies.distinct("distributor", {audience: {$gt:10000000}}) [ " 씨제이이앤엠 ( 주 )", " 이십세기폭스코리아 ( 주 )", " 쇼박스 미디어플렉스 ", "( 주 ) 넥스트엔터테인먼트월드 (NEW)", " 씨제이엔터테인먼트 ( 주 )", "( 주 ) 시네마서비스 ", " 소니픽쳐스릴리징월트디즈니스튜디오스코리아 ( 주 )" ] 37

3.4 Aggregation ( 집계 ) group db.collection.group( { key, reduce, initial [, keyf] [, cond] [, finalize] } 파라미터 Type 설명 key document 그룹할대상필드명 reduce function 적용할 reduce 함수, 집계로직을포함 inital document 반환할문서의초기버전 keyf function 선택적파라미터 그룹대상필드를기존필드로사용하지않고새로만들어쓸때사용 cond document 대상문서의선택조건 생략시모든문서를대상으로함 fialize function 결과를반환하기전에결과 json 객체를조작하는용도로사용 38

3.4 Aggregation ( 집계 ) group db.collection.group( { key, reduce, initial [, keyf] [, cond] [, finalize] } > db.movies.group( { key:{nationality:1}, reduce:function(curr, result){result.audience += curr.audience;}, initial: {audience:0} } ) [ {"nationality" : " 한국, "audience" : 522577535}, { "nationality" : " 미국, "audience" : 333566891}, { "nationality" : " 영국, "audience" : 3392514}, { "nationality" : " 중국, "audience" : 2694436}, { "nationality" : " 일본, "audience" : 2433298}, { "nationality" : " 프랑스, "audience" : 4667657 } ] 39

3.5 웹관리콘솔 mongod 프로세스를 --rest 옵션을추가하여실행할경우에웹기반의관리콘솔을사용할수있다. 웹콘솔의포트번호는 28017 번이다. 40

3.6 자바드라이버 mongodb는자바플렛폼을위한드라이버를제공한다. mongodb의자바드라이버는중앙메이븐레파지토리 (Central Maven Repository) 에서다운로드받을수있다. http://central.maven.org/maven2/org/mongodb/mongo-java-driver/ 메이븐빌드환경을사용한다면다음 Dependency 설정을사용할있다. <dependency> <groupid>org.mongodb</groupid> <artifactid>mongo-java-driver</artifactid> <version>2.12.4</version> </dependency> 41

3.6 자바드라이버 MongoDB 데이터베이스접속및컬렉션레퍼런스획득 import com.mongodb.*; public class JavaClient{ public static void main( String[] args ) throws UnknownHostException { MongoClient mongoclient = new MongoClient("localhost", 27017); DB db = mongoclient.getdb("demo"); DBCollection coll = db.getcollection("movies"); } } // 이하생략 42

3.6 자바드라이버 BasicDBObject JSON 을표현하기위해서 Map 을상속하는 BasicDBObject 를사용한다. BasicDBObject 에 key/value 를설정하고저장시키는방식을사용한다. JSON 의중첩구조는 BasicDBObject 가 key 의값으로 BasicDBObject 객체를저장하는방식으로처리된다. MongoClient mongoclient = new MongoClient("localhost", 27017); DB db = mongoclient.getdb("demo"); DBCollection coll = db.getcollection("movies"); BasicDBObject doc = new BasicDBObject(); doc.append("title", 명량 ); doc.append("open_date", new Date(2014, 6, 30)); doc.append("sales, 135708680410L); doc.append( audience", 17609040)); doc.append( screen", 1586)); doc.append("showing", 188559)); doc.append("nationality", 한국 ); doc.append("distributor", " 씨제이이앤엠 ( 주 )"); coll.insert(doc); 43

4. MongoDB 구성 세부목차 4.1 예제소개 4.2 마스터-슬레이브복제 4.3 Replica Set 4.4 Sharding 4.5 운영수준 Sharding 구성 44

4. MongoDB 구성 4.1 예제소개 데이터베이스가용성을향상시키고장애시원할한복구를위해서는데이터베이스에저장되는데이터를다른서버에복제하는방법을사용한다. 여러대의서버중한대에문제가발생하더라도새로운서버로교체하고기존데이터를동기화하는환경을구성하여시스템가용성을높일수있다. 이러한기술을 MongoDB 에서는 Replica 라고부르며 Replica Sets 을통해서안전한백업을지원한다. MongoDB 는 Sharding 을통한데이터분산저장을지원하며, Sharding 의주요목적은다음과같다. 데이터의분산저장 백업과복구전략 성능향상 Replica Sets 과 Sharding 을통한데이터분산처리를예제를통해알아본다. 45

4. MongoDB 구성 4.2 마스터 - 슬레이브복제 마스터 - 슬레이브복제는백업, 장애시요청넘김, 읽기분산에사용된다. 슬레이브는한개이상복수개구성이가능하다. 마스터노드는 mongod 를실행할때 --master 옵션으로시작한다. 슬레이브노드는 mongod 를실행할때 --slave 와 --source 옵션을설정한다. 슬레이브노드의제한은없지만 12 개이하로유지하는것이효과적이다. 아래 ## 는주석이다. > mkdir ~/mongodb/mdata ## master node 의데이터저장디렉터리 > mkdir ~/mongodb/sdata1 ## slave1 node 의데이터저장디렉터리 > mkdir ~/mongodb/sdata2 ## slave2 node 의데이터저장디렉터리 > mkdir ~/mongodb/sdata3 ## slave3 node 의데이터저장디렉터리 >./mongod --dbpath ~/mongodb/mdata --master --fork --port 27017 --logpath ~/mongodb/mdata/log > ## master node 실행옵션 >./mongod --dbpath ~/mongodb/sdata1 --logpath ~/mongodb/sdata1/log --fork --port 37017 --slave --sourc e localhost:27017 > ## slave1 node 실행옵션 >./mongod --dbpath ~/mongodb/sdata2 --logpath ~/mongodb/sdata2/log --fork --port 47017 --slave --sourc e localhost:27017 > ## slave2 node 실행옵션 >./mongod --dbpath ~/mongodb/sdata3 --logpath ~/mongodb/sdata3/log --fork --port 57017 --slave --sourc e localhost:27017 > ## slave3 node 실행옵션 46

4. MongoDB 구성 4.2 마스터 - 슬레이브복제 Slave1 slave dbpath = ~/mongodb/sdata1 port = 37017 master dbpath = ~/mongodb/mdata port = 27017 Master Slave2 slave dbpath = ~/mongodb/sdata2 port = 47017 Slave3 slave dbpath = ~/mongodb/sdata3 port = 57017 47

4. MongoDB 구성 4.2 마스터 - 슬레이브복제 복제설정확인 ( db.sources.find() ) > mongo localhost:37017 MongoDB shell version: 2.6.5 Slave1 Node connecting to: localhost:57017/test > use local switched to db local > db.sources.find() { "_id" : ObjectId("545974da2428368005f47c9f"), "host" : "localhost:27017", "source" : "main", "syncedto" : Timest amp(1415150730, 1) } > mongo localhost:47017 MongoDB shell version: 2.6.5 Slave2 Node connecting to: localhost:57017/test > use local switched to db local > db.sources.find() { "_id" : ObjectId("545974da2428368005f47c9f"), "host" : "localhost:27017", "source" : "main", "syncedto" : Timest amp(1415150730, 1) } > mongo localhost:57017 MongoDB shell version: 2.6.5 Slave3 Node connecting to: localhost:57017/test > use local switched to db local > db.sources.find() { "_id" : ObjectId("545974da2428368005f47c9f"), "host" : "localhost:27017", "source" : "main", "syncedto" : Timest amp(1415150730, 1) } 48

4. MongoDB 구성 4.2 마스터 - 슬레이브복제 소스추가및삭제설정 소스설정은 mongod 시작옵션으로지정할수있으며, 추가적으로 mongo shell 에서소스의추가및삭제가가능하다. 소스설정에사용되는 souces 컬렉션은 local 데이터베이스에위치한다. Shell 명령 db.sources.insert ( { host : localhost:27017}) db.sources.remove ( { host : localhost:27017}) 설명 source 설정추가및동기화사작 source 설정삭제및동기화종료 49

4. MongoDB 구성 4.3 Replica Set Replica Set 구성 --replset 옵션을설정하고마스터노드에서 config 설정작업을수행한다 rs.initiate() 함수를이용한다. >./mongod --replset demoset -fork --port 27017 --logpath ~/mongodb/node1/log --dbpath ~/mongodb/node1 >./mongod --replset demoset -fork --port 37017 --logpath ~/mongodb/node2/log --dbpath ~/mongodb/node2 >./mongod --replset demoset -fork --port 47017 --logpath ~/mongodb/node3/log --dbpath ~/mongodb/node3 >./mongo localhost:27017/admin MongoDB shell version: 2.6.5 connecting to: localhost:27017/admin > var config = { "_id" : "demoset",... "members" : [... { "_id" : 1, "host" : "localhost:37017" },... { "_id" : 2, "host" : "localhost:47017" },... { "_id" : 0, "host":"localhost:27017"}... ]} > rs.initiate(config) { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } demoset:primary> 50

4. MongoDB 구성 4.3 Replica Set ReplicaSet 은장애발생시에자동으로넘김기능이있는마스터 - 슬레이브복제버전이다. 마스터노드에장애가생기면다른노드로마스터를넘긴다. 복수의슬레이브노드가존재할경우마스터노드장애발생시소스변경이자동화되어있다. --replset 옵션을사용하여설정한다. 51

4. MongoDB 구성 4.4 Sharding Sharding 은 MongoDB 가분산확장하는방식이다. 애플리케이션에영향을주지않고증가하는부하와데이터를처리하기위해서버를추가할수있다. 클라이언트는 mongos 프로세스와통신하여샤드를추상화한다. 샤딩이필요한시점 현재서버의저장공간이부족할때 처리량을증가시켜야할때 성능향상을위해메모리확장이필요할때 Mongos Mongos Mongos Master Mongos Client Client 52

4. MongoDB 구성 4.4 Sharding 샤드구성요소 샤드 * 컬렉션의부분집합을저장하는컨테이너 * 단일 mongod 프로세스이거나 Replica Set * 하나의샤드가여러대의서버로구성될경우에도 master는 1대 Mongos * 모든요청의라우터프로세스 * 실제정보를저장하지않음 설정서버 * 샤드의실제인덱스정보와클러스터설정정보를관리 * mongos는설정서버의데이터를동기화하여사용함 53

4. MongoDB 구성 4.4 Sharding 샤드서버구성 설정서버시작 mongos 시작 샤드대상이되는 mongod(shard1) 서버시작 샤드대상이되는 mongod(shard2) 서버시작 mongos 접속하여 shard 추가 데이터샤딩하기 config Mongos Mongos Mongos 서버구분 dbpath port 설정서버 ~/mongodb/config 10000 mongos 20000 shard ~/mongodb/shard1 30000 shard ~/mongodb/shard2 40000 54

4. MongoDB 구성 4.4 Sharding 샤드서버시작 설정서버시작 > mkdir ~/mongodb/config >./mongod --dbpath ~/mongodb/config --port 10000 --fork --logpath ~/mongodb/config/log mongos 서비시작 > mkdir ~/mongodb/mongos >./mongos --port 20000 -configdb localhost:10000 --fork --logpath ~/mongodb/mongos/log Shard1 서버시작 > mkdir ~/mongodb/shard1 >./mongod --dbpath ~/mongodb/shard --port 30000 --fork --logpath ~/mongodb/shard1/log Shard2 서버시작 > mkdir ~/mongodb/shard2 >./mongod --dbpath ~/mongodb/shard --port 40000 --fork --logpath ~/mongodb/shard2/log 55

4. MongoDB 구성 4.4 Sharding 샤드설정 Shard1 과 Shard2 서버등록 (mongos 에서수행해야함 ) > mongo localhost:20000/admin MongoDB shell version: 2.6.5 connecting to: localhost:20000/admin mongos> db.runcommand({addshard:"localhost:30000"}) { "shardadded" : "shard0000", "ok" : 1 } mongos> db.runcommand({addshard:"localhost:40000"}) { "shardadded" : "shard0001", "ok" : 1 } 데이터베이스와컬렉션생성 mongos> use demo switched to db demo mongos> db.shardtest.insert({}) WriteResult({ "ninserted" : 1 }) mongos> db.shardtest.insert({}) WriteResult({ "ninserted" : 1 }) 데이터베이스와컬렉션샤딩설정 mongos> use admin switched to db admin mongos> db.runcommand({enablesharding:"demo"}) { "ok" : 1 } mongos> db.runcommand({"shardcollection":"demo.shardtest", "key":{_id:1}}) { "collectionsharded" : "demo.shardtest", "ok" : 1 } 56

4. MongoDB 구성 4.5 운영수준 Sharding 구성 운영환경에서의 Sharding 구성 가용성과안정성을높이기위해서추가적인고려사항이필요 설정서버를 3개이상으로구성 mongos 서버를복수로구성 샤드별 replica set 구성 57

4. MongoDB 구성 4.5 운영수준 Sharding 구성 다중설정서버구성 설정서버를 3 개로확장하고 mongos 실행옵션수정 다중설정서버구성 mkdir p ~/mongodb/config1 ~/mongodb/config2, ~/mongodb/config3./mongod dbpath ~/mongodb/config1 --port 10001./mongod dbpath ~/mongodb/config2 --port 10002./mongod dbpath ~/mongodb/config3 --port 10003 mongos 시작옵션 ( 다중설정서버설정 )./mongos configdb localhost:10001, localhost:10002, localhost:10003 58

4. MongoDB 구성 4.5 운영레벨 Sharding 구성 샤딩의한계 하나의청크에저장될수있는 BSON 의개수는 250,000 개이다. 하나의청크에설정할수있는불할지점의최대개수는 8,192 개이다. MongoDB 에설정할수있는샤드노드의개수는 1,000 개를목표로하고있으며현재테스트된샤드노드는 100 개이다. 59