MongoDB intro & tips
MongoDB Korea 김인범
Agenda
I. MongoDB Intro
II. MongoDB에 대해 알려진 사실들
III. MongoDB를 이용하면서 느낀 점
IV. MongoDB 모니터링
V. MongoDB 운영 Tips 별첨. MongoDB + WiredTiger
I am...
저는 김인범입니다. MongoDB Korea에서 활동하고 있습니다. 커뮤니티 소개는 기회가 된다면... MongoDB 관련 이야기를 하려 합니다.
1. MongoDB 간단 Intro
MongoDB Intro (1)
1. MongoDB Intro
• Document Oriented Database • Replication / Sharding • Multiple Transaction(CRUD) / MR
• Latest Stable Version is 3.2.4 (2016.03)
MongoDB Intro (2)
1. MongoDB Intro
• Document?
MongoDB Intro (3)
1. MongoDB Intro
• Replication / Sharding
MongoDB 주요 구성요소 (1)
1. MongoDB Intro
MongoDB 주요 구성요소 (2)
1. MongoDB Intro
mongod - 데이터를 저장, 관리 (복제 정책 적용 가능) mongos - client의 요청 받아 환경 설정 서버의 partitioning 정보를 참고해 적절한 데이터 서버로 요청을 포워딩 Config Server - sharding에 대한 환경 설정 서버 - partitioning에 대한 정보를 관리
기억할 것!
1. MongoDB Intro
mongod - 데이터를 저장 mongos - client와 mongod 서버 간 라우터 역할 Config Server - 메타 정보 관리
MongoDB 활용사례
1. MongoDB Intro
1I. MongoDB에 대해 알려진 사실들(?)
a.k.a?(1)
잘 다운되지 않나요? - 1.x ~ 2.2 release 까지는 불안정의 연속 - 상대적으로 사용이 미숙했던 것도 문제 - 3.x 진입하면서 안정성 확보
1I. MongoDB에 대해 알려진 사실들(?)
a.k.a?(2)
Locking은 언제쯤... - ~ 2.6 release : DB Level Locking - 3.0 default : Collection Level Locking - 3.0 wired Tiger : document Level Locking
1I. MongoDB에 대해 알려진 사실들(?)
a.k.a?(3)
MongoDB는 저 비용으로 구성하기에 알맞다? - 물론 초기에는 저 비용 - 하지만.. - 성능, 용량, 확장성... 다 따지면 \! \! \!
1I. MongoDB에 대해 알려진 사실들(?)
a.k.a?(4)
MongoDB가 Oracle, MySQL을 대체...? - 아니요... - 그럴리가요... - 기분 탓일거예요...
1I. MongoDB에 대해 알려진 사실들(?)
a.k.a?(5)
MongoDB가 Oracle, MySQL을 대체...? - 물론 미국에서는 Main Stream으로 진입중 - 하지만 국내에서는.... 아직 오랑캐 DB - 서로닮아가는 모습이 특징(Oracle ↔ MongoDB)
1I. MongoDB에 대해 알려진 사실들(?)
111. MongoDB를 이용하며 느낀 점
피할 수 없는 RDBMS와의 비교 – Q&A(1)
대용량 시스템 운영시 RDBMS 대비 주의할 점 - 제일 중요한 건 모니터링! (변수가 더 많음) - 그 다음 중요한 건 shard key 설정 (효과적인 shard key 설정은 서비스 데이터에 대한 이해가 충분히 있어야 함)
11I. MongoDB를 이용하며 느낀 점
피할 수 없는 RDBMS와의 비교 – Q&A(2)
대용량 시스템 운영시 RDBMS 대비 주의할 점 - 장애시 Contingency Plan이 명확해야 함 - 용량별, 시기별 확장 계획이 있다면 좋음 - collection 별로 데이터를 구분하는 습관필요
11I. MongoDB를 이용하며 느낀 점
Script 언어를 알면 유리한 MongoDB
script언어를 알면 MongoDB 활용성 ↑ - 모니터링 shell - 개인에게 특화된 function 사용 - 다양한 driver 연동
11I. MongoDB를 이용하며 느낀 점
MongoDB 를 관리하는 주체는...? (1)
MongoDB를 누가 관리할 것인가? - 개발자가 이해하기 쉬운 구조 - 하지만 ~DB가 붙고 data가 들어와서 DBA느낌 - 왠지 모니터링도 잘해야 할 것 같으니 서버가이
11I. MongoDB를 이용하며 느낀 점
MongoDB 를 관리하는 주체는...? (2)
MongoDB를 누가 관리할 것인가? - 앞서 열거한 역량을 고루 가진 운영자 - devops 성격을 가진 조직 (서비스 개발자들이 직접 운영도 수행) → flow 이해 빠르고, bug fix 더 빠름
11I. MongoDB를 이용하며 느낀 점
1V. MongoDB 모니터링
MongoDB Monitoring(1)
내부 명령어를 이용한 방법 - mongotop (≒ top ) - mongostat (≒ vmstat ) Shell Scripting의 조합(능력자 ver.)
1V. MongoDB 모니터링
MongoDB Monitoring(2)
그 외 tool
1V. MongoDB 모니터링
MongoDB Monitoring(3)
돈을 쓰게 된다면...
- Cloud Manager와 같은 Enterprise version 제품 사용 가능하지만, - 생각보다 응답시간이 오래 걸림. - 이상적인 것은 자체 개발
1V. MongoDB 모니터링
MongoDB Monitoring(4)
흥미 롭게 봤던 외부 tool(PandoraFMS)
- Open Source(GPL2) (Ent. Ver가 따로 존재) - Ent. Ver는 100 agent부터 비용이 책정됨.
1V. MongoDB 모니터링
MongoDB Monitoring(5)
흥미 롭게 봤던 외부 tool(PandoraFMS)
1V. MongoDB 모니터링
MongoDB Monitoring(6)
제가 시도해 보고 있는 방법은...
- 브라우저 / 서버 / 데이터베이스에 이르기까지 자바스크립트로 구성된 풀스택 플랫폼 - 실시간 업데이트 가능 (매번 빌드 하거나, 서버를 내렸다 올리지 않아도 자동 갱신)
1V. MongoDB 모니터링
MongoDB Monitoring(7)
제가 시도해 보고 있는 방법은...
- MongoDB의 Oplog를 이용한 Monitoring 수행 * oplog : 복제셋 형태로 운영되는 MongoDB 서버간의 동기화를 위해 DB의 변경사항을 저장하는 로그 - app 구성하기에 따라서 visualization이 가능
1V. MongoDB 모니터링
MongoDB Monitoring(8)
제가 시도해 보고 있는 방법은...
- 해결책으로서, Meteor는 data변화를 탐지하고 observer를 작동시키기 위해 oplog를 사용한다. - Meteor는 Primary를 tailing하는 Secondary 처럼 행동함
1V. MongoDB 모니터링
MongoDB Monitoring(9)
제가 시도해 보고 있는 방법은...
1V. MongoDB 모니터링
V. MongoDB 운영 Tips
Tips 1. 충분한 메모리와 SSD, 그리고 CPU!!
V. 운영 Tips
Tips 2. 성능을 고려한다면 동적 스키마를 배제할 것.
V. 운영 Tips
Tips 3. 복제는 필수지만, 샤딩은 충분히 고려해 볼 것.
V. 운영 Tips
Tips 4. 데이터에 대한 이해가 없다면, shard Key는 포기할 것.
V. 운영 Tips
Tips 5. 성능 향상을 위해 PageFault를 최소화할 수 있는 구성을 할 것.
V. 운영 Tips
Tips 6. 필드 네이밍을 짧게할수록 속도 엄~~~청 빨라짐. (Key-Value 구조에서 key가 길수록 모두 비용이 됨)
V. 운영 Tips
Tips 7. document resizing은 엄청난 overhead 발생시키므로, 더미 필드를 미리 만들어 놓는 것도 방법 중 하나.
V. 운영 Tips
Q & A
감사합니다.
[email protected] https://www.facebook.com/revolutionistK https://www.facebook.com/groups/krmug/
별첨 . MongoDB +
WiredTiger
WiredTiger
3.0 release 부터 도입된 WiredTiger
mongodb 사용시 엔진 선택 가능 (--storageEngine=“wiredTiger”)
디폴트 설정시에는 MMAPv1 엔진 사용
3.2 release부터는 WiredTiger가 디폴트!
별첨. MongoDB + WiredTiger
WiredTiger performance – (1)
MongoDB 2.6 vs 3.0
별첨. MongoDB + WiredTiger
https://www.mongodb.com/blog/post/performance-testing-mongodb-30-part-1-throughput-improvements-measured-ycsb (YCSB – Yahoo Cloud Serving Benchmark)
WiredTiger performance – (1)
MongoDB 3.0(MMAP) vs 3.0 (WT)
별첨. MongoDB + WiredTiger
https://www.mongodb.com/blog/post/performance-testing-mongodb-30-part-1-throughput-improvements-measured-ycsb (YCSB – Yahoo Cloud Serving Benchmark)
TokuMX performance
TokuMX 2.0.1 vs WiredTiger 3.0
별첨. MongoDB + WiredTiger http://benchmark-docs.readthedocs.org/en/latest/mongodb-sysbench-hppro2.html
WiredTiger vs TokuMX – Q&A
쿼리 성능 측면에서 TokuMX가 유리함 (특히 insert, update) WiredTiger : B-Tree 데이터 구조 TokuMX : Fractal tree Indexing
TokuMX는 도입시에 다양한 측면에서
테스트가 필요함(few reference)
별첨. MongoDB + WiredTiger
WiredTiger vs TokuMX – Q&A
쿼리 성능 측면에서 TokuMX가 유리함 (특히 insert, update) WiredTiger : B-Tree 데이터 구조 TokuMX : Fractal tree Indexing
별첨. MongoDB + WiredTiger
WiredTiger vs TokuMX – Q&A
B-tree vs Fractal Tree
별첨. MongoDB + WiredTiger https://www.bnl.gov/csc/seminars/abstracts/Bender_Presentation.pdf
WiredTiger vs TokuMX – Q&A
다만 TokuMX를 써보니...
CPU 과부하 문제가 발생할 수 있으며, 모니터링 & 조절 가능하다면 TokuMX 추천
TokuMX는 도입시에 다양한 측면에서 테스트가 필요함(few reference)
별첨. MongoDB + WiredTiger