clojure에서 메모리 상의 트랜잭션을 처리하기 위해 락을 사용하는 대신 Multiversion Concurrency Control(이하 MVCC) 기법을 사용한다고 한다.
clojure의 소프트웨어 트랜잭션 메모리(STM) MVCC 기법을 활용해 데이터의 상태를 변경함으로써 Concurrent 상황에서 발생하는 문제를 해결하고 있다.
MVCC는 현재 대부분의 데이터베이스에서 트랜잭션 처리를 할 때 사용하는 개념이라고 한다. 책의 설명과 http://en.wikipedia.org/wiki/Multiversion_concurrency_control 설명을 보면 트랜잭션별로 snapshot을 관리하는 방식으로 동작하는 것으로 이해된다. snapshot 버전을 만들 때는 clojure의 영속적(persistent) 자료구조를 사용하기 때문에 비용 발생은 크지 않다. 트랜잭션이 완료되기 전까지 다른 트랜잭션에 비공개 상태였다가 트랜잭션이 완료(DB의 commit과 같은 개념이라 생각된다.)되면 공개 상태가 되어 다른 트랜잭션에 영향을 미치는 방식으로 이해된다.
MVCC 기법은 SVN, GIT과 같은 버전 관리 시스템에서도 사용하고 있고, Cache에서도 MVCC 기법을 사용하고 있다.
MVCC 개념을 좀 더 쉽고 명확하게 이해할 수 있는 자료가 있으면 공유해 주면 좋겠다. 대략적으로 어떤 방식으로 동작하는지는 이해하겠는데 명확하게 이해하기는 쉽지 않다. 모든 개념이 그렇듯이 내가 직접 구현해 보고 부딪혀 보기 전까지 내 것으로 만드는데는 한계가 있는 듯하다.
0개의 의견 from FB
0개의 의견 from SLiPP
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.