데이터베이스의 데이터가 저장되는 공간은 무엇일까?
아래는 컴퓨터 내부의 저장 공간의 종류입니다,
내려갈 수록 저장 요량이 커지며, 올라올 수록 속도와 가격이 높아집니다.(행 기준)
명칭 | 특성 | 설명 |
레지스터 (Register) | 휘발성 | 극히 소량의 데이터나 처리중인 중간 결과와도 같은 프로세스가 바로 사용할 수 있는 데이터를 담는 영역 |
캐시 (Chache Memory) | 휘발성 | 고비용 저장장치로 빠른 접근 속도를 보장 |
메인 메모리 (Main Memory) | 비휘발성 | 실제 프로그램과 데이터 적재 공간 |
자기 디스크 (Magnetic Disk) 플래시 메모리 (Flash Memory) |
비휘발성 | 자기 디스크 : 데이터베이스 전체를 안정적으로 저장 플래시 메모리 : 메인 메모리와 유사하나 비휘발성, 전기적으로 데이터를 지우고 다시 기록 가능 |
광학 디스크 (Optical Disc Drive) 자기 테이프 (Magnetic disk) |
비휘발성 | 광학 디스크 드라이브 : CD, DVD Blue-ray 등 테이프 장치 : 용량이 크고 저렴하나 순차 접근 방식으로 속도가 매우 느림 |
즉 위와 같은 성질로 사용처에 따라 여러가지 데이터 저장 장치를 가지는 컴퓨터에서는 데이터베이스를 어떻게 저장할까?
+ DBMS 어떻게 효과적으로 데이터를 관리하는지?
데이터베이스의 구성
운영체제 위에서 동작하는 DBMS는 데이터를 파일 형태(논리적 단위)로 저장합니다 => DBMS를는 여러개의 파일로 이루어져있다
이 파일들은 저장공간에 여러개의 (물리적 단위)블록으로 저장됨
또 이 블록은 여러개의 레코드(물리적 단위)로 나눠짐
명칭 | 설명 |
파일 | 데이터를 영구적으로 저장하기 위한 가장 기초적인 논리적 단위 |
블럭 | 파일을 고저정적인 길이로 분할하여 생기는 균등한 크기의 데이터 묶음 이란적으로 메모리와 디스크 간 데이터 전송 단위로 결정 |
레코드 | 블럭을 구성하는 요소 더 이상 분리할 수 없는 최소 데이터 저장 단위 - 모든 레코드가 고정된 길이 일 경우 = 고정 길이 레코드 - 한 블럭내의 저장된 레코드 유형이 2개 일 경우, 길이가 고정되지 않은 컬럼의 개수가 하나 이상, 레코드가 멀티셋(레코드 컬럼이 여러개 인 컬럼)을 허용한 컬럼을 가질 때 = 가변 길이 레코드 |
고정 길이 레코드(Fixed Length Record)
레코드 삭제 시 문제
장시간의 레코드의 삽입 및 삭제시 저장공간에 많은 낭비 발생
레코드 삭제 대처
1) 마지막 레코드로 공백 대체 => 레코드의 입력 순서가 달라짐
2) 삭제 이후의 모든 레코드를 이동 => 많은 레코드의 이동을 요구함
3) 가용 리스트 관리(추가적인 저장공간을 사용하겠다) 각각의 레코드들이 다음 레코드의 포인터를 지니게 해서 관리
=> 실제 상용DB에서 많이 사용됨
가변 길이 레코드(Variable Length Record)
고정 길이 레코드 처럼 미리 길이를 알 수 없는 가변 길이 레코드는 어떻게 데이터를 저장할까?
가변 길이의 레코드의 형식은 아채처럼 NULL 값을 통해 가변 길이와 고정 길이 컬럼을 구분해줌
하나의 블록에서 여러 개의 가변 길이 레코드를 저장할 때 각 레코드의 크기가 불규칙하므로 별도의 자료구조가 필요합니다, 이를 위한 해결 책 중 대표적인게 슬롯페이지 구조(slotted page)입니다.
레코드가 뒤에서 부터 쌓이며 맨 앞에 블록 헤더에서 레코드의 블록 내 위치, 크기에 대한 정보를 담고 있는 것 입니다.
지금까지 DBMS가 저장되는 장치와 레코드가 블록 내에서 표현되는지를 알았습니다.
그렇다면 블록들이 모인 파일들이 수천, 수만개가 있는 데이터베이스는 어떻게 이를 관리할까
(특정 레코드에 대한 접근을 위해 어떤 레코드가 어느 블록에 저장되는 지 등을 관리 )
파일 구조(File Organization)
명칭 | 장점 | 단점 |
힙(heap) 파일 구조 | 저장 순서 고령 없이 파일 내 임의에 배치하므로 저장의 속도가 가장 빠름 | 데이터를 읽을 시 순차적으로 탐색해야하므로 탐색의 효율이 떨어짐 |
순차(Sequential) 파일 구조 | 정해진 탐색기를 기준으로 정렬되어 저장되므로 탐색이 빠름 | 힙 파일 구조보다는 저장의 속도가 떨어짐 |
해시(Hash) 파일 구조 | 해시 함수를 사용하여 블럭 주소를 계산 | 해시 함수에 따라서 속도의 차이가 큼 |
=> 순차 파일 구조가 가장 많이 쓰임
상세히
1. 레코드가 검색키 순서대로 정렬
2. 레코드가 파일에 삽입되는 시점에서 키 값이 부여
3. 장점
- 검색키에 대한 정렬 연산이 불필요, 키 값들의 순서로 레코드를 판독하는 연산이 효율적
- 현재 레코드에서 정렬된 키 순서로 다음 레코드를 찾을 때 부가적인 블록 접근이 불 필요
- 이진 탐색을 사용하면 더 빠르게 레코드 검색
4. 단점
- 레코드 삽입, 삭제에 많은 비용 소요
- 탐색키가 아닌 커럼의 값을 이용하여 탐색하는 것이 비효율적이다,
- 임의의 접근을 위해서는 선형 탐색을 사용함
- 비순차 컬럼의 순서대로 레코드에 접근하기 위해서는 파일을 비순차 컬럼 순으로 정렬한 사본을 별도로 만들어 사용
만약 순차 파일 구조에서 데이터를 신규로 넣을 때 공간이 없다면?
신규 레코드를 아래와 같이 레코드를 넣습니다. 이를 오버플로 블럭이라 합니다.
이제 파일 구조도 알게 되었습니다, 즉 논리적인 관점에서의 저장 객체를 알았습니다
물리적인 관점에서 DBMS의 파일들은 영속성을 위해 보조기억장치인 디스크에 블록으로 저장됩니다.
블록
- 블록은 메모리와 디스크 간 데이터 전송 단위
- 블록의 크기는 시스템과 운영체제에 따라 다르지만 2KB, 4KB, 8KB, 16KB, 32KB를 자주 사용합니다.
- 물론 블록 크기가 작을 수록 입출력의 시간은 단축이 됩니다.
- 사용중인 블럭을 지속적으로 메모리에 적재
- 한정적 공간으로 인하여 필요에 다라 특정 블럭 할당을 해지
- 메모리 내부에 버퍼(Buffer)라는 공간에 블럭을 저장하고 이를 관리하기 위한 버퍼 관리자(Buffer Manager)를 사용
버퍼 관리자
소프트웨어에서 메모리로 요청이 오고 메모리에서 디스크로 요청을 보낼 때 메모리 관리자가 블럭을 버퍼에 저장하고 관리를 해줌.
=> DBMS 상의 소프트웨어는 필요한 블럭이 있을 때 버퍼 관리자에게 요청
- 요청된 블럭이 버퍼에 있다면 버퍼 관리자는 블럭이 위치한 메모리 주소를 프로그램에 전달
- 요청된 블럭이 없을 경우 버퍼 관리자는 버퍼내의 새로운 공간을 할당하여 블럭을 적재
- 더 이상 적재할 공간이 없다면 버퍼에 있는 기존 블럭을 선택하여 할당을 해지하고 해당 블록을 적재
여기서 할당을 해제할 버퍼를 선택하는 방법은
버퍼 교체 전략(Buffer Replacement Strategy)
- 가용 공간을 확보하기 위해 기존에 적재된 블럭의 할당을 특정 기준에 의하여 해지
- 미래에 가장 적게 사용될 블럭을 선택하여 디스크에 내보내는 것이 이상적인 버퍼 교체 전략
- 버퍼 교체 전략 기법
- LRU (Least Recently Used) : 최근에 가장 적게 참조된 블럭을 교체
- MFU (Most Frequently Used) : 특정 기간동안 가장 여러번 사용된 여러번 사용된 블럭을 선택하여 교체
- 고정 블록(Pinned Blocks) : HW,SW의 결함으로 인하여 휘발성 기억장치의 데이터가 손실되어 작업이 중단 된 경우 이를 디스크에 저장하는 것을 방지함, 디스크 블록이 교체되는 것을 제한
- 블록 강제 출력(Forced Output of Blocks) : 시스템 로그와 같이 중요한 데이터는 디스크에 영구적으로 기록됨,
버퍼 공간이 필요 없어도 강제로 디스크에 기록
'컴퓨팅 기술 > 데이터베이스시스템' 카테고리의 다른 글
[데이터베이스시스템] 해싱과 특수 인덱스 (0) | 2022.04.13 |
---|---|
[데이터베이스시스템] 인덱싱 (0) | 2022.04.12 |
[데이터베이스시스템] 정규화 (0) | 2022.03.27 |