1. MongoDB 튜닝 방법

* MongoDB 튜닝

- 데이터 베이스 튜닝이 필요한 시점

: 설계와 사용자의 패턴이 달라졌을 경우

: 잘못된 설계일 경우

: 데이터가 축적되거나 장비의 노후화 일 경우

- 데이터 튜닝방법

: 데이터 모델 튜닝

: 질의 튜닝

: 아키텍쳐 튜닝

: 인스턴스 튜닝

: 하드웨어 튜닝

* MongoDB 튜닝

: 가장 쉬운 방법은 하드웨어를 업그레이드하는 하드웨어 튜닝

: 데이터 모델이나, 질의 튜닝은 비지니스 모델에 대한 깊은 이해를 필요로 하는 어려운 튜닝 방법

: 또한 데이터 마이그래이션도 동반하기 때문에 라이브 모드에서 쉬운 결정이 아님.

: 아키텍쳐 튜닝이나 인스턴스 튜닝은 실 서비스 단계에서 선택하기에 어려운 점이 많음

: 실행중이기 때문에, 타이밍이나 소요되는 시간을 감안해야 함.

* 데이터 모델 튜닝

: 초기에 설계한 데이터 모델이 제대로 성능을 발휘하지 못할 때 필요한 조치

: 설계미흡, 예측하지 못한 데이터 입력, 용도 변경에 인함.

: 가장 알맞는 데이터 모델을 가지고 있어야 함.

: 최초 컬랙션 생성시 기본 익스텐트 크기가 할당됨

: 너무 작으면 쓰기 작업이 발생할 때 새로운 익스텐트를 할당 받을 때마다 지연이 발생

: RDBMS에서도 발생함

: 초당 몇만건 이상되는 빅데이터처리를 위해서라면 미리 예측해서 지정해야 한다/

: MongoDB의 Document 자료구조

: 데이터를 중첩하여 Embedding형태로 구성하는 것을 추천한다.

: 하지만, 데이터의 밀접도가 낮을 경우 Linking방식으로 설계하는 것을 고려해야 한다.

: MongoDB도 빠른 검색을 위한 인덱스 시스템을 가지고 있음

: 백그라운드 인덱스 타입으로 생성이 가능함

: insert마다 인덱스를 생성하여 성능저하가 발생하지 않도록 해야함.

: MongoDB의 복합 인덱스

: RDBMS처럼 다중 인덱스 가능

: 우선순위에 따라 지정하는 것이 좋고, RUD가 잦은 필드도 제외해야함.

* 질의 튜닝

: MongoDB는 서버에 질의된 문장을 profiling하는 것이 가능함.

: 분석 결과는 db.system.profile Collection 에 저장됨

: 질의 문장들의 분석이 가능함 (Explain 함수)

: 질의 문장의 성능이 저하되는 원인인 인덱스를 찾을 수 있음

* 아키텍쳐 튜닝

: 운영체제의 메모리 설정을 따라기기 때문에 충분한 map Memory 영역이 필요함

: 하나의 시스템에서 하나의 인스턴스만 실행해야한다..

: 단일 노드보다는 다중 노드로 서비스하는 것이 유리하다.

: 샤드 시스템을 통해 분산 저장과 Load balancing의 장점을 얻을수 있다.

* 하드웨어 튜닝

: 가장 쉬운 방법

: SDD사용, 충분한 메모리 공간 사용, 다중코어, 다중 node사용

: Mongopref 유틸리티를 사용하면 MongoDB의 Disk I/O상태 확인 가능

* Profile 시스템

: 질의 결과에 대한 프로파일링 시스템을 제공

: 분석 결과는 db.system.profile 콜랙션에 저장

: 일정 시간이 초과된 질의를 추출할 수 있음

: 성능 튜닝할 대상등을 선정하는 것이 가능해짐

: Propile을 위해 환경설정이 필요하다

> db.commandHelp("profile")    //    사용방법 출력

: 현재 프로파일 설정 상태 확인

> db.getProfilingLevel()    //    결과가 0이면 시스템을 사용하지 않음, 1이면 100ms 이상 걸린 정보를 저장함, 2이면 System에서 발생한 모든 정보를 저장함

: 설정 변경

> db.setProfilingLevel(2)    //    입력이 0이면 시스템을 사용하지 않음, 1이면 100ms 이상 걸린 정보를 저장함, 2이면 System에서 발생한 모든 정보를 저장함

: 저장된 프로파일 정보 조회

> db.system.profile.find()    //    전체내역 확인

> db.system.profile.find({millis:{$gt:5}})    //    특정시간이상 걸린 정보들만 조회

2. MongoDB 보안 팁

* 인증 설정

: 설치과정 중 인증과 관련된 설정을 하는 부분이 없음

: 설치후 누구나 DB에 접속할 수 있음

: 허가된 사용자만이 DB에 접속할 수 있도록 계정, 패스워드를 설정해양 한다.

: 실행 시 인증정보를 사용하겠다는 파라미터를 포함하면 됨

: 데이터베이스별로 계정과 패스워드를 추가하여 사용하는 것을 권장

: 각 DB별 계정 정보는 system.users라는 namespace에 저장됨

: db.removeUser(username) 명령으로 계정 삭제 가능

* MongoDB 종료

: MongoDB 안전종료 방법

: foreground로 실행시 Ctrl-C로 강제종료    //    권장하지않음

: MongoDB Shell 이용시 db.shutdownServer()

: 반드시 -auth 패러미터를 사용하여 mongod를 구동해야함.

: 드라이버 이용시 {"shutdown":1} 명령

* HTTP 인터페이스 보안

: 누구나 HTTP 인터페이스에 접근해서는 안되기 때문에, -auth 패러미터를 사용해서 mongod 인스턴스를 구동해야함



+ Recent posts