2014-02-16 2 views
6

나는 사육사를 연구 중이므로 "간단하게 완전히 명령 된 방송 프로토콜"이라는 글을 읽었습니다. 그리고 다음 문장을 실제로 이해하지 못합니다.zookeeper의 트랜잭션 로그에 대해 혼동을 느낀다

"ZooKeeper는 메모리 내 데이터베이스를 사용하여 트랜잭션 로그와 주기적 스냅 샷을 디스크에 저장합니다 .Zab의 트랜잭션 로그는 트랜잭션이 오로지 데이터베이스 미리 쓰기 트랜잭션 로그의 두 배가되기 때문에 한 번 디스크에 기록됩니다. "

나에게 설명 할 수있는 사람이 있습니까?

답변

8

사육사는 거래를 디스크에 작성해야합니다. 그렇지 않으면 사육사를 다시 시작하면 들었던 모든 거래에 대해 잊어 버리게됩니다. 사육사가 디스크에 기록하는 방법은 사육사가 트랜잭션에 응답하기 전에 트랜잭션 로그 파일에 트랜잭션을 추가하는 것입니다. 트랜잭션 로그 파일이 특정 크기에 도달하면 새 트랜잭션 로그 파일이 만들어집니다.

시작시 zookeeper가 처리 한 모든 트랜잭션을 재생해야하므로 트랜잭션 로그 파일에 쓰기가 효율적이지 않습니다. 그래서 주기적으로 사육사는 메모리 데이터베이스의 현재 상태에 대한 스냅 샷을 파일에 작성합니다. 그런 다음 시작시 사육사는 스냅 샷을로드하기 만하면되며 스냅 샷이 생성 된 이후의 모든 트랜잭션 로그를로드해야합니다.

+1

zookeeper가 트랜잭션에 응답하기 전에 트랜잭션 로그 파일에 트랜잭션을 추가하면 속도가 느려 집니까? 디스크에 쓰기에는 시간이 걸릴 수 있기 때문입니다. – Snail

+2

가장 좋은 방법은 트랜잭션 로그에 디스크를 할당하고 항상 트랜잭션 파일에 추가하는 것입니다. 디스크 헤드가 거의 항상 올바른 위치에 배치되고 쓰기가 상당히 빠릅니다. 사육사는 초당 수천 건의 거래를 처리 할 수 ​​있습니다. – sbridges

관련 문제