MongoDB의 락

Pinterest

 글 : 이승용

C++로 개발된 MongoDB는 boost의 shared_mutex를 이용하여 락 시스템을 개발하였다. shared_mutex는 기본적으로 one writer many reader의 구조를 가지기 때문에 MongoDB는 쓰기 락이 한 개만 존재한다. 이러한 점은 MongoDB의 쓰기 연산에서 부하가 발생할 경우, 전체적인 시스템 부하를 야기할 수 있다.  하지만, 10gen에서는 쓰기 연산 속도가 매우 빠르기 때문에, MongoDB의 락이 부하를 발생시키지 않는다고 말한다. 사실 NoSQL은 트랜잭션이 없기 때문에 쓰기 연산에 대한 부하가 RDB 처럼 심하지 않다. 즉 근본적인 쓰기만 수행하면 되기 때문에 매우 빠른 특징을 가진다. 또한 MongoDB는 1차적으로 메모리에 데이터를 쓰기 때문에 쓰기 연산 속도가 빠르다는 것이 보장된다.

그렇다고, MongoDB의 락 시스템이 완전하다고 볼 수 없다. MongoDB는 쓰기 락을 시스템에 한 개를 유지하기 때문에, 아무래도 최대 쓰기 연산의 한계를 가진다. 이말은 클라이언트의 개수와는 상관 없이 최대 저장 속도가 락에 의해서 결정된다는 것이다. 이러한 문제점은 버전 2.2에서 컬랙션 별로 쓰기 락을 구현하여 어느정도 해소시켰다. 본 장에서는 이러한 MongoDB의 락 시스템에 대한 구조를 살펴보도록 한다.

  1. Boost의 shared_mutex
  2. MongoDB의 락 시스템
  3. MongoDB의 Global Lock

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