MongoDB

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 이 가진 단점이 많..
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은 패치버전이다. 마이너 버전에서 ..
NoSQL 에서 스키마? NoSQL 은 스키마라는 개념이 없다. 그래서 NoSQL 인 MongoDB 에서 스키마를 설계한다는 말이 이해가 안 될 수 있다. 우선 RDBMS 와 같은 스키마 개념은 없다고 보는게 맞다. 엄밀이 비유하면 Table 은 Collection , Row 는 Document 로 표현은 가능하지만 그렇다고 스키마를 설계하지는 않는다. 그렇다면 여기에서 말하는 스키마란 무엇일까? MongoDB 스키마 디자인 MongoDB 스키마 디자인은 RDBMS 의 디자인과 많이 다르게 작동한다. 먼저 규칙, 정규화에 대한 개념이 없고 Document 에 Key-Value 구조로 저장된다. 아래 데이터의 경우 RDBMS 라면 정규화를 거쳐 배열데이터를 별도의 테이블/로우로 분리 할 수도 있지만 Mon..
몽고DB 데이터는 유실된다? 얼마전 한 유튜브 강의에서 몽고DB 는 데이터가 유실될 수 있다는(왜?는 말씀하지 않으심) 이야기를 듣고 조금 의아하여 구글링을 조금 해보았다. 그랬더니 많은 블로그에서 데이터 유실이 있다는 부분을 작성하였는데 언제, 얼마나, 왜 발생하는지에 대한 내용은 작성되어 있지 않았다. DB관리자로써 나는 이걸알고 싶은데.. 그래서 한국문서를 넘어 해외문서를 뒤적거리고나서 어느정도 원하는 답을 알게 되었다. 그러나 찾아본 자료가 이분들이 말하는 유실과 같은의미를 담고있는지는 잘 모르겠다. MongoDB 꼬꼬마로써 발견하지 못한 자료가 더 있을지는 모르겠다. 다른점으로도 Memory Map 을 사용하고 주기적으로 flush 하는 동작이기 때문에 이 사이에 발생하는 장애로 인한 유실도 배..
꽁담
'MongoDB' 태그의 글 목록