Mongo db intro & tips

Preview:

Citation preview

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

감사합니다.

inbum85@gmail.com 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)

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