52
MongoDB intro & tips MongoDB Korea 김인범

Mongo db intro & tips

Embed Size (px)

Citation preview

Page 1: Mongo db intro & tips

MongoDB intro & tips

MongoDB Korea 김인범

Page 2: Mongo db intro & tips

Agenda

I. MongoDB Intro

II. MongoDB에 대해 알려진 사실들

III. MongoDB를 이용하면서 느낀 점

IV. MongoDB 모니터링

V. MongoDB 운영 Tips 별첨. MongoDB + WiredTiger

Page 3: Mongo db intro & tips

I am...

저는 김인범입니다. MongoDB Korea에서 활동하고 있습니다. 커뮤니티 소개는 기회가 된다면... MongoDB 관련 이야기를 하려 합니다.

Page 4: Mongo db intro & tips

1. MongoDB 간단 Intro

Page 5: Mongo db intro & tips

MongoDB Intro (1)

1. MongoDB Intro

• Document Oriented Database • Replication / Sharding • Multiple Transaction(CRUD) / MR

• Latest Stable Version is 3.2.4 (2016.03)

Page 6: Mongo db intro & tips

MongoDB Intro (2)

1. MongoDB Intro

• Document?

Page 7: Mongo db intro & tips

MongoDB Intro (3)

1. MongoDB Intro

• Replication / Sharding

Page 8: Mongo db intro & tips

MongoDB 주요 구성요소 (1)

1. MongoDB Intro

Page 9: Mongo db intro & tips

MongoDB 주요 구성요소 (2)

1. MongoDB Intro

mongod - 데이터를 저장, 관리 (복제 정책 적용 가능) mongos - client의 요청 받아 환경 설정 서버의 partitioning 정보를 참고해 적절한 데이터 서버로 요청을 포워딩 Config Server - sharding에 대한 환경 설정 서버 - partitioning에 대한 정보를 관리

Page 10: Mongo db intro & tips

기억할 것!

1. MongoDB Intro

mongod - 데이터를 저장 mongos - client와 mongod 서버 간 라우터 역할 Config Server - 메타 정보 관리

Page 11: Mongo db intro & tips

MongoDB 활용사례

1. MongoDB Intro

Page 12: Mongo db intro & tips

1I. MongoDB에 대해 알려진 사실들(?)

Page 13: Mongo db intro & tips

a.k.a?(1)

잘 다운되지 않나요? - 1.x ~ 2.2 release 까지는 불안정의 연속 - 상대적으로 사용이 미숙했던 것도 문제 - 3.x 진입하면서 안정성 확보

1I. MongoDB에 대해 알려진 사실들(?)

Page 14: Mongo db intro & tips

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에 대해 알려진 사실들(?)

Page 15: Mongo db intro & tips

a.k.a?(3)

MongoDB는 저 비용으로 구성하기에 알맞다? - 물론 초기에는 저 비용 - 하지만.. - 성능, 용량, 확장성... 다 따지면 \! \! \!

1I. MongoDB에 대해 알려진 사실들(?)

Page 16: Mongo db intro & tips

a.k.a?(4)

MongoDB가 Oracle, MySQL을 대체...? - 아니요... - 그럴리가요... - 기분 탓일거예요...

1I. MongoDB에 대해 알려진 사실들(?)

Page 17: Mongo db intro & tips

a.k.a?(5)

MongoDB가 Oracle, MySQL을 대체...? - 물론 미국에서는 Main Stream으로 진입중 - 하지만 국내에서는.... 아직 오랑캐 DB - 서로닮아가는 모습이 특징(Oracle ↔ MongoDB)

1I. MongoDB에 대해 알려진 사실들(?)

Page 18: Mongo db intro & tips

111. MongoDB를 이용하며 느낀 점

Page 19: Mongo db intro & tips

피할 수 없는 RDBMS와의 비교 – Q&A(1)

대용량 시스템 운영시 RDBMS 대비 주의할 점 - 제일 중요한 건 모니터링! (변수가 더 많음) - 그 다음 중요한 건 shard key 설정 (효과적인 shard key 설정은 서비스 데이터에 대한 이해가 충분히 있어야 함)

11I. MongoDB를 이용하며 느낀 점

Page 20: Mongo db intro & tips

피할 수 없는 RDBMS와의 비교 – Q&A(2)

대용량 시스템 운영시 RDBMS 대비 주의할 점 - 장애시 Contingency Plan이 명확해야 함 - 용량별, 시기별 확장 계획이 있다면 좋음 - collection 별로 데이터를 구분하는 습관필요

11I. MongoDB를 이용하며 느낀 점

Page 21: Mongo db intro & tips

Script 언어를 알면 유리한 MongoDB

script언어를 알면 MongoDB 활용성 ↑ - 모니터링 shell - 개인에게 특화된 function 사용 - 다양한 driver 연동

11I. MongoDB를 이용하며 느낀 점

Page 22: Mongo db intro & tips

MongoDB 를 관리하는 주체는...? (1)

MongoDB를 누가 관리할 것인가? - 개발자가 이해하기 쉬운 구조 - 하지만 ~DB가 붙고 data가 들어와서 DBA느낌 - 왠지 모니터링도 잘해야 할 것 같으니 서버가이

11I. MongoDB를 이용하며 느낀 점

Page 23: Mongo db intro & tips

MongoDB 를 관리하는 주체는...? (2)

MongoDB를 누가 관리할 것인가? - 앞서 열거한 역량을 고루 가진 운영자 - devops 성격을 가진 조직 (서비스 개발자들이 직접 운영도 수행) → flow 이해 빠르고, bug fix 더 빠름

11I. MongoDB를 이용하며 느낀 점

Page 24: Mongo db intro & tips

1V. MongoDB 모니터링

Page 25: Mongo db intro & tips

MongoDB Monitoring(1)

내부 명령어를 이용한 방법 - mongotop (≒ top ) - mongostat (≒ vmstat ) Shell Scripting의 조합(능력자 ver.)

1V. MongoDB 모니터링

Page 26: Mongo db intro & tips

MongoDB Monitoring(2)

그 외 tool

1V. MongoDB 모니터링

Page 27: Mongo db intro & tips

MongoDB Monitoring(3)

돈을 쓰게 된다면...

- Cloud Manager와 같은 Enterprise version 제품 사용 가능하지만, - 생각보다 응답시간이 오래 걸림. - 이상적인 것은 자체 개발

1V. MongoDB 모니터링

Page 28: Mongo db intro & tips

MongoDB Monitoring(4)

흥미 롭게 봤던 외부 tool(PandoraFMS)

- Open Source(GPL2) (Ent. Ver가 따로 존재) - Ent. Ver는 100 agent부터 비용이 책정됨.

1V. MongoDB 모니터링

Page 29: Mongo db intro & tips

MongoDB Monitoring(5)

흥미 롭게 봤던 외부 tool(PandoraFMS)

1V. MongoDB 모니터링

Page 30: Mongo db intro & tips

MongoDB Monitoring(6)

제가 시도해 보고 있는 방법은...

- 브라우저 / 서버 / 데이터베이스에 이르기까지 자바스크립트로 구성된 풀스택 플랫폼 - 실시간 업데이트 가능 (매번 빌드 하거나, 서버를 내렸다 올리지 않아도 자동 갱신)

1V. MongoDB 모니터링

Page 31: Mongo db intro & tips

MongoDB Monitoring(7)

제가 시도해 보고 있는 방법은...

- MongoDB의 Oplog를 이용한 Monitoring 수행 * oplog : 복제셋 형태로 운영되는 MongoDB 서버간의 동기화를 위해 DB의 변경사항을 저장하는 로그 - app 구성하기에 따라서 visualization이 가능

1V. MongoDB 모니터링

Page 32: Mongo db intro & tips

MongoDB Monitoring(8)

제가 시도해 보고 있는 방법은...

- 해결책으로서, Meteor는 data변화를 탐지하고 observer를 작동시키기 위해 oplog를 사용한다. - Meteor는 Primary를 tailing하는 Secondary 처럼 행동함

1V. MongoDB 모니터링

Page 33: Mongo db intro & tips

MongoDB Monitoring(9)

제가 시도해 보고 있는 방법은...

1V. MongoDB 모니터링

Page 34: Mongo db intro & tips

V. MongoDB 운영 Tips

Page 35: Mongo db intro & tips

Tips 1. 충분한 메모리와 SSD, 그리고 CPU!!

V. 운영 Tips

Page 36: Mongo db intro & tips

Tips 2. 성능을 고려한다면 동적 스키마를 배제할 것.

V. 운영 Tips

Page 37: Mongo db intro & tips

Tips 3. 복제는 필수지만, 샤딩은 충분히 고려해 볼 것.

V. 운영 Tips

Page 38: Mongo db intro & tips

Tips 4. 데이터에 대한 이해가 없다면, shard Key는 포기할 것.

V. 운영 Tips

Page 39: Mongo db intro & tips

Tips 5. 성능 향상을 위해 PageFault를 최소화할 수 있는 구성을 할 것.

V. 운영 Tips

Page 40: Mongo db intro & tips

Tips 6. 필드 네이밍을 짧게할수록 속도 엄~~~청 빨라짐. (Key-Value 구조에서 key가 길수록 모두 비용이 됨)

V. 운영 Tips

Page 41: Mongo db intro & tips

Tips 7. document resizing은 엄청난 overhead 발생시키므로, 더미 필드를 미리 만들어 놓는 것도 방법 중 하나.

V. 운영 Tips

Page 42: Mongo db intro & tips

Q & A

Page 43: Mongo db intro & tips

감사합니다.

[email protected] https://www.facebook.com/revolutionistK https://www.facebook.com/groups/krmug/

Page 44: Mongo db intro & tips

별첨 . MongoDB +

WiredTiger

Page 45: Mongo db intro & tips

WiredTiger

3.0 release 부터 도입된 WiredTiger

mongodb 사용시 엔진 선택 가능 (--storageEngine=“wiredTiger”)

디폴트 설정시에는 MMAPv1 엔진 사용

3.2 release부터는 WiredTiger가 디폴트!

별첨. MongoDB + WiredTiger

Page 46: Mongo db intro & tips

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)

Page 47: Mongo db intro & tips

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)

Page 49: Mongo db intro & tips

WiredTiger vs TokuMX – Q&A

쿼리 성능 측면에서 TokuMX가 유리함 (특히 insert, update) WiredTiger : B-Tree 데이터 구조 TokuMX : Fractal tree Indexing

TokuMX는 도입시에 다양한 측면에서

테스트가 필요함(few reference)

별첨. MongoDB + WiredTiger

Page 50: Mongo db intro & tips

WiredTiger vs TokuMX – Q&A

쿼리 성능 측면에서 TokuMX가 유리함 (특히 insert, update) WiredTiger : B-Tree 데이터 구조 TokuMX : Fractal tree Indexing

별첨. MongoDB + WiredTiger

Page 51: Mongo db intro & tips

WiredTiger vs TokuMX – Q&A

B-tree vs Fractal Tree

별첨. MongoDB + WiredTiger https://www.bnl.gov/csc/seminars/abstracts/Bender_Presentation.pdf

Page 52: Mongo db intro & tips

WiredTiger vs TokuMX – Q&A

다만 TokuMX를 써보니...

CPU 과부하 문제가 발생할 수 있으며, 모니터링 & 조절 가능하다면 TokuMX 추천

TokuMX는 도입시에 다양한 측면에서 테스트가 필요함(few reference)

별첨. MongoDB + WiredTiger