Unit Four

Similar documents
Microsoft PowerPoint - NoSQL_MongoDB_1시간 [호환 모드]

NoSQL

untitled

13주-14주proc.PDF

MS-SQL SERVER 대비 기능

歯sql_tuning2

목 차

PowerPoint 프레젠테이션

Jerry Held

단답형 (26 회기출문제 ) 1. 아래와같은테이블이있을때아래의 SQL 결과에대해서 Oracle, SQL Server 순서로적으시오 TAB1 COL1 CHAR(10) COL2 CHAR(10) INSERT INTO TAB1 VALUES ('1',''); INSERT INT


Microsoft PowerPoint - Oracle Data Access Pattern.ppt

Microsoft Word - SQL튜닝_실습교재_.doc

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

3 S Q L A n t i p a t t e r n s Trees/intro/parent.sql CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, parent_id BIGINT UNSIGNED, comment TEXT

歯PLSQL10.PDF

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

10.ppt

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

예제소스는 에서다운로드하여사용하거나툴바의 [ 새쿼리 ]( 에아래의소스를입력한다. 입력후에는앞으로실습을위해서저장해둔다. -- 실습에필요한 Madang DB 와 COMPANY DB 를모두생성한다. -- 데이터베이스생성 US

결과보고서

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

Intra_DW_Ch4.PDF

Ubiqutious Pubilc Access Reference Model

RDB개요.ppt

PowerPoint Presentation

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

ETL_project_best_practice1.ppt

SQL Tuning Business Development DB

Microsoft PowerPoint - CNVZNGWAIYSE.pptx

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

CONTENTS Volume 테마 즐겨찾기 빅데이터의 현주소 진일보하는 공개 기술, 빅데이터 새 시대를 열다 12 테마 활동 빅데이터 플랫폼 기술의 현황 빅데이터, 하둡 품고 병렬처리 가속화 16 테마 더하기 국내 빅데이터 산 학 연 관

Cloud Friendly System Architecture

Oracle Database 10g: Self-Managing Database DB TSC

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

Spring Boot/JDBC JdbcTemplate/CRUD 예제

DBMS & SQL Server Installation Database Laboratory

RUCK2015_Gruter_public

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

T100MD+

untitled

160215

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

´ÙÁß Row °á°ú¸¦ ´ÜÀÏÇàÀ¸·Î Äĸ¶·Î ºÐ¸®ÇØ Ãâ·ÂÇÏ´Â ¹æ¹ý

90

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

5장 SQL 언어 Part II

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

PowerPoint Presentation

ePapyrus PDF Document

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

MySQL-Ch10

DW 개요.PDF

Mango220 Android How to compile and Transfer image to Target

제목을 입력하세요.

(Humphery Kim) RAD Studio : h=p://tech.devgear.co.kr/ : h=p://blog.hjf.pe.kr/ Facebook : h=p://d.com/hjfactory :

Web Application Hosting in the AWS Cloud Contents 개요 가용성과 확장성이 높은 웹 호스팅은 복잡하고 비용이 많이 드는 사업이 될 수 있습니다. 전통적인 웹 확장 아키텍처는 높은 수준의 안정성을 보장하기 위해 복잡한 솔루션으로 구현

MySQL-.. 1

김기남_ATDC2016_160620_[키노트].key

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

슬라이드 1

PowerPoint 프레젠테이션

LCD Display

Microsoft PowerPoint - Oracle Data Join Method.pptx [읽기 전용]

클라우드컴퓨팅확산에따른국내경제시사점 클라우드컴퓨팅확산에따른국내경제시사점 * 1) IT,,,, Salesforce.com SaaS (, ), PaaS ( ), IaaS (, IT ), IT, SW ICT, ICT IT ICT,, ICT, *, (TEL)

PowerPoint Presentation

0. Intro ORACLE 社 Oracle, My SQL, Exadata IBM 社 DB2, Informix SAP 社 ASE, IQ, ASA Microsoft 社 SQL Server Teradata 社 Teradata 공통점은? Altibase 社 Altibase

dbms_snu.PDF

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

슬라이드 1

출원국 권 리 구 분 상 태 권리번호 KR 특허 등록

비식별화 기술 활용 안내서-최종수정.indd

IPAK 윤리강령 나는 _ 한국IT전문가협회 회원으로서 긍지와 보람을 느끼며 정보시스템 활용하 자. 나는 _동료, 단체 및 국가 나아가 인류사회에 대하여 철저한 책임 의식을 가진 다. 나는 _ 활용자에 대하여 그 편익을 증진시키는데 최선을 다한다. 나는 _ 동료에 대해

ORACLE-SQL

ARMBOOT 1

2힉년미술


untitled

슬라이드 1

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

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

(72) 발명자 서진교 경기 용인시 수지구 풍덕천2동 1167 진산마을 삼성5차아파트526동 1004호 조필제 경기 용인시 풍덕천동 유스빌 401호 - 2 -

강의 개요

ESQL/C

윈도우시스템프로그래밍

금오공대 컴퓨터공학전공 강의자료

Simplify your Job Automatic Storage Management DB TSC

슬라이드 1

Slide 1

DB진흥원 BIG DATA 전문가로 가는 길 발표자료.pptx

C# Programming Guide - Types

The Self-Managing Database : Automatic Health Monitoring and Alerting

ecorp-프로젝트제안서작성실무(양식3)

最即時的Sybase ASE Server資料庫診斷工具

thesis

1217 WebTrafMon II

Microsoft Word - USB복사기.doc

Javascript.pages

슬라이드 1

Transcription:

MongoDB DB 설계패턴및성능튜닝솔루션 주종면 www.pitmongo.co.kr 010-3864-1858

발표자 : 주종면. PLAN 정보기술 / 대표컨설턴트 - 한국데이터베이스진흥원기술위원및겸임교수 - 한국 SW 기술협회겸임강사 - MongoDB Master 공인전문가 - Oracle ACE 공인전문가 - DB 설계 / 튜닝 / 컨설팅. MongoDB 공식한국사용자그룹운영자 - www.mongodb-korea.org - 현재회원수약 1,530 명 - 초 / 중급스터디그룹및심화스터디그룹운영중 - 10gen co. 엔지니어초빙기술컨퍼런스개최. 미국 10gen co. 한국공식파트너 (Training ) - MongoDB 개발자과정및 DBA 과정운영 - MongoDB 개발및모니터링국산툴개발중 ( 올챙이툴 )

- 목차 - 1 장. NoSQL 개념 2 장. Data Modeling & 설계 Pattern 3 장. MongoDB 성능튜닝솔루션

1 NoSQL 개념

IT 분야 10 대키워드 2011 년 10 대키워드 2012 년 10 대키워드 2013 년 10 대키워드 커머셜클라우드 컨슈머클라우드 & N 스크인 UX 비즈니스플랫폼 NS 스마트워크 상황인식컴퓨팅 보안 / 프라이버시 360 마켓플레이스에코시스템 비즈니스분석기술 멀티플랫폼으로의웹표준 응용프로그램수명주기관리 정보보호및보안빅데이터도입 & 활용클라우드서비스신종보안위협소셜네트워크서비스스마트홈 & 가전서비스모바일애플리케이션특허 & 지재권중요도위치기반서비스클라우드컴퓨팅확산스마트워크 HTML5 도입소셜비지니스소셜미디어 & 엔터프라이즈스마트디바이스차세대반도체 & 디스플레이오픈플랫폼콘텐츠서비스빅데이터신정부의 IT 정책 * 출처 : 한국정보화진흥원동향분석시리즈참조

* 출처 : 한국정보화진흥원동향분석시리즈참조

Big Data 솔루션 빅데이터의수집과저장기술 NoSQL MongoDB Casandra Hbase 빅데이터의추출과분산기술 Hadoop Storm Spark Kafka 빅데이터의분석및통계기술 R SAS SPSS

DBMS for NoSQL

NoSQL 제품군 1. Key-Value Database 1) Amazon s Dynamo Paper 2) Data Model : Collection of K-V pairs 3) 제품유형 : Riak, Voldemort, Tokyo* 3. Document Database 1) Lotus Notes 2) Data Model : Collection of K-V collection 3) 제품유형 : Mongo DB, Cough DB 2. BigTable Database 1) Google s BigTable paper 2) Data Model : Column Families 3) 제품유형 : Hbase, Casandra, Hypertable 4. Graph Database 1) Euler & Graph Theory 2) Data Model : nodes, rels, K-V on both 3) 제품유형 : AllegroGraph, Sones * Availablity( 유용성 ), Consistency( 일관성 ), Partitioning( 파티션닝 ) 에따른제품군구분

NoSQL 관련직무동향 참조자료 : indeed.com

MongoDB Job 동향 * 2012 년 6 월 indeed.com 통계

NoSQL 제품별평가결과 평가기준 Tokyo*Cabinet * Tokyo Tyrant Berkerly DB Memcache DB Voldemort BDB JE REDIS MongoDB Write (Small Data Set) Write (Large Data Set) Random Read (Small Data Set) Random Read (Large Data Set) Speed 일관성 Storage 효율성 Horizontal 확장성 Manageability ( 관리성 ) Stability ( 안정성 ) Community Support * 2011 년 PerfectMarket 자료참조

2 Data Modeling & 설계 Pattern

MongoDB 주요특징 1) Humongos 라는회사의제품명이었으며현재 10gen 으로 회사명이변경되었다. 2) JSON Type 의데이터저장구조를제공한다. { ename : 주종면 } 3) CRUD(Create, Read, Update, Delete) 위주의다중트랜잭션처리도가능하며인덱스를빠른데이터검색이가능하다. 4) MapReduce( 분산 / 병렬처리 ) 기능을제공한다. 5) Sharding( 분산 )/Replica( 복제 ) 기능을제공한다. 6) Memory Mapping 기술을기반으로 Big Data 처리에탁월한성능을제공한다.

Collection 생성 > db.createcollection ( emp, { capped : false, size:8192 }); { "ok" : 1 } capped : 해당공간이모두사용되면다시처음부터 size 재사용할수있는데이터구조를생성할때 : 해당 Collection의최초생성크기지정가능 > db.emp.validate() Collection 의현재상태및정보분석 { "ns" : "test.emp", "firstextent" : "0:61000 ns:test.emp", "lastextent" : "0:61000 ns:test.emp", "extentcount" : 1, "datasize" : 0, "nrecords" : 0, "lastextentsize" : 8192,

논리적구조 Database Collection Extent Data Record Emp Collection Data Record Data Record Data Record Data Record Data Record Data Record Length xnext xprev Document { _id: 1,. } Length xnext xprev Document { _id: 2,. } Length xnext xprev Document { _id: 3,. } Length xnext xprev Document { _id: 4,. } Length xnext xprev Document { _id: 5,. } Length xnext xprev Document { _id: 6,. } (Ex) db.createcollection ( emp", {capped:false, size:100000});

MongoDB 설계주요특징 1) MongoDB는데이터의중복을허용하며비정형화된설계를지향한다. 2) MongoDB는중첩데이터구조를설계할수있기때문에불필요한 JOIN을최소화시킬수있다. 3) MongoDB는 N:M 관계구조를설계할수있고구축할수있다. 4) MongoDB는 Schema 중심으로설계하지않는다.

OODBMS & RDBMS 주문 주문항목 주문 주문항목 강한관계 (Strong Association) 부서 사원 부서 사원 약한관계 (Weak Association) Object Oriented Database 관계 (Relationship) Relationship Database

주문전표 주문번호 고객명 2012-09-012345 담당사원 Magee Womansport 주문날짜 2012-09-20 선적날짜 2012-09-20 선적여부 주문총금액 601,100 지불방법현금 30 일이내 Y 항목번호 제품명 단가 주문수량 금액 1 Bunny Boot 135 500 67,500 2 Pro Ski Boot 380 400 152,000 3 Bunny Ski Pole 14 500 7,000 4 Pro Ski Pole 36 400 14,400 5 Himalaya Bicycle 582 600 349,200 6 New Air Pump 20 450 9,000 7 Prostar 10Pd.Weight 8 250 2,000 SUMMIT2

RDBMS SQL Insert into s_ord ( ord_id, customer_no, emp_name, total, payment_type, order_filled) Values ( 2012-09-012345, "Wonman & Sports", 주문테이블정보 "Magee", 601100, Credit, Y ); 주문상세테이블정보 Insert into s_ord_item ( ord_id, item_id, product_name, price) Values ( 2012-09-012345, 1, Bunny Boots, 135, 500, 67000 ); Insert into s_ord_item ( ord_id, item_id, product_name, price) Values ( 2012-09-012345, 2, Pro Ski Boots, 380, 400, 152000 );

RDBMS 논리적구조 주문 Table Extent Block(Page) 2012-09-012345, Wonman & Sports, Magee,601100, Credit,Y... 2012-09-012346, Man & Sports, Magee,34200, Credit,N... 2012-09-012347, Adidas, Magee,23100, Credit,Y... 2012-09-012348, Soleman, Magee,43100, Credit,N... 주문상세 2012-09-012345, 1,Bunny Boots, 135, 500, 67000 2012-09-012345, 2,Pro Ski Boots, 380,400, 152000

ORDBMS (Nested Table) 주문테이블 201209012345. 1, Bunny Boots, 135, 500,67000 2, Pro Ski Boots, 380,400,152000 3,. 4,. 201209012346. 1, 1 Create type product_detail as object (item_no number(2), p_name varchar(50), s_price number(8), qty number(5), amount number(10)); Create type order_detail As Table of product_detail; 2 2, 3, 4, 5, 3 Create table order (order_no char(12), ename varchar2(10),. order_content order_detail) Nested Table order_content;

ORDBMS (Varray) 주문테이블 201209012345. 1, Bunny Boots, 135, 500,67000 2, Pro Ski Boots, 380,400,152000 3,. 4,. 201209012346. 1, 1 Create type product_detail as object (item_no number(2), p_name varchar(50), s_price number(8), qty number(5), amount number(10)); 2 Create type order_detail As varray(90) of product_detail; 2, 3, 4, 5, 3 Create table order (order_no char(12), ename varchar2(10),. order_content order_detail) VARRAY order_content;

Embedded Document db.ord.insert( { ord_id : "2012-09-012345", 주문공통정보 customer_name : "Wonman & Sports", emp_name : "Magee", total : "601100", payment_type : "Credit", order_filled : "Y", item_id : [ { item_id : "1", product_name : "Bunny Boots", item_price : "135", 주문상세정보 qty : "500", price : "67000 }, { item_id : "2", product_name : "Pro Ski Boots", item_price : "380", qty : "400", price : "152000 } ] } )

Extend Document db.ord.insert( { ord_id : "2012-09-012345", customer_name : "Wonman & Sports", emp_name : "Magee", total : "601100", payment_type : "Credit", order_filled : "Y" }); 주문공통정보 db.ord.update( { ord_id : "2012-09-012345"}, { $set : { item_id : [ { item_no : "1", product_name : "Bunny Boots", item_price : "135", qty : "500", price : "67000" }, { item_no : "2", product_name : "Pro Ski Boots", item_price : "380", qty : "400", price : "152000" } ] } } ); 주문상세정보

MongoDB 데이터저장구조 (Embedded) Length xnext xprev 주문 / 주문상세 Collection {({ Data Record Document ord_id : 2012-09-012345", customer_name : "Wonman & Sports", emp_name : "Magee", total : 601100, payment_type : Credit, order_filled : Y, item_id : [ { item_id : 1, product_name : Bunny Boots, item_price : 135 qty : 500, price : 67000 }, { item_id : 2, product_name : Pro Ski Boots, item_price : 380, qty : 400, price : 152000 } ] }} * 장점 1) Query 가단순해지고 JOIN 문을실행할필요가없기때문에 Document 단위의데이터저장에효과적이며빠른성능이보장된다. 2) 데이터보안에효과적이다. * 단점 1) Embedded 되는 Document 의크기는최대 16MB 범위에서가능하다. 2) Embedded 되는 Document 가존재하지않는 Collection 에는적합하지않다.

Manual Linking > db.ord.insert( { ord_id : "2012-09-012345", customer_name : "Wonman & Sports", emp_name : "Magee", total : "601100", payment_type : "Credit", order_filled : Y } ) 주문공통정보 > o = db.ord.findone( { "ord_id" : "2012-09-012345" } ) { "_id" : ObjectId("4fc21223e6cd4d2aadb38622"),. > db.ord_detail.insert( { ord_id : "2012-09-012345", item_id : [ { item_id : "1", product_name : "Bunny Boots", item_price : "135", qty : "500", price : 67000 }, { item_id : "2", product_name : "Pro Ski Boots", 주문상세정보 > db.ord_detail.findone({ordid_id : o._id}) item_price : "380", qty : "400", price : "152000 } ], ordid_id : ObjectId("4fc21223e6cd4d2aadb38622 ) } )

DBRef 함수 > x = { ord_id : "2012-09-012345", customer_name : "Wonman & Sports", emp_name : "Magee", total : "601100", payment_type : "Credit", order_filled : "Y" } 주문공통정보 db.ord.save(x) > db.ord.find({"ord_id" : "2012-09-012345"}) { "_id" : ObjectId("4fc30d0efab534f9e9253477"), > db.ord_detail.save({ ord_id : "2012-09-012345", item_id : [ { item_id : "1", product_name : "Bunny Boots", item_price : "135", qty : "500", price : "67000" }, { item_id : "2", product_name : "Pro Ski Boots", 주문상세정보 item_price : "380", qty : "400", price : "152000" } ], ordid_id : [ new DBRef ("ord", x._id) ] } )

MongoDB 데이터저장구조 (Linking) 주문 Collection 주문상세 Collection Data Record Data Record Document Document Length xnext xprev {( ObjectId("4fc21223e6cd4d2aadb38622") ord_id : 2012-09-012345, customer_name : "Wonman & Sports", emp_name : "Magee", total : 601100, payment_type : Credit, order_filled : Y }} Length xnext xprev {({ ObjectId("4fc21417e6cd4d2aadb38624") ord_id : 2012-09-012345, item_id : [ { tem_id : 1, product_name : Bunny Boots, item_price : 135, qty : 500, price : 67000 }, { item_id : 2, product_name : Pro Ski Boots, item_price : 380 qty : 400, price : 152000 }, ObjectId("4fc21223e6cd4d2aadb38622") }} * 장점 * 단점 1) 별도의논리적구조로저장되기때문에 Docum ent 크기에제한받지않는다. 2) 비니지스룰상별도로처리되는데이터구조에적합하다. 1) 매번논리적구조간에 Linking 해야하기때문에 Embedded 보다성능이늦다. 2) Collection 개수가증가하며관리비용이많이든다.

계층형데이터구조 KING Empno=7839 Empno=7782 CLARK JONES BLAKE MILLER SCOTT FORD ALLEN WARD MARTIN TURNER JAMES Empno=7934 ADAMS SMITH

Self Reference Join (RDBMS) Empno ename mgr ------------------------------------------------- 7839 KING 7698 BLAKE 7839 7782 CLARK 7839 7566 JONES 7839 7654 MARTIN 7698. 7902 FORD 7566. 7876 ADAMS 7788 7934 MILLER 7782 b.ename ---------------- KING KING KING BLAKE. JONES. JIMMY CLARK SELECT a.empno, a.ename, a.mgr, b.ename FROM emp a, emp b WHERE a.mgr = b.empno

Ancestor Reference (MongoDB) > db.emp.insert({ "_id" : "7839", "name" : "KING", "job" : "PRESIDENT" }) > db.emp.insert({ "_id" : "7782", "name" : "CLARK", "job" : "ANALYSIST", "PARENT" : "7839" } ) > db.emp.insert({ "_id" : "7934", "name" : "MILLER", "job" : "CLERK", "ANCESTORS" : 7839, "PARENT" : "7782" } ) > db.emp.find({"ancestors" : "7839"}) { "_id" : "7934", "name" : "MILLER", "job" : "CLERK", "ANCESTORS" : [ "7939", "7782" ], "PARENT" : "7782" } > db.emp.find({"parent" : 7839"}) { "_id" : "7782", "name" : "CLARK", "job" : "ANALYSIST", "PARENT" : "7839" }

Inheritence (OODBMS) Engine Frame Tire CAR 상속 (Inheritance) Engine Frame Tire Auto-Door BUS TAXI Engine Frame Tire Lamp Gas_Tank CREATE TYPE car AS OBJECT (engine NUMBER(9) Primary Key, frame VARCHAR(30), tire VARCHAR(30)) NOT FINAL; CREATE TYPE bus UNDER car_typ (auto_door VARCHAR(30) FINAL; CREATE TYPE taxi UNDER car_typ (lamp VARCHAR(30), gas_tank VARCHAR(30) FINAL;

Inheritence (RDBMS) CAR Engine Frame Tire Car_Type BUS Auto_door TAXI Lamp Gas_tank CREATE TABLE car (engine INTEGER(9) NOT NULL, frame CHAR VARYING(30) NOT NULL, tire CHAR VARYING(30) NOT NULL, car_type CHAR VARYING(4) CHECK IN( BUS, TAXI ), auto_door INTEGER(2), lamp CHAR VARYING(30), gas_tank CHAR VARYING(30) Constraint bus_pk PRIMARY KEY (engine, frame, tire); Engine Frame Tire Car_Type Auto_Door Lamp Gas_Tank A AX_1 R16 TAXI 1 1 B AK_3 R18 BUS 2 A AX_2 R18 TAXI 2 2

Inheritence (MongoDB) > db.createcollection ( car ); > db.car.insert({ engine : A, frame : AX_1, tire : R16, car_type : TAXI, lamp : 1, gas_tank : 1 }); > db.car.insert({ engine : B, frame : AK_3, tire : R18, car_type : BUS, auto_door: 2 }); > db.car.insert({ engine : A, frame : AX_2, tire : R18, car_type : TAXI, lamp : 2, gas_tank : 2 }); > db.employees.find(); {"_id" : ObjectId("4f00574f81a153d6857897d2"), engine" : A, "ename" : AX_1, tire : R16, car_type : TAXI, lamp : 1, gas_tank : 1 }); } Engine: A Frame: AX_1 Tire: R16 Car_type: TAXI Lamp: 1 Gas_tank: 1 Engine: B Frame: AK_3 Tire: R18 Car_type: BUS Auto_door: 1 Engine: A Frame: AX_1 Tire: R18 Car_type: TAXI Lamp: 2 Gas_tank: 2

N:M 관계 (RDBMS) 제품 카테고리 ASUS EP121 Note Book Samsung eslate 7 Slate PC ipad 3 Tablet

N:M 관계 (MongoDB) db.category.insert({"cname" : "Note Book", "pname1" : "Asus EP121 M50" } ); db.category.insert({"cname" : "Tablet", "pname1" : "Asus EP121 M50", "pname2" : "ipad3"} ); db.category.insert({"cname" : "SlatePC", "pname1" : "Asus EP121 M50", "pname2" : "Samsung Slate 7" }); db.product.insert({ "pname" : "Asus EP121 M50", "cname1" : "Note Book", "cname2" : "Tablet", "cname3" : "SlatePC" } ); db.product.insert({ "pname" : "Samsung Slate 7", "cname1" : "SlatePC" } ); db.product.insert({ "pname" : "ipad3", "cname1" : "Tablet" } );

3 MongoDB 성능튜닝솔루션

성능튜닝솔루션 1) 적절한분석을통해최적의컬렉션구조를설계하라. (Rich Document, Linking, Extent 크기등 ) 2) 빅데이터의빠른검색을위해인덱스를적절히활용하라. ( Hint 함수와 Explain 함수를이용한실행계획적용 ) 3) MongoDB의 Map/Reduce 또는 Aggregation 기능을적절히활용하고 Hadoop과연동을통한 Map/Reduce도고려하라. 4) MongoDB의대표적분산처리솔루션인 Sharding 시스템의적용을충분히고려하라 5) MongoDB는메모리매핑을이용한데이터처리기술을사용하기때문에충분한메모리영역을확보하라.

INDEX 종류 Non-Unique/Unique Index Background Index Covered Index DropDups Index Sparse Index TTL Index GeoSpatial Index

Database Profiler 1) Profiler 환경설정 > db.setprofilinglevel(2); {"was" : 0, "slowms" : 100, "ok" : 1} "was" 는이전설정정보 > db.getprofilinglevel() 현재설정되어있는정보 2 0 : Off, 1 : default > 100 ms 2 : System 에서발생한모든정보 2) Profiler 환경분석결과및상태확인 > db.system.profile.find( { millis : { $gt : 5 } } ) 실행시간이 5 초이상소요된문장검색

3) Hint 절과실행계획 > db.emp.find({eno : 1101}).hint({eno:1}).explain(); { "cursor" : "BtreeCursor eno_1", Index Scan "nscanned" : 1, 검색조건을만족하는항목수 "nscannedobjects" : 1, 검색대상이된 Collection 수 "n" : 1, 조건을만족하는 Document 수 "millis" : 0, 조건을검색하는데소요된시간 "nyields" : 0, Read Lock이발생했던횟수 "nchunkskips" : 0, Shard에서 Chunk Migration된 Doc. 수 "ismultikey" : false, 다중 key 인덱스가사용되면 True "indexonly" : false, Index 만사용하여 Query했으면 True "indexbounds" : { "eno" : [ [ 1101, 1101 ] ] } } > db.emp.find().hint({$natural:1}).explain(); { "cursor" : "BasicCursor", Full Collection Scan "nscanned" : 3, "nscannedobjects" : 3, "millis" : 0, "indexonly" : false, "indexbounds" : { } }

> db.employees.find ({ deptno : 10, ename : "CLARK" }).explain() { "cursor" : "BtreeCursor deptno_1_ename_1", "nscanned" : 1, "nscannedobjects" : 1, "n" : 1, "millis" : 0, "nyields" : 0, "nchunkskips" : 0, "ismultikey" : false, "indexonly" : true, "indexbounds" : { "deptno" : [ [ 10, 10 ] ], "ename" : [ [ "CLARK", "CLARK" ] ] } } Covered 인덱스만으로조건검색

> db.employees.ensureindex({ comm : 1 }, { sparse : true }) > db.employees.find().sort({comm : -1}) { "_id" : ObjectId("5019dd5b2bffb7e0a9073be7"), "empno" : 7654, "deptno" : 30 } { "_id" : ObjectId("5019dd5b2bffb7e0a9073be5"), "empno" : 7521, deptno" : 30 } { "_id" : ObjectId("5019dd5b2bffb7e0a9073be4"), "empno" : 7499, "deptno" : 30 } > db.employees.dropindex({ comm : 1 }) > db.employees.find().sort({comm : -1}) SPARSE 인덱스삭제후전체검색을수행하면모든 Document 들이출력된다. {"_id":objectid("5019dd5b2bffb7e0a9073be7"),"empno" : 7654,, "deptno" : 30 } {"_id":objectid("5019dd5b2bffb7e0a9073be5"), "empno" : 7521, "deptno" : 30 }.. {"_id":objectid("5019dd5c2bffb7e0a9073bef"), "empno" : 7902,, "deptno" : 10 }

빅데이터추출및분석 1) MongoDB의 Map/Reduce 기능을이용한빅데이터의추출 2) MongoDB의 Aggregation Framework을이용한빅데이터의추출 3) MongoDB와 Hadoop의 Map-Reduce를연동한빅데이터의추출

1) MongoDB Map/Reduce 기능을이용 Map() Group() emit() MongoDB sort() Finalize() Reduce(k, v)

Oracle & Mongo Query 비교 SELECT deptno, job, SUM(sal) AS msum, <- 부서별급여합계 COUNT(*) AS recs, <- 부서별인원수 AVG(sal) AS mavg, <- 평균급여금액 MIN(sal) AS mmin, <- 최소급여액 MAX(CASE <- 최대급여액 WHEN sal > 1000 THEN sal END) AS mmax FROM emp WHERE (hiredate > 01-01-1981' AND hiredate < 31-12-1983') AND sal > 800 GROUP BY deptno, job HAVING min(sal) > 0 ORDER BY recs DESC 대상 Table 과 Collection 검색조건 검색 Column 또는 Field Aggregate 또는 Procedure Logic Aggregate 또는 Procedure Logic Aggregate Filter 또는 Sorting db.runcommand ({ mapreduce: "emp", query: { hiredate : { $gt : '01-01-1981', $lt : '31-12-1983' }, sal : { $gt : 800 } }, map: function() { emit( { d1 : this.deptno, d2 : this.job }, { msum: this.sal, recs: 1, mmin: this.sal, mmax: this.sal > 1000 } ); }, reduce: function(key, vals) { var ret = { msum:0, recs:0, mmin:0, mmax:0 }; for (var i=0 ; i < vals.length; i++) { ret.msum += vals[i].msum; ret.recs += vals[i].recs; if (vals[i].mmin < ret.mmin) ret.mmin=vals[i].mmin; if (vals[i].mmax > 1000) ret.mmax=vals[i].mmax; } return ret; }, finalize: function(key, val) { val.mavg=val.msum/val.recs; return val; }, out: "result1", verbose: true }); db.result1.find( { "value.mmin : { $gt:0}}).sort({ "value.recs : 1});

2) Aggregation Framework을이용한데이터처리 - Aggregation을위해 MongoDB의 Map/Reduce를반드시사용해야한다. - Aggregation Framework는데이터추출에최적화되어만들어진기능이다. - 실시간 Aggregation은 SQL의 Group By절과유사하다. - MongoDB Map/Reduce는 JavaScript로생성되어있다. - JavaScript는외부데이터처리에제한적이다.

(1) Aggregation Framework

3) MongoDB 와 Hadoop 을연동한데이터처리 MongoDB Input Split Data Split Data Split Data Split Data Map(k,v,ctx) combine(k,v) Partitioner(k) sort(keys) MongoDB Reduce(k, v)

(1) Map Function in Python

(2) Reduce Function in Python

(3) Run in Hadoop Map/Reduce

(4) Map/Reduce 결과

Sharding System Shard Server Config Server Mongod Mongod Mongod Mongod Route Server (MongoS) Mongo.exe Mongo.exe

MongoDB Architecture Resident Area (Working Set) Mapped Cache Area Virtual Memory Area Virtual Area * 최초약 440 MB Journal Area 38 MB ( 최초 22MB) 80 MB 160MB 160 MB Client Process (Mongo.exe) Mapped(Data) file Server Process (Mongod.exe) 60 s 마다동기화 100 ms 마다 100 mb 저장 Journal file SALES. NS (16MB) SALES.0 (64MB) Prealloc.0 (1GB) Prealloc.1 (1GB) Prealloc.2 (1GB)

MongoDB 관련 OX 퀴즈 질문정답 MongoDB는기존의관계형데이터베이스를완전히대체할수있다. MongoDB는사용자에의해 COMMIT과 ROLLBACK 할수있다 MongoDB는비정형 DB이기때문에설계가요구되지않는다. MongoDB는 CPU보다고사양의메모리가요구된다. MongoDB의 Map/Reduce를통해충분한성능이보장된다. MongoDB의 Read 성능은 Write 성능보다훨씬빠르다. MongoDB는라이센스가없다. X O X O X X X

2013년관련정보 정부교육 관련서적 www.dbguide.net www.pitmongo.co.kr 커뮤니티교육 www.mongodb-korea.org