Self-Study/기타

[Database] snapshot

Raadian 2022. 7. 5. 08:18

References

https://deftkang.tistory.com/155

https://itstorageaws.tistory.com/12

https://m.blog.naver.com/cheory79/220694992055

 

snapshot의 정의

특정 시간, 저장 장치의 상태를 나타내어 동작으로 보존한 뒤 데이터 저장에 실패한 경우 백업을 하는 기능이다.

 

snapshot의 방식

Copy-On-Write(COW) 방식

storage를 구성할 때 미리 snapshot을 위한 공간을 할당하여 블록 단위의 데이터를 기록하는 방식이다.

COW 방식은 물리적인 데이터 복사가 이루어지지 않아 생성되는 시간이 매우 짧고 공간 또한 거의 차지하지 않는 장점이 있다.

그러나 pointer만 생성되는 특성 상 원본 데이터가 변경되면 이를 참조하는 snapshot이 깨지기 때문에 snapshot이 보관된 장소에 원본 데이터 복사가 선행되는 과정을 거쳐 결국엔 **I/O의 성능(오버헤드 증가)**이 떨어질 수 있다.

Redirect-On-Write(ROW) 방식

COW 방식에서의 I/O 오버헤드를 줄이기 위한 방식으로 snapshot을 위한 별도의 공간을 미리 확보하지 않고 리스트들을 만들어 관리하는 형태다.

원본 데이터 변경 시 기존 업데이트를 진행 하는 snapshot 리스트를 멈추어(FREEZE) 한 개체의 스냅샷으로 둔 뒤 이 후 새로 업데이트 하는 snapshot 리스트는 새로운 블록에 쓰게끔 한다.

이로 인한 장점은 기존 COW에서 원본 데이터가 변경될 때 3번의 읽기 및 쓰기 작업이 이루어지는 동안 ROW는 단 한 번의 쓰기 작업으로 완료되기 때문에 I/O의 성능을 보장할 수 있게 된다.