하드 디스크의 구조
하드 디스크는 여러개의 원판이 겹겹이 쌓인 구조를 하고 있다.
각 원판 중앙에는 spindle rod 라는 중심축이 있고, 각 원반은 중심축을 기준으로 회전한다.
이 원반을 platter 라고 부르고, 플래터에 들어있는 0과 1로 이루어진 데이터를 r/w arm 이 읽어들인다.
이때 데이터를 읽기 위해서는 각 arm이 물리적으로 이동을 해야 하는데, 디스크 플레이트는 여러개의 트랙으로 구분되고, 그림에서 보는 것처럼 원반을 부채꼴 모양으로 자른 섹터로 나눌 수도 있다.
데이터를 읽고 쓸 때는 하나의 플레이트에서 색터와 트랙이 만드는 영역에 저장되는 '블록' 단위로 데이터를 읽고 쓴다.
따라서 데이터를 찾는 데 걸리는 시간은 트랙을 이동하는 시간과 회전하여 섹터를 찾는 시간의 합으로 나타낼 수 있다.
Latency = seek time + ratation time
CPU와 메모리 속도가 아무리 빨라도 디스크의 속도가 느리면 결국 병목이 발생한다.
따라서 디스크에 어떻게 데이터를 배치하여 저장할 지 결정하는 것이 중요하다.
디스크 내 영역을 나눌 때는 논리적인 분할과 물리적인 분할이 있다.
논리적인 분할은 폴더를 이용하여 파일을 구분하는 것과 같은 것을 말하고, 물리적인 분할은 여러개의 디스크를 두는 것을 말한다.
하드디스크와 CPU가 소통할 때는 인터페이스를 거쳐서 소통한다.
이 인터페이스에는 여러가지 종류가 있다.
과거에는 IDE 라는 인터페이스를 사용하였는데, 병렬로 여러개의 디스크를 올릴 수 있는 특징이 있었다.
하지만 느리다는 단점이 있으며, 불량섹터를 발견하면 그 위치에는 쓰지도 읽지도 않는다.
SCSI (스카시) 라는 인터페이스도 존재하는데, 이 인터페이스는 불량 섹터가 발생했을 때 그 섹터의 데이터를 다른 곳으로 옮겨 저장하므로 안정성이 높아서 워크스테이션에서 자주 사용한다.
또한 디스크에서 읽어들인 데이터가 CPU로 갈지 메모리로 갈지 스카시의 전용 칩이 결정을 하므로 CPU의 부담을 덜어준다.
SATA는 직렬로 연결되어 있어 1채널에 1디스크가 연결되므로, 한 디스크의 성능이 다른 디스크에 영향을 주지 않는다.
SSD의 구조
SSD (Solid State Drive) 는 물리적이 아닌 전자적인 움직임으로 데이터를 저장한다.
(비휘발성 메모리를 일부 컴포넌트로 한다.)
SSD는 그리드 형태로 구성되어 있는데, 각각의 그리드에는 클러스터가 존재한다.
클러스터에는 여러개의 블록들이 존재하며 블록들은 여러개의 page로 이루어져 있다.
그리고 이 page가 메모리에 올려서 읽고 쓰는 데이터 단위이다.
이때 각 페이지를 어떻게 저장하는지에 따라 크게 SLC, MLC, TLC 방식으로 나뉜다.
SLC에서 TLC로 갈수록 점점 촘촘하게 데이터가 저장되며, 데이터가 촘촘하게 저장될수록, 데이터를 읽고 쓰는 것을 관리하는 컨트롤러의 알고리즘이 복잡해지므로 점점 비싸진다.
데이터베이스와 저장장치
결국 중요한 것은 데이터베이스와 저장장치 사이의 데이터를 주고받는 일련의 흐름일 것이다.
데이터베이스에서 데이터를 읽어올 때는 디스크에 저장된 데이터를 블록(= 다수의 페이지) 단위로 읽어온다.
이때 읽어온 데이터는 버퍼에 담겼다가 DBMS의 캐시에 저장된다.
이처럼 디스크에서 데이터를 읽어오는 것은 비용이 많이 들기 때문에, 최대한 page 이동을 최소화할 필요가 있다.
다음 글에서는 데이터를 저장하는 여러가지 방법에 대해 정리한다.
'CS > 기초데이터베이스' 카테고리의 다른 글
[데이터베이스] 19. 트리 기반 인덱스 (B+트리) (1) | 2024.10.22 |
---|---|
[데이터베이스] 18. 파일과 인덱스 (레코드 저장 방법) (0) | 2024.10.22 |
[데이터베이스] 16. 분산 데이터베이스 (1) | 2024.10.21 |
[데이터베이스] 15. Null, 제약조건, Trigger (0) | 2024.10.21 |
[데이터베이스] 14. SQL 집계 함수와 Group By (0) | 2024.10.21 |