SlideShare a Scribd company logo
1 of 32
Modeling
Facebook mongoDB Korea 김동한
MongoDB
• Document Oriented Storage
• JSON 스타일의 Document
• 간결하고 강력한 동적 스키마 구성
• Full Index Support
• 어느 속성에나 인덱스 설정 가능
• Replication & HighAvailability
• LAN과 WAN을 이용한 미러링과 빠른 성능
Introduction
ROW vs JSON
번호 가수명 본명 출생지 소속 연관_01 연관_02
1 태양 동영배 서울 YG 빅뱅 G드래곤
var json = {
가수명 : "태양",
본명 : "동영배",
출생지 : "서울",
소속 : "YG",
연관 : ["빅뱅","G드래곤"]
}
Introduction
mongoDB 구조
{JSON} COLLECTION
DATABASE
Introduction
Terminology
RDBMS mongoDB
Database Database
Table Collection
Index Index
Row Document
Column Field
Join Embedding & Linking
Primary Key Object _id
Introduction
$lookup
Modeling
Modeling Basic
3 Types Document Storage Model
RDBMS ERD
테이블_가수
PK 1001
이름 태양
본명 동영배
소속 YG
테이블_앨범
PK 2001
FK 1001
앨범명 RISE
발매일 2014.06.03
테이블_곡리스트
PK FK 트랙번호 곡명 작곡자 길이
3001 2001 1 Intro Peejay 01:30
3002 2001 2 눈, 코, 입 Teddy 04:12
3003 2001 3 새벽한시 Teddy 02:11
테이블_그룹
PK 4001
그룹명 빅뱅
소속 YG
Modeling Basic
The JSON is The Schema
{
"앨범명":"RISE",
"가수명":"태양",
"발매일":"2014.06.03",
"곡리스트":[ {"트랙번호":"1","곡명":"Intro (RISE)","작곡자":"Peejay","작사자":["타블로","Choice37","태양"],"길이":"01:30"},
{"트랙번호":"2","곡명":"눈코입","작곡자":"Teddy","작사자":"Teddy","길이":"04:12"},
{"트랙번호":"3","곡명":"새벽한시 (1AM)","작곡자":["Teddy","Choice37","Boys Noise"]
,"작사자":"Teddy","길이":"02:11"},
{"트랙번호":"4","곡명":"Stay With Me","작곡자":"G-드래곤","작사자":"G-드래곤","길이":"04:40"},
{"트랙번호":"5","곡명":"아름다워","작곡자":["Teddy","태양","PK","DEE P"],"작사자":"Teddy","길이":"03:27"},
{"트랙번호":"6","곡명":"링가 링가","작곡자":"G-드래곤","작사자":["G-드래곤","토끼"],"길이":"06:11"}],
"그룹":"빅뱅",
"연관검색어":["빅뱅","G-드래곤","양현석","탑"]
}
Modeling Basic
RDBMS vs mongoDB
가수
이름
본명
앨범
앨범명
발매일자
리스트
트랙번호
곡목
소속사
이름
대표자명
그룹
이름
데뷔일자
작곡자
이름
본명
앨범
앨범명
발매일자
가수
이름
본명
리스트
트랙번호
곡목
소속사
이름
대표자명
Modeling Basic
Modeling Step
• 규모 판별 및 예측
• 주요 항목 도출
1단계
분석
• 사용 언어 확정
• 언어별 객체 설계
2단계
설계
• CRUD 개발
• 데이터 전환
• 관리 및 튜닝
3단계
개발 및 운영
Modeling Basic
3 Types
One to Few
One to Many
One to Squilions
Modeling
One to Few
• 하나 당 적은 수
• 한번에 모든 정보를 조회
• UPDATE PUSH를 사용하여 UPSERT
• 내포된 데이터를 다른 데이터와 조합
하여 사용불가
• Sub-document 항목 Update를 위해
선 [_id] 채번을 따로 해야 함
• 마스터성 데이터
Ex) 회원정보, 소셜관계 등
ModelingType I
회원정보
이름
• 홍길동
고향
• 한양어딘가
주소
1
• 국가:조선
• 도시:한양
• 구:마포구
• 지번:상일동 121-2
2
• 국가:대한민국
• 도시:서울
• 구:마포구
• 도로명:상일동 마포길 11
One to Few
• JSON
// 회원
{
name: "홍길동",
hometown: "한양 어딘가",
addresses:
[
{ street: '상일동 121-2', city: '한양', cc: '조선' },
{ streetname: '상일동 마포길 11', city:'서울', cc: '대한민국' }
]
}
ModelingType I
One to Few
• Script – 하나의 주소만 가지고 오기
// first
db.회원.find( {name:"홍길동"}, { addresses: { $slice: 1 } } );
// last
db.회원.find( {name:"홍길동"}, { addresses: { $slice: -1 } } );
ModelingType I
One to Many
• 하나 당 많은 수
• Mother – Child
• Child 에 ObjectID 를 저장
• DB레벨이 아닌 어플리케이션
레벨에서 JOIN 하여 두 문서를
연결
• 각각의 문서를 독자적으로 처리
하여 쉽게 추가/갱신/삭제
• N to N 구조로 확장도 쉽다.
PC
RAM
CPU
HDD
ModelingType I
PARTS
PRODUCT
One to Many
// parts
{ _id: ObjectID('AAAA'),
partno: '123-aff-456',
parttype:'cpu'
name: “Intel Xeon",
qty: 102,
price: 323.22}
{ _id: ObjectID('DEFO'),
partno: '678-xad-123',
parttype:'ram'
name: "Sec DDR4 Memory",
qty: 1321,
price: 99.99
}
// products
{
name: 'WC-3020',
manufacturer: 'MongoPC',
catalog_number: 1234,
parts: [
ObjectID('AAAA'),
ObjectID('DEFO'),
ObjectID('EJFW')
]
}
• JSON
ModelingType I
One to Many
• Script – 조인 처리
// category_number를 기준으로 product를 찾음
product = db.products.findOne({catalog_number: 1234});
// product의 parts 배열에 담긴 모든 parts를 찾음
product_parts = db.parts.find(
{_id: { $in : product.parts } }
).toArray() ;
ModelingType II
One to Squilions
• 하나 당 무지 많은 수
• Mother – Child 라고 할 수 없을 정도로 많은 Child 존재
• 서버에 남는 로그 데이터의 경우 IP 또는 호스트명으로 로그가 쌓임
• mongoDB는 단일 문서의 크기가 16MB를 넘지 못하는 제한이 발생
• Sub-document 에 최소한의 데이터만 저장
ModelingType III
One to Squilions
// host
{
_id : ObjectID('AAAB'),
name : 'goofy.example.com',
ipaddr : '127.66.66.66'
}
// logmsg
{
time : ISODate("2015-09-
02T09:10:09.032Z"),
message : 'cpu is on fire!',
host: ObjectID('AAAB')
}
• JSON
ModelingType III
One to Squilions
• Script – 조인 처리
// 부모 host 문서를 검색
host = db.hosts.findOne({ipaddr : '127.66.66.66'});
// 최근 5000개의 로그를 부모 host의 ObjectID를 이용해 검색
last_5k_msg = db.logmsg.find({host: host._id})
.sort({time : -1})
.limit(5000)
.toArray();
ModelingType III
+3 Types
Two Way Referencing
Many to One & One to Many Denormalization
One to Squilions, Denormalization
Modeling
Two Way Referencing
// person
{
_id: ObjectID("AAF1"),
name: "Koala",
tasks [ // task 문서 참조
ObjectID("ADF9"),
ObjectID("AE02"),
ObjectID("AE73")
]
}
// tasks
{
_id: ObjectID("ADF9"),
description:
"Practice Jiu-jitsu",
due_date: ISODate(
"2015-10-01"),
owner: ObjectID("AAF1")
// person 문서 참조
}
• JSON
Modeling +Type I
Many to One, Denormalization
• JSON
Modeling +Type II
// products
{
name: 'WC-3020',
manufacturer: 'MongoPC',
catalog_number: 1234,
parts: [
ObjectID('AAAA'),
ObjectID('DEFO'),
ObjectID('EJFW')
]
}
// products
{
name: 'WC-3020',
manufacturer: 'MongoPC',
catalog_number: 1234,
parts: [
{ id: ObjectID('AAAA'), name: 'Awesometel
100Ghz CPU' },
{ id: ObjectID('DEFO'), name: 'AwesomeSize
100TB SSD' },
{ id: ObjectID('EJFW'), name: 'Magical Mouse' }
]
}
One to Many, Denormalization
• JSON
Modeling +Type II
// parts
{ _id: ObjectID('AAAA'),
partno: '123-aff-456',
parttype:'cpu'
name: “Intel Xeon",
qty: 102,
price: 323.22}
// parts
{ _id: ObjectID('AAAA'),
partno: '123-aff-456',
parttype:'cpu'
name: “Intel Xeon",
productname: “MongoPC",
product_catalog_number: 1234,
qty: 102,
price: 323.22}
}
One to Squilions, Denormalization
• JSON
Modeling +Type III
// logmsg
{
time : ISODate(
"2015-09-02T09:10:09.032Z"),
message : 'cpu is on fire!',
host: ObjectID('AAAB')
}
// logmsg
{
time : ISODate(
"2015-09-02T09:10:09.032Z"),
message : 'cpu is on fire!',
host: ObjectID('AAAB'),
ipaddr : '127.66.66.66'
}
Modeling Principles
• Unwind is MAGIC!
• 특별한 이유가 없다면 문서에 모두 포함 시킬 것
• 객체에 직접 접근할 필요가 있다면 문서에서 제외 시켜야 함
• Max Document Size 16M
• 배열이 지나치게 크면 안됨
• noSQL is noJOIN
• 어플리케이션에서 JOIN 하는 것을 피하지 말 것
• H/W is cheap one.
• 비정규화는 I/O를 체크해서 CRUD 시 WAIT 발생을 피할 것
• 어플리케이션 레벨에서 어떻게 조회/갱신 할 것인지 고려할 것
Modeling
Operation Tips
• Monitoring ( htop + nmon + mongostat in tmux )
NMONHTOP
mongostat
Operation Tips
• System analysis with NMON
nmon -f -s 60 -c 1440
Operation Tips
• Index Down Sizing
{ _id: ObjectID('AAAA'),
partno: '123-aff-456',
parttype:'cpu'
name: “Intel Xeon Processor E5-4669 v3 (45M Cache, 2.10 GHz)",
qty: 102,
price: 323.22}
{ _id:‘EBDSJDSAH6123AASDLKHJASDFHASDHLK',
partno: '123-aff-456',
parttype:'cpu'
name: “Intel Xeon Processor E5-4669 v3 (45M Cache, 2.10 GHz)",
qty: 102,
price: 323.22}
MD5
parttype+name
Operation Tips
• 기타 주의할 점과 하고 싶은 말
• 인덱스를 구성하는 KEY는 TYPE 가 한결 같이 유지 되어야 한다
ex) IMEI_NO : Character Type 으로 지정 “123456789123”
IP Address : 4 Byte > long 으로 변환 “1.1.1.1”-> 16843009
• 속도가 문제라면 동적 스키마 구성은 잊어라
• UPSERT가 자주 일어나는 문서라면 초기 적재시에 미리 생성
ex) 70분짜리 CD 라면 1초길이의 음악이 4200개 들어갈테니…
• mongoDB 모든 것을 해결?
RDBMS 또는 다른 noSQL 과 혼용하여 사용
ex) REDIS, Spark RDD, Infinispan 등
• 다다익램 (64bit CPU/OS)
• SSD를 꼭 쓰세요! 두번! 세번 쓰세요!!!
• Replication/Sharding/HA-DR/Fail-Over no Comment 입니다.
감사합니다.
https://www.facebook.com/groups/krmug
참조
• 6 Rules of Thumb for MongoDB Schema Design
• http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-
mongodb-schema-design-part-1
• FIFA 온라인 3의 MongoDB 사용기
• http://www.slideshare.net/blahstyle/jwkim-ndc-mongodbfinal
• The MongoDB Strikes Back / MongoDB 의 역습
• http://www.slideshare.net/lqez/the-mongodb-strikes-back-mongodb
• 클라우드 춘추전국시대 서버 개발자 생존기
• http://www.slideshare.net/iFunFactory/ss-55961504

More Related Content

What's hot

MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용흥배 최
 
Mongo db 2.x to 3.x
Mongo db 2.x to 3.xMongo db 2.x to 3.x
Mongo db 2.x to 3.xInBum Kim
 
[나만의블로그개발하기] 03 글쓰고 읽기, 리스트 보기
[나만의블로그개발하기] 03 글쓰고 읽기, 리스트 보기[나만의블로그개발하기] 03 글쓰고 읽기, 리스트 보기
[나만의블로그개발하기] 03 글쓰고 읽기, 리스트 보기설리번 프로젝트
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나종민 김
 
[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑neuroassociates
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리Junyi Song
 
9장. 문서 데이터베이스
9장. 문서 데이터베이스9장. 문서 데이터베이스
9장. 문서 데이터베이스kidoki
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민종민 김
 
Mongo db 활용 가이드 ch7
Mongo db 활용 가이드 ch7Mongo db 활용 가이드 ch7
Mongo db 활용 가이드 ch7주영 송
 
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XpressEngine
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리흥배 최
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문SeungHyun Eom
 
Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Minchul Jung
 
Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Jeong-gyu Kim
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼Cheol Kang
 
JSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSPJSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSPMyungjin Lee
 
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.jsHeeJung Hwang
 

What's hot (20)

MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용
 
Mongo db 2.x to 3.x
Mongo db 2.x to 3.xMongo db 2.x to 3.x
Mongo db 2.x to 3.x
 
[나만의블로그개발하기] 03 글쓰고 읽기, 리스트 보기
[나만의블로그개발하기] 03 글쓰고 읽기, 리스트 보기[나만의블로그개발하기] 03 글쓰고 읽기, 리스트 보기
[나만의블로그개발하기] 03 글쓰고 읽기, 리스트 보기
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나
 
[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리
 
9장. 문서 데이터베이스
9장. 문서 데이터베이스9장. 문서 데이터베이스
9장. 문서 데이터베이스
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민
 
Mongo db 활용 가이드 ch7
Mongo db 활용 가이드 ch7Mongo db 활용 가이드 ch7
Mongo db 활용 가이드 ch7
 
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문
 
Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작
 
JSON with C++ & C#
JSON with C++ & C#JSON with C++ & C#
JSON with C++ & C#
 
Rapid json tutorial
Rapid json tutorialRapid json tutorial
Rapid json tutorial
 
Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
 
JSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSPJSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSP
 
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
 

Viewers also liked

자기 일은 스스로 하자
자기 일은 스스로 하자자기 일은 스스로 하자
자기 일은 스스로 하자SeokJu Na
 
인지주의 피피티 Pdf
인지주의 피피티 Pdf인지주의 피피티 Pdf
인지주의 피피티 Pdf견지 심
 
넝쿨째 굴러온 김성모
넝쿨째 굴러온 김성모넝쿨째 굴러온 김성모
넝쿨째 굴러온 김성모Hyun-woo Park
 
그릇된 팬심의 어긋난 결말
그릇된 팬심의 어긋난 결말그릇된 팬심의 어긋난 결말
그릇된 팬심의 어긋난 결말Hyun-woo Park
 
일본 핀테크 시장
일본 핀테크 시장일본 핀테크 시장
일본 핀테크 시장智嫄 尹
 
NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준영준 박
 
채용도 서비스다. 2013 스마트스터디 채용 과정에 대한 지원자 지표 분석.
채용도 서비스다. 2013 스마트스터디 채용 과정에 대한 지원자 지표 분석.채용도 서비스다. 2013 스마트스터디 채용 과정에 대한 지원자 지표 분석.
채용도 서비스다. 2013 스마트스터디 채용 과정에 대한 지원자 지표 분석.민석 김
 
[분석]서울시 2030 나홀로족을 위한 라이프 가이드북
[분석]서울시 2030 나홀로족을 위한 라이프 가이드북[분석]서울시 2030 나홀로족을 위한 라이프 가이드북
[분석]서울시 2030 나홀로족을 위한 라이프 가이드북BOAZ Bigdata
 
사업계획서슬라이드 프라이머 엔턴십용
사업계획서슬라이드 프라이머 엔턴십용사업계획서슬라이드 프라이머 엔턴십용
사업계획서슬라이드 프라이머 엔턴십용DONGSU KANG
 
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)Eunseok Yi
 
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요Eunseok Yi
 
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화Eunseok Yi
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기NAVER D2
 
넷플릭스의 문화 : 자유와 책임 (한국어 번역본)
넷플릭스의 문화 : 자유와 책임 (한국어 번역본)넷플릭스의 문화 : 자유와 책임 (한국어 번역본)
넷플릭스의 문화 : 자유와 책임 (한국어 번역본)Doran Hwang
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksSlideShare
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShareSlideShare
 

Viewers also liked (16)

자기 일은 스스로 하자
자기 일은 스스로 하자자기 일은 스스로 하자
자기 일은 스스로 하자
 
인지주의 피피티 Pdf
인지주의 피피티 Pdf인지주의 피피티 Pdf
인지주의 피피티 Pdf
 
넝쿨째 굴러온 김성모
넝쿨째 굴러온 김성모넝쿨째 굴러온 김성모
넝쿨째 굴러온 김성모
 
그릇된 팬심의 어긋난 결말
그릇된 팬심의 어긋난 결말그릇된 팬심의 어긋난 결말
그릇된 팬심의 어긋난 결말
 
일본 핀테크 시장
일본 핀테크 시장일본 핀테크 시장
일본 핀테크 시장
 
NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준
 
채용도 서비스다. 2013 스마트스터디 채용 과정에 대한 지원자 지표 분석.
채용도 서비스다. 2013 스마트스터디 채용 과정에 대한 지원자 지표 분석.채용도 서비스다. 2013 스마트스터디 채용 과정에 대한 지원자 지표 분석.
채용도 서비스다. 2013 스마트스터디 채용 과정에 대한 지원자 지표 분석.
 
[분석]서울시 2030 나홀로족을 위한 라이프 가이드북
[분석]서울시 2030 나홀로족을 위한 라이프 가이드북[분석]서울시 2030 나홀로족을 위한 라이프 가이드북
[분석]서울시 2030 나홀로족을 위한 라이프 가이드북
 
사업계획서슬라이드 프라이머 엔턴십용
사업계획서슬라이드 프라이머 엔턴십용사업계획서슬라이드 프라이머 엔턴십용
사업계획서슬라이드 프라이머 엔턴십용
 
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)
NDC 2012 이은석 - 게임회사 취업특강 (커리어세션)
 
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요
 
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기
 
넷플릭스의 문화 : 자유와 책임 (한국어 번역본)
넷플릭스의 문화 : 자유와 책임 (한국어 번역본)넷플릭스의 문화 : 자유와 책임 (한국어 번역본)
넷플릭스의 문화 : 자유와 책임 (한국어 번역본)
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Similar to mongoDB 3 type modeling in production

Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) InBum Kim
 
Mongodb and spatial
Mongodb and spatialMongodb and spatial
Mongodb and spatialJiyoon Kim
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)Jaikwang Lee
 
MongoDB 도입을 위한 제언
MongoDB 도입을 위한 제언MongoDB 도입을 위한 제언
MongoDB 도입을 위한 제언DongHan Kim
 
MongoDB 도입을 위한 제언 @krmug
MongoDB 도입을 위한 제언 @krmug MongoDB 도입을 위한 제언 @krmug
MongoDB 도입을 위한 제언 @krmug Ha-Yang(White) Moon
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들Kivol
 
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptxYeongKiKim1
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석Daeyong Shin
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)Sang Don Kim
 
니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트효준 강
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
Node.js + Express + MongoDB
Node.js + Express + MongoDBNode.js + Express + MongoDB
Node.js + Express + MongoDBVincent Park
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS LambdaSeungho Kim
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQLJAEGEUN YU
 
Introduction to mongo db
Introduction to mongo dbIntroduction to mongo db
Introduction to mongo dbMinho Kim
 
Webframeworks angular js 세미나
Webframeworks angular js 세미나Webframeworks angular js 세미나
Webframeworks angular js 세미나WebFrameworks
 
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)NAVER D2
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 

Similar to mongoDB 3 type modeling in production (20)

Javascript
JavascriptJavascript
Javascript
 
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
 
Mongodb and spatial
Mongodb and spatialMongodb and spatial
Mongodb and spatial
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
 
MongoDB 도입을 위한 제언
MongoDB 도입을 위한 제언MongoDB 도입을 위한 제언
MongoDB 도입을 위한 제언
 
MongoDB 도입을 위한 제언 @krmug
MongoDB 도입을 위한 제언 @krmug MongoDB 도입을 위한 제언 @krmug
MongoDB 도입을 위한 제언 @krmug
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
 
니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
Node.js + Express + MongoDB
Node.js + Express + MongoDBNode.js + Express + MongoDB
Node.js + Express + MongoDB
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS Lambda
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
 
Introduction to mongo db
Introduction to mongo dbIntroduction to mongo db
Introduction to mongo db
 
Webframeworks angular js 세미나
Webframeworks angular js 세미나Webframeworks angular js 세미나
Webframeworks angular js 세미나
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 

Recently uploaded

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and AdoptionSeung-chan Baeg
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'Hyundai Motor Group
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Recently uploaded (7)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption[Terra] Terra Money: Stability and Adoption
[Terra] Terra Money: Stability and Adoption
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

mongoDB 3 type modeling in production

  • 2. MongoDB • Document Oriented Storage • JSON 스타일의 Document • 간결하고 강력한 동적 스키마 구성 • Full Index Support • 어느 속성에나 인덱스 설정 가능 • Replication & HighAvailability • LAN과 WAN을 이용한 미러링과 빠른 성능 Introduction
  • 3. ROW vs JSON 번호 가수명 본명 출생지 소속 연관_01 연관_02 1 태양 동영배 서울 YG 빅뱅 G드래곤 var json = { 가수명 : "태양", 본명 : "동영배", 출생지 : "서울", 소속 : "YG", 연관 : ["빅뱅","G드래곤"] } Introduction
  • 5. Terminology RDBMS mongoDB Database Database Table Collection Index Index Row Document Column Field Join Embedding & Linking Primary Key Object _id Introduction $lookup
  • 6. Modeling Modeling Basic 3 Types Document Storage Model
  • 7. RDBMS ERD 테이블_가수 PK 1001 이름 태양 본명 동영배 소속 YG 테이블_앨범 PK 2001 FK 1001 앨범명 RISE 발매일 2014.06.03 테이블_곡리스트 PK FK 트랙번호 곡명 작곡자 길이 3001 2001 1 Intro Peejay 01:30 3002 2001 2 눈, 코, 입 Teddy 04:12 3003 2001 3 새벽한시 Teddy 02:11 테이블_그룹 PK 4001 그룹명 빅뱅 소속 YG Modeling Basic
  • 8. The JSON is The Schema { "앨범명":"RISE", "가수명":"태양", "발매일":"2014.06.03", "곡리스트":[ {"트랙번호":"1","곡명":"Intro (RISE)","작곡자":"Peejay","작사자":["타블로","Choice37","태양"],"길이":"01:30"}, {"트랙번호":"2","곡명":"눈코입","작곡자":"Teddy","작사자":"Teddy","길이":"04:12"}, {"트랙번호":"3","곡명":"새벽한시 (1AM)","작곡자":["Teddy","Choice37","Boys Noise"] ,"작사자":"Teddy","길이":"02:11"}, {"트랙번호":"4","곡명":"Stay With Me","작곡자":"G-드래곤","작사자":"G-드래곤","길이":"04:40"}, {"트랙번호":"5","곡명":"아름다워","작곡자":["Teddy","태양","PK","DEE P"],"작사자":"Teddy","길이":"03:27"}, {"트랙번호":"6","곡명":"링가 링가","작곡자":"G-드래곤","작사자":["G-드래곤","토끼"],"길이":"06:11"}], "그룹":"빅뱅", "연관검색어":["빅뱅","G-드래곤","양현석","탑"] } Modeling Basic
  • 10. Modeling Step • 규모 판별 및 예측 • 주요 항목 도출 1단계 분석 • 사용 언어 확정 • 언어별 객체 설계 2단계 설계 • CRUD 개발 • 데이터 전환 • 관리 및 튜닝 3단계 개발 및 운영 Modeling Basic
  • 11. 3 Types One to Few One to Many One to Squilions Modeling
  • 12. One to Few • 하나 당 적은 수 • 한번에 모든 정보를 조회 • UPDATE PUSH를 사용하여 UPSERT • 내포된 데이터를 다른 데이터와 조합 하여 사용불가 • Sub-document 항목 Update를 위해 선 [_id] 채번을 따로 해야 함 • 마스터성 데이터 Ex) 회원정보, 소셜관계 등 ModelingType I 회원정보 이름 • 홍길동 고향 • 한양어딘가 주소 1 • 국가:조선 • 도시:한양 • 구:마포구 • 지번:상일동 121-2 2 • 국가:대한민국 • 도시:서울 • 구:마포구 • 도로명:상일동 마포길 11
  • 13. One to Few • JSON // 회원 { name: "홍길동", hometown: "한양 어딘가", addresses: [ { street: '상일동 121-2', city: '한양', cc: '조선' }, { streetname: '상일동 마포길 11', city:'서울', cc: '대한민국' } ] } ModelingType I
  • 14. One to Few • Script – 하나의 주소만 가지고 오기 // first db.회원.find( {name:"홍길동"}, { addresses: { $slice: 1 } } ); // last db.회원.find( {name:"홍길동"}, { addresses: { $slice: -1 } } ); ModelingType I
  • 15. One to Many • 하나 당 많은 수 • Mother – Child • Child 에 ObjectID 를 저장 • DB레벨이 아닌 어플리케이션 레벨에서 JOIN 하여 두 문서를 연결 • 각각의 문서를 독자적으로 처리 하여 쉽게 추가/갱신/삭제 • N to N 구조로 확장도 쉽다. PC RAM CPU HDD ModelingType I PARTS PRODUCT
  • 16. One to Many // parts { _id: ObjectID('AAAA'), partno: '123-aff-456', parttype:'cpu' name: “Intel Xeon", qty: 102, price: 323.22} { _id: ObjectID('DEFO'), partno: '678-xad-123', parttype:'ram' name: "Sec DDR4 Memory", qty: 1321, price: 99.99 } // products { name: 'WC-3020', manufacturer: 'MongoPC', catalog_number: 1234, parts: [ ObjectID('AAAA'), ObjectID('DEFO'), ObjectID('EJFW') ] } • JSON ModelingType I
  • 17. One to Many • Script – 조인 처리 // category_number를 기준으로 product를 찾음 product = db.products.findOne({catalog_number: 1234}); // product의 parts 배열에 담긴 모든 parts를 찾음 product_parts = db.parts.find( {_id: { $in : product.parts } } ).toArray() ; ModelingType II
  • 18. One to Squilions • 하나 당 무지 많은 수 • Mother – Child 라고 할 수 없을 정도로 많은 Child 존재 • 서버에 남는 로그 데이터의 경우 IP 또는 호스트명으로 로그가 쌓임 • mongoDB는 단일 문서의 크기가 16MB를 넘지 못하는 제한이 발생 • Sub-document 에 최소한의 데이터만 저장 ModelingType III
  • 19. One to Squilions // host { _id : ObjectID('AAAB'), name : 'goofy.example.com', ipaddr : '127.66.66.66' } // logmsg { time : ISODate("2015-09- 02T09:10:09.032Z"), message : 'cpu is on fire!', host: ObjectID('AAAB') } • JSON ModelingType III
  • 20. One to Squilions • Script – 조인 처리 // 부모 host 문서를 검색 host = db.hosts.findOne({ipaddr : '127.66.66.66'}); // 최근 5000개의 로그를 부모 host의 ObjectID를 이용해 검색 last_5k_msg = db.logmsg.find({host: host._id}) .sort({time : -1}) .limit(5000) .toArray(); ModelingType III
  • 21. +3 Types Two Way Referencing Many to One & One to Many Denormalization One to Squilions, Denormalization Modeling
  • 22. Two Way Referencing // person { _id: ObjectID("AAF1"), name: "Koala", tasks [ // task 문서 참조 ObjectID("ADF9"), ObjectID("AE02"), ObjectID("AE73") ] } // tasks { _id: ObjectID("ADF9"), description: "Practice Jiu-jitsu", due_date: ISODate( "2015-10-01"), owner: ObjectID("AAF1") // person 문서 참조 } • JSON Modeling +Type I
  • 23. Many to One, Denormalization • JSON Modeling +Type II // products { name: 'WC-3020', manufacturer: 'MongoPC', catalog_number: 1234, parts: [ ObjectID('AAAA'), ObjectID('DEFO'), ObjectID('EJFW') ] } // products { name: 'WC-3020', manufacturer: 'MongoPC', catalog_number: 1234, parts: [ { id: ObjectID('AAAA'), name: 'Awesometel 100Ghz CPU' }, { id: ObjectID('DEFO'), name: 'AwesomeSize 100TB SSD' }, { id: ObjectID('EJFW'), name: 'Magical Mouse' } ] }
  • 24. One to Many, Denormalization • JSON Modeling +Type II // parts { _id: ObjectID('AAAA'), partno: '123-aff-456', parttype:'cpu' name: “Intel Xeon", qty: 102, price: 323.22} // parts { _id: ObjectID('AAAA'), partno: '123-aff-456', parttype:'cpu' name: “Intel Xeon", productname: “MongoPC", product_catalog_number: 1234, qty: 102, price: 323.22} }
  • 25. One to Squilions, Denormalization • JSON Modeling +Type III // logmsg { time : ISODate( "2015-09-02T09:10:09.032Z"), message : 'cpu is on fire!', host: ObjectID('AAAB') } // logmsg { time : ISODate( "2015-09-02T09:10:09.032Z"), message : 'cpu is on fire!', host: ObjectID('AAAB'), ipaddr : '127.66.66.66' }
  • 26. Modeling Principles • Unwind is MAGIC! • 특별한 이유가 없다면 문서에 모두 포함 시킬 것 • 객체에 직접 접근할 필요가 있다면 문서에서 제외 시켜야 함 • Max Document Size 16M • 배열이 지나치게 크면 안됨 • noSQL is noJOIN • 어플리케이션에서 JOIN 하는 것을 피하지 말 것 • H/W is cheap one. • 비정규화는 I/O를 체크해서 CRUD 시 WAIT 발생을 피할 것 • 어플리케이션 레벨에서 어떻게 조회/갱신 할 것인지 고려할 것 Modeling
  • 27. Operation Tips • Monitoring ( htop + nmon + mongostat in tmux ) NMONHTOP mongostat
  • 28. Operation Tips • System analysis with NMON nmon -f -s 60 -c 1440
  • 29. Operation Tips • Index Down Sizing { _id: ObjectID('AAAA'), partno: '123-aff-456', parttype:'cpu' name: “Intel Xeon Processor E5-4669 v3 (45M Cache, 2.10 GHz)", qty: 102, price: 323.22} { _id:‘EBDSJDSAH6123AASDLKHJASDFHASDHLK', partno: '123-aff-456', parttype:'cpu' name: “Intel Xeon Processor E5-4669 v3 (45M Cache, 2.10 GHz)", qty: 102, price: 323.22} MD5 parttype+name
  • 30. Operation Tips • 기타 주의할 점과 하고 싶은 말 • 인덱스를 구성하는 KEY는 TYPE 가 한결 같이 유지 되어야 한다 ex) IMEI_NO : Character Type 으로 지정 “123456789123” IP Address : 4 Byte > long 으로 변환 “1.1.1.1”-> 16843009 • 속도가 문제라면 동적 스키마 구성은 잊어라 • UPSERT가 자주 일어나는 문서라면 초기 적재시에 미리 생성 ex) 70분짜리 CD 라면 1초길이의 음악이 4200개 들어갈테니… • mongoDB 모든 것을 해결? RDBMS 또는 다른 noSQL 과 혼용하여 사용 ex) REDIS, Spark RDD, Infinispan 등 • 다다익램 (64bit CPU/OS) • SSD를 꼭 쓰세요! 두번! 세번 쓰세요!!! • Replication/Sharding/HA-DR/Fail-Over no Comment 입니다.
  • 32. 참조 • 6 Rules of Thumb for MongoDB Schema Design • http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for- mongodb-schema-design-part-1 • FIFA 온라인 3의 MongoDB 사용기 • http://www.slideshare.net/blahstyle/jwkim-ndc-mongodbfinal • The MongoDB Strikes Back / MongoDB 의 역습 • http://www.slideshare.net/lqez/the-mongodb-strikes-back-mongodb • 클라우드 춘추전국시대 서버 개발자 생존기 • http://www.slideshare.net/iFunFactory/ss-55961504