1. 디스크(Secondary Storage)
디스크는 메모리보다 느리고, cpu 보다 훨씬 느리다.
디스크가 어떻게 작동하는지를 알아서, 가장 효율적으로 디스크를 운용하는 것이 중요하다.
구조
마그네틱 디스크가 SSD 에도 어느정도 통하는 부분이 있으므로, 알기쉬운 마그네틱 디스크를 기준으로 보자.
마그네틱 디스크는 track 과 sector 로 이루어진 원판의 한 점을 read-write head 로 읽는 방식으로 작동된다.
track 은 동심원이고 sector 는 중심을 기준으로 등각으로 나눈 부분들이다.
disk driver 는 위의 sector 들의 연속된 집합인 Block 을 단위로 데이터를 읽고 쓴다.
cpu 가 disk 를 기다리는건 비효율적이므로, 한번에 많이주고 적게 disk 를 기다린다는 말이다.
sector 는 보통 512 bytes 이다.
Block 은 보통 4 ~ 16 Kb 크기로, 8 ~ 32개의 sector 가 모여서 Block 을 이루는 것이다.
이런 Block 들에 File 을 저장하므로 Block 들의 집합이 File 이 된다.
속도
1. 데이터의 물리적 위치를 찾고(Access Time)
2. 찾은 데이터를 메모리까지 전달하는 시간(Data Transfer Rate) 의 합
Access Time = track 을 찾는 시간인 (Seek Time) + sector 를 찾는 시간인 (Rotational Latency)
rotational Latency 가 보통 seek Time 보다 빠르고, 데이터의 연속성을 위주로 계산한다면 seek time 만 다르기 때문에 데이터베이스에선 seek time 에 더 집중하게 됨.
2. 파일
파일구조
DB 와 관련해서, 데이터는 여러 tuple 들의 모음이다.
이러한 하나의 row 를 record 라고 한다.
ex) 인간.csv 에서의 "철수", "맹구", "훈이" 각각이 record 라고 할 수 있다.
1. 삽입, 삭제 테크닉
Free List 를 파일 헤더에 만들어서, 빈 공간끼리 포인터처럼 연결하는 List 를 만듬
2. 가변크기 Record
record 의 경우, 가변길이 attribute 는 (index, length) 를 앞에 먼저 다 적고, 고정길이 attribute 를 기록.
후에 가변길이 attribute 를 앞에 적은대로 적는다.
Null Bitmap 은 위치는 딱히 중요하지않고, Null 많은 데이터 시 유용하다.
가변길이가 포함된 record 들은 File 로 만들어지고 이는 Block 들에 저장됨.
각 블럭마다 heap과 static 메모리 처럼 양 끝에서부터 데이터를 넣음.
Block Header 가
1. Free Space 마지막 주소,
2. Record 의 갯수
3. 각 record 의 (Location, Size)
를 기록함.
파일구성
검색을 쉽게 하기 위해서 필요한 Record 정렬 테크닉임.
Heap(정렬 x), Hash, Sequencial, Multitable Clustering File Organazation 등이 있음.
Sequencial 이 많이 사용되는데, 이때 기준이 되는 Attribute 를 Search Key 라고 함.
각 리코드들은 array 일 뿐만 아니라 List 처럼 서로 포인터처럼 가리키는 Chaining 영역도 가짐.
이는 위에서 말한 Free List 뿐만 아니라, 삽입 시 사용할 overflow block 과 연결하기 위함임.
삽입 제거 시 모든 데이터를 밀거나 당기지 않고, Chaining 으로 연결해 주기적으로 재정렬은 한다는 말.
3. 버퍼
디스크로 접근하는 것은 시간이 오래걸리니, 다른 프로그램도 그렇듯 DB 는 버퍼를 사용함.
이를 관리하는 Buffer Manager 는 버퍼가 꽉 찬 경우 Victim 을 정해야 함.
이를 위한 strategy 는 os task manager 처럼 MRU, LRU 가 있으며, 고정하기(pin), 아예 쓰지 않기(toss immediate) 등이 있고, Query 최적화 때 이 strategy 를 임의로 조절할 수 있음.
댓글 없음:
댓글 쓰기