제 13회 JCO 네번째 발표, MongoDB, DB설계 패턴 및 성능 튜닝 솔루션
* 발표자 : 주종면
* MongoDB 공식 한국 사용자 그룹 운영자
- 사이트 : http://mongodb-korea.org
* NoSQL 개념
* IT 기술전망 : 클라우드, 빅데이터에서 많은 이야기가 거론됨
* Bic Data 솔루션
- 빅데이터의 수집과 저장기술 오늘의 소개 주제
- NoSQL, MongoDB, Casandra, Hbase
- 빅데이터의 추출과 분산기술
- Hadoop, Storm, Spark, Kafka
- 빅데이터의 분석 및 통계기술
- R, SAS, SPSS
* DBMS for NoSQL : 150여개
- NoSQL 제품군 : 유용성Availability, 일관성Consistency, 파티셔닝Partioning
- Key-Value Database
- Big Table Database
- Document Database
- Graph Database
* NoSQL 제품별 평가결과
- MongoDB : 평가기준에서 전체적으로 좋은 성능의 제품이 나타남
- Community Support 지원
* Data Modeling & 설계 패턴
* MongoDB주요 특징
- Humongos라는 회사의 제품명
- JSON 타입의 데이터 저장구조를 제공
- CRUD 위주의 다중 트랜잭션 처리가 가능하고 인덱스를 통한 빠른 데이터 검색이 가능
- 분산/병렬처리MapReduce 기능을 제공
- 분산Sharding/복제Replica 기능을 제공
- RDBMS 에서는 대용량의 데이터 처리가 어려워질 수 있다
- Memory Mapping 기술을 기반으로 Big Data 처리에 탁월한 성능 제공
* Collection 생성 : 데이터 저장 가능공간 생성
- 비정형화된 데이터
- db.createCollection("emp", {capped:false, size:8192}); 8k -> 이 공간을 넘어서면 새로운 확장을 하기 위해서 대기상태가 자주 발생하게 된다.
- db.emp.validate(); Collection의 현재 상태 및 정보분석
* 성능을 개선하기 위해서는 구조에 대한 이해가 필요하다.
* 논리적 구조
- 입력과정에서 생기는 extent의 사이즈에 대한 고려가 필요하군.
* MongoDB 설계 주요 특징
1. MongoDB는 데이터의 중복을 허용하며 비정형화된 설계를 지향한다.
2. MongoDB는 중첩 데이터 구조를 설계할 수 있기 때문에 불필요한 JOIN을 최소화시킬 수 있다.
3. MongoDB는 N:M 관계 구조를 설계할 수 있고 구축할 수 있다.
4. MongoDB는 Schema 중심으로 설계하지 않는다.
* OODBMS vs RDBMS
- Embedded Document
- Extend Document : 먼저 Root Document를 넣고, Root Document에다가 Document 추가
- Linking Document
* 설계패턴
* MongoDB 데이터 저장 구조(Embedded)
- 장점
1. Query가 단순해지고 Join 문을 실행할 필요가 없기 때문에 Document 단위의 데이터 저장에 효과적이며 빠른 성능이 보장된다.
2. 데이터 보안에 효과적이다.
- 단점
1. Embedded 되는 Document의 크기는 최대 10MB 내외
* Manual Linking
- RDBMS : relationship을 통해 제한
- OODBMS :
- 장점
1. 별도의 논리적 구조로 저장되기 때문에 Document 크기에 제한받지 않는다.
2. 비즈니스룰 상 별도로 처리되는 데이터 구조에 적합하다.
- 단점
1. 매번 논리적 구조간에 Linking해야 하기 때문에 Embedded보다 성능이 늦다.
2. Collection 갯수가 증가하며 관리비용이 많이 든다.
* 만들고자 하는 데이터의 패턴을 고려하여 적합한 설계패턴을 고려해야한다.
- 설계에는 답이 없다.
* Self reference join
* 계층형 데이터 구조
- ANCESTOR, PARENT 를 이용하여 계층혀 데이터 구조 설계 가능
* Inheritence(OODBMS) : 상속
- 데이터가 저장되는 시점에서 필드와 크기가 저장되기 때문에, 별도로 표현할 필요가 없다.
* MongoDB 성능 튜닝 솔루션
* 적절한 분석을 통해 최적의 컬렉션 구조를 설계하라.
* 빅 데이터의 빠른 검색을 위해 인덱스를 적절히 활용하라.
- 다양한 인덱스 종류
- TTL index : 2.0 에서 추가됨
- GeoSpatial Index : 좌표정보(위도, 경도, 온도)
* MongoDB의 분산Sharding/복제Replica를 적절히 활용
* Database profiler
- 성능 저하 요소를 찾아 튜닝
* Hint 절과 실행계획
- DB에서 말하는 Hint는 뭐지? +_+)?
* 빅데이터 추출 및 분석
- MongoDB의 Map/Reduce 기능을 이용한 빅데이터 추출
- Javascript function으로 구현
- Aggregation Framework 를 이용해서 기본적인 추출 가능
- MongoDB 와 Hadoop을 연동한 데이터 처리
- Map/Reduce in Python
* Sharding
* MongoDB Architecture
- 좋은 시스템보다는 충분한 메모리 용량이 있을 때 성능만족!
* 정리
딱, 'DB 전문가'의 느낌이 나는 발표였다. ^^; 몽고DB를 사용할 때 주의해야할 요소요소들을 콕콕 찝어주었다. NoSQL 관련 DB 중에서 가장 높은 선호도와 기술안정성을 가지고 있는 것이 MongoDB기에 많은 사람들이 NoSQL 관련 DB를 고려할 때 우선적으로 떠올리는 DB이기도 하다. 몽고DB 도입시 고려사항들에 대해서 상세히 잘 이야기해주셨다.
내가 'MongoDB'를 사용하고 경험할 수 있을 때가 언제 오려나~?