WiredTiger는 멀티 코어 확장성과 최적의 램 사용에 초점을 맞춘 고성능의 확장 가능한 오픈소스 데이터 엔진이다.
https://docs.mongodb.com/manual/core/wiredtiger/
WiredTiger는 쓰기 연산에 도큐먼트 레벵의 동시성 제어를 사용한다. 그래서 많은 클라이언트가 다른 도큐먼트들을 동시에 수정할수 있다.
읽기와 쓰기 연산에서 낙관적 동시성 제어를 사용한다. 만약 충돌이 감지 된다면, 몽고DB는 해당 작업을 재시도하게 된다.
WiredTiger는 MVCC를 사용한다. 연산을 시작할때 WiredTiger는 특정 시점의 데이터 스냅샷을 만들어 둔다. 그 스냅샷은 in-memory 데이터의 일관된 view를 제공한다.
디스크에 쓰려고 할때, WiredTiger는 스냅샷 내의 모든 데이터를 디스크에 쓴다. 체크 포인트는 데이터 파일이 일괄성을 가지고 있는지 확인하며, 마지막 체크 포인트를 포함하고 있는지 검사한다. 즉, 체크 포인트는 복구 지점으로 사용될 수 있다.
몽고DB 3.6 부터 60초 간격으로 체크 포인트를 생성한다. 즉, 스냅샷 데이터를 디스크에 기록한다.
새로운 체크 포인트를 디스크에 쓰는 동안, 이전 체크 포인트들은 여전히 유효하다. 만약 몽고DB가 새로운 체크 포인트를 만들던 중에 종료되거나 오류가 발생하더라도, 재시작 시 몽고DB는 마지막 유효한 체크 포인트로부터 복구를 할수 있다.
WiredTiger에서는 심지어 저널링을 사용하지 않더라도, 마지막 체크포인트에서 복구를 할 수 있다. 그러나 마지막 체크 포인트 이후의 변경사항을 복구하려면 저널링을 사용해야한다.
WiredTiger는 데이터 내구성을 보장하기 위해 체크포인트와 함께 write-ahead log (즉, 저널링)를 사용한다.
저널링은 체크 포인트 사이의 모든 수정사항을 기록한다. 만약 몽고DB가 체크 포인트 사이에서 종료가 된다면, 저널을 사용하여 마지막 체크 포인트 이후 수정된 데이터를 replay한다.
몽고D가 저널링 데이터를 디스크에 쓰는 빈도는 Journaling Progess 를 참고.