복제여러 서버가 서로의 데이터를 동기화하는 것을 의미하는데 서로 주고받는 데이터에 따라 논리 복제와 물리 복제로 나뉜다. DRBD 와 같이 리눅스 서버가 데이터 내부를 전혀 모르는 상태에서 디스크의 블록만 복제하는 형태를 물리복제라고 한다.데이터베이스 서버가 직접 서 버간 데이터를 동기화하는 방식을 논리적 복제라고 한다. MongoDB 의 복제는 크게 2가지 '마스터-슬레이브 복제', '레플리카 셋 복제' 로 나뉘는데3.2 버전 이후로 마스터-슬레이브 복제는 사용되고 있지 않다. 컨센서스 알고리즘여러 서버가 복제에 참여해서 서로 같은 데이터를 동기화하는데, 이렇게 데이터를 공유하는 그룹을 레플리카 셋이라고 한다.그리고 하나의 레플리카 셋에는 프라이머리와 세컨드리로 각자의 역할이 나뉜다.레플리카 셋에 참여..
분류 전체보기
WiredTiger 엔진WiredTiger 스토리지 엔진은 트랜잭션을 지원하는 임베디드 데이터베이스 엔진으로 사용된다. WiredTiger 스토리지 엔진은 내장된 캐시를 가지고 있다.이 캐시는 디스크의 인덱스나 데이터 파일을 메모리에 캐시하여 빠르게 쿼리를 처리하고,데이터 변경을 모아 한번에 디스크로 기록하는 쓰기 배치 기능을 가지고 있다. 사용자가 쿼리를 실행하면 WiredTiger 스토리지 엔진은 블록매니저(Block Manager)를 통해서 필요한 데이터 블록을 디스크에서 읽어서 공유 캐시에 적재하여 쿼리를 수행한다.만약 사용자가 데이터를 변경하면 WiredTiger 스토리지 엔진은 트랜잭션을 시작하고 커서를 이용해 원하는 도큐먼트의 내용을 변경한다.도큐먼트의 변경 내용은 먼저 공유 캐시에 적용되는..
WiredTiger 스토리지 엔진Berkeley DB 개발자들에 의해서 개발된 임베디드 데이터베이스 엔진으로 현재 MongoDB 의 기본엔진이다.이 엔진이 도입되기 전 MMAPv1 스토리지 엔진을 사용했는데 문제점이 많아 이 엔진으로 변경되었다. 이 엔진은 내부적인 잠금 경합 최소화를 위해 '하자드 포인터' 나 '스킵 리스트' 와 같은 많은 신기술을 채택하였다.또한 MVCC 와 데이터파일 압축 그리고 암호화 기능들을 모두 가지고 있다. WiredTiger 스토리지 엔진 설정storage 의 enigine 필드를 wiredTiger 로 변경한다.마찬가지로 이 외의 필드는 성능에 크게 영향을 미치지 않는다.storage: engine:"wiredTiger" wiredTiger: eng..
운영체제 캐시앞 포스팅에서 말한 것처럼 MongoDB 의 MMAPv1 스토리지는 운영체제 캐시를 사용한다.따라서 OS 캐시정책이 매우 중요하다. 페이지 캐시의 데이터 읽기읽는 방법MMAPv1 스토리지 엔진은 리눅스의 캐시를 거쳐서 데이터를 MongoDB 서버로 읽어들인다.이를 순서로 표현하면 아래와 같다.1) MongoDB 서버가 필요로 하는 데이터는 먼저 리눅스의 페이지 캐시에 적재2) 그 데이터를 MongoDB 서버가 가져감3) 그 데이터를 다시 읽어야 하는 경우 디스크에서 읽지 않고 리눅스 페이지 캐시에 적재된 페이지를 조회함 문제점문제는 리눅스의 디스크 읽기는 주변의 일부 페이지들을 같이 읽어 들이는 경우가 많다.이를 Read-Ahead 라고 하는데, 데이터 파일에서 필요로 하는 페이지 주변의 ..
MMAPv1 스토리지 엔진MMAPv1 스토리지 엔진은 MongoDB 초찾익부터 3.0 까지 주로 사용되던 스토리지 엔진이다.2.6 버전까지는 데이터베이스 단위의 잠금을 사용했으나, 3.0 으로 업그레이드되면서 컬렉션 수준의 잠금으로 개선되었다.하지만 컬렉션 수준의 잠금 또한 동시성 처리에 많은 걸림돌이다. MMAPv1 스토리지 엔진은 자체 캐시 기능이 없어 운영체제의 캐시를 활용한다.이는 커널이 제공하는 시스템 콜을 거치게 되므로 오버헤드가 상대적으로 큰 편이다.또한 운영체제의 캐시 기능은 관리가 데이터베이스가 직접하는 것 보다 안정적이지 않다. MMAPv1 스토리지 전망현재는 MongoDB 서버가 업그레이드 되면서 MMAPv1 스토리지 엔진의 사용이 줄어들고 있다.이는 MMAPv1 이 가진 단점이 많..
아키텍처초보자 입장에서 바라보는 아키텍처이다.1) 프로그래머는 프로그래밍 언어를 사용하여 개발을 한다.2) 이 코드는 MongoDB Driver 를 거쳐 컴파일 되고 MongoDB 를 사용할 수 있다.3) 네트워크를 통해 MongoDB 요청을 전달한다.4) MongoDB 의 쿼리프로세서, 샤드 매니저 등등은 이 데이터가 어디에 위치하는지 쿼리는 괜찮은지 유무를 파악한다.5) 모든게 통과되면 스토리지엔진 API 를 통해 데이터를 디스크로부터 읽어들인다. 스토리지 엔진가장 하위에 위치한 MMAPv1 과 WiredTiger 등을 스토리지 엔진이라고 하며디스크에 영구적으로 기록하거나 다시 읽어와서 메모리에 적재하는 역할을 담당한다. MySQL 서버와 같이 다양한 스토리지 엔진을 사용할 수 있도록 플러그인 형태로..
MongoDB 의 CRUD MongoDB 도 RDB 와 마찬가지로 SELECT, INSERT, UPDATE, DELETE 를 제공한다. 차이점이라면 RDB 는 테이블이 없는경우 오류를 뱉지만 MongoDB 는 컬렉션이 없으면 컬렉션을 생성하면서 적재한다. MongoDB 는 자바스크립트 기반 명령어와 JSON 을 인자로 사용한다. SELECT find 라는 명령어를 사용한다. id = mozi 인 값을 찾는다. SELECT * FROM mozi WHERE id = 'mozi' db.mozi.find ( { id : 'mozi' } INSERT insert 라는 명령어를 사용한다. INSERT INTO mozi (id, type, version) VALUES ('mozi', 'tistory', 1) db.m..
MongoDB 와 RDBMS 의 명칭 차이 RDBMS MongoDB 데이터베이스 ( Database ) 데이터베이스 ( Database ) 테이블 ( Table ) 컬렉션 ( Collection ) 레코드 ( Row ) 도큐먼트 ( Document ) 컬럼 ( Column ) 필드 ( Field ) 인덱스 ( Index ) 인덱스 ( Index ) 쿼리의 결과로 레코드가 반환 쿼리의 결과로 커서가 반환 명칭은 다르나 의미는 비슷하다. 예를들어 MongoDB 에서 Collection 명칭은 RDBMS 의 Table 명칭과 같은 의미이다. 쿼리의 결과 커서 MongoDB 는 쿼리의 결과로 커서가 반환된다. 클라이언트 프로그램은 커서를 통해 반복적으로 실제 도큐먼트를 가져올 수 있다. 바로 결과를 가져오지 않..
마이너버전 업그레이드 정책 MongoDB 마이너버전 업그레이드는 롤링(Rolling-upgrade)방식을 사용한다. 롤링방식이란 서비스를 중지하지 않고 멤버들을 순차적으로 업그레이드하는 방식을 의미한다. 롤링방식 롤링방식 순서는 다음과 같다. 1. 세컨드리 멤버의 버전을 업그레이드 한다. 2. 업그레이드가 된 세컨드리 멤버와 현재의 프라이머리 멤버를 스위칭한다. (서비스 입장에서는 순간적인 단절이 발생) 3. 업그레이드가 된 세컨드리 멤버에서 서비스를 이어간다. 4. 세컨드리가 된 기존 프라이머리 버전을 업그레이드 한다. 롤링방식의 리스크 롤링방식으로 순차적으로 업그레이드를 하는동안 서비스는 이어갈 수 있지만 세컨드리와 프라이머리간 버전이 일치하지 않는 기간이 발생한다. 이 때 업그레이드가 된 버전의 기..
라이센스 MongoDB 는 MongoDB, Inc 회사에 의해 개발 및 유지보수되는 오픈소스 데이터베이스이다. 기본적인 기능을 모두 오픈 소스로 관리하며 누구든지 별도의 비용 없이 MongoDB 를 사용할 수 있다. 필요할 때에는 직접 소스 코드를 수정하여 MongoDB 를 사용할 수 있다. 별도 비용이 없는 오픈소스 MongoDB 는 커뮤니티 버전이라 부르고 기술 지원과 추가 기능을 사용할 수 있는 유료 라이센스 모델인 프로페셔널과 엔터프라이즈 버전을 제공한다. 그러나 요즘 클라우드 환경의 PAAS 로 인해 언제 라이센스 정책을 변경할지는 잘 모르겠다. 버전 3개의 숫자로 구성된 버전 체계를 제공한다. 7.0.6 버전을 예로들면 앞의 7 은 메이저, 0 은 마이너, 6은 패치버전이다. 마이너 버전에서 ..