MongoDB의 일관성

Pinterest

글 : 이승용

MongoDB는 메모리DB의 특성을 가지고 있기 때문에, 다른 NoSQL(자바로 개발된 NoSQL – Cassandra, HBase)보다 데이터 쓰기 연산이 빠르다는 특징을 가지고 있다. 하지만, 쓰기 연산이 빠르다고 하여, 데이터가 안전하게 저장되었다고 판단할 수 없다. 아래 그림을 살펴보자.

상기 그림과 같이 메모리DB는 클라이언트에서 전달한 쓰기 연산에 대하여 1차 저장소인 서버 메모리에 데이터를 저장한다. 그리고, 메모리에 저장된 데이터는 일정 주기로 2차 저장소인 로컬 저장소에 저장한다. 1차 저장소인 메모리는 저장 속도가 빠르기 때문에 빠른 응답을 보장해 주는 반면, 휘발성 저장소이기 때문에 장애에 따른 데이터 손실이 발생한다. 이러한 장애 대응을 위해 일정 주기 후에 메모리에 저장된 데이터를 비휘발성 저장소인 로컬 저장소에 저장하여 메모리와 데이터 동기화 시킨다.

하지만, 데이터 동기화는 1차 저장소인 메모리의 데이터 변경이 있을 때마다 실시간으로 반영되는 것이 아니다. 따라서 장애에 따른 데이터 손실을 완전히 방어할 수는 없다. 전통적인 데이터베이스 시스템에서는 트랜잭션Transaction이 보장되어 2차 저장소까지 데이터가 안전하게 저장되었다는 것을 보장해 준다. 하지만 NoSQL은 트랜잭션을 보장하지 않느 시스템이다. 따라서, 트랜잭션이 보장되는 기존 데이터베이스 시스템과 쓰기 연산의 안정성인 데이터 일관성을 다루는 문제는 근본적인 NoSQL 시스템에 대한 반론으로 볼 수 있다.

따라서, MongoDB Internals에서는 첫 번째 테마로 전통적인 시스템에서의 일관성과 NoSQL에서 다루는 일관성, 그리고 MongoDB가 제공하는 일관성에 대해 고찰해 봄으로써 데이터 일관성에 대한 해결책을 다루어본다.

  1. 데이터베이스의 일관성
  2. 소켓의 blocking-mode
  3. MongoDB의 Write Concern

 


  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS
  1. 아직 댓글이 없습니다.
  1. 엮인글들이 아직 없습니다.