일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Swift 문법
- 숭실대
- 데이터베이스 공부
- global soop
- Apple Developer Academy @ POSTECH
- ObservableObject
- 애플 아카데미 후기
- 치지직
- iOS 개발 오류
- StateObject
- react
- ObservedObject
- 제앱소
- 소프트웨어분석및설계
- 네이버 치지직
- apple developer academy 후기
- 네이버 부스트캠프
- 운영체제
- SWIFT
- OS
- swift문법
- 애플 디벨로퍼 아카데미 21주차 회고
- 앱 비교 프로젝트
- useReducer
- sqoop
- 데이터베이스
- 애플 디벨로퍼 아카데미
- Swift 기능
- Swift 디자인패턴
- 애플 디벨로퍼 아카데미 후기
- Today
- Total
사과하는 제라스
4. 저장 장치(Storage Devices) 본문
목차
DBMS는 데이터를 저장 및 관리를 하기에 이를 저장해둘 데이터 저장 장치에 대한 지식을 갖춰야 함.
4.1. 물리적 저장 매체
- 물리적 저장 매체는 1) 데이터 접근 속도, 2) 데이터 저장 비용, 3) 신뢰성 4)휘발성(volatile) 여부 등으로 분류함.
캐시 메모리 VS 메인 메모리
캐시 메모리
- 가장 빠른 형태의 메모리이고 가장 비쌈.
- CPU 안에 위치함.
- volatile
메인 메모리
- volatile
- 전체의 DB를 저장하기엔 아직도 비싸기에 용량이 작고 모든 DB가 올라가지는 않음.
- 데이터 접근 속도는 나노초 단위이고 10-100 나노초 정도의 빠른 속도로 접근함.
플래시 메모리
- non-volatile
- Read하는 건 메인 메모리만큼 속도가 빠르지만, Write하는 건 느림.
- Overwrite가 불가능함. 대신 Erase 후 Write하는데 이로 인해 Write가 느린 것임.
- Erasing하는 횟수에 제한이 있기에 어느정도 지나면 쓸 수 없어짐.
- 주로 USB 스틱, 휴대폰, 카메라 등에 쓰임.
NOR 플래시 메모리 VS NAND 플래시 메모리
NAND 플래시 메모리
- storage용으로 많이 쓰이고 NOR 플래시 메모리에 비해 저렴함.
- 페이지 단위로 읽음. (<-> NOR 플래시 메모리는 단어 단위로 읽음.)
- 메모리 전송 속도가 늦기에 여러 플래시 디스크를 병렬로 배치해서 속도를 높이기도 함.
- logical address를 physical address로 remapping하는 연산이 Translation Table에 있고 이를 통해 erase하는 시간을 줄이거나 더이상 쓸 수 없는 블록은 접근하지 않도록 함.
- 약 십~백만번 정도 erase된 후에는 블록은 쓸 수 없어짐.
∴ 내부적으로 자주 지우는/자주 지우지 않는 데이터를 구분하여 저장해두고 erase 연산을 평등한게 분포하는 작업을 함.
= Wear Leveling(평등화 작업)
자기 디스크(Magnetic Disk)
- 데이터가 돌고있는 자기 디스크에 저장되고, 자기적으로 읽고 쓰여짐.
- 디스크에 있는 데이터를 직접 접근X. -> 메인 메모리에 올려서 접근함.
- 자기 디스크 내에서 데이터를 접근할 때는 direct-access를 함.(순차접근X)
- non-volatile
광디스크(Optical Disk)
- non-volatile
- CD, DVD, Blu-Ray Disk 등이 예시
- 자기 디스크에 비해 Read/Write 모두 느림. 하지만 상대적으로 대용량 데이터 저장 측면에서는 비용적인 면에서 좋음.
- WORM(Write Once, Read Many)형태(ex. CD-R, DVD-R, DVD+R)가 기본임.
-> Multiple Write도 되긴 함.(ex. CD-RW, DVD-RW, DVD+RW, DVD-RAM)
- Juke-box System: 제거 가능한 디스크가 여럿 달려있고 그 안에 loading/unloading 기능이 들어있어서 대용량 데이터 저장에 용이한 형태
- 종류
1) CD-ROM
- 약 640MB
- 제거가능한 디스크
- 광 디스크 헤드가 하드 디스크에 비해 무겁고 이동이 느리기에 seek-time이 느림.
2) DVD
- CD-ROM과 같은 이유로 느린 seek-time.
- 4GB부터 크기는 다양함.
3) Record-once Versions(CD-R, DVD-R)
- 데이터가 한번 쓰이면 절대 안 지워짐.
- 아카이브하는데에 주로 쓰임.
마그네틱 테이프(Magnetic Tapes)
- non-volatile
- 주로 백업, 아카이브 용도로 많이 쓰임.
- 순차 접근만이 가능하고 디스크들에 비해 매우 느림.
- 40-300GB 정도로 용량이 매우 큼.
- 주크박스 형태도 있는데 거의 1TB까지도 가짐.
- 큰 용량의 데이터를 가질 수 있고 빠른 전송 속도를 제공함.
- 장단점이 확연함. 접근 속도가 매우 느리지만, 큰 저장 공간 덕분에 백업용으로 사용됨.
저장 장치 계층(Storage Hierarchy)
1) 주기억장치(Primary storage): 빠른 매체 하지만 휘발성이 있음. -> 캐시, 메인메모리
2) 2차 저장장치(Secondary storage): 비휘발성이고 일반적으로 빠른 접근 속도 -> 플래시 메모리, 자기 디스크
3) 3차 저장장치(Tertiary storage): 비휘발성이고 느린 접근 속도 -> 마그네틱 테이프, 광디스크
차수가 높을수록 저장 장치는 빠른 접근을 제공하지만 / 용량이 적고 비용이 비싸고 휘발성 메모리이다.
4.2. 자기 디스크
자기 하드 디스크
- Sector < Track < Cylinder
- 읽기쓰기 헤드가 이동하여 원하는 트랙 및 섹터에 위치하면 자기적으로 데이터를 읽고 씀.
- 하나의 트랙은 안에 있는 트랙은 500-1000개의 섹터로, 바깥쪽에 있는 트랙은 1000-2000개의 섹터로 구성됨.
- 어떤 섹터를 읽거나 쓰려고 함.
: 일단 디스크 arm이 해당 섹터의 track의 위치함. 이후, 플래터가 돌면서 해당 섹터를 head의 밑에 오도록 움직임. 그 후, 데이터를 읽고 씀.
디스크 컨트롤러(Disk Controller)
: 디스크 HW와 컴퓨터 시스템을 연결하는 인터페이스를 제공하고 디스크 드라이브 내에 구현되어 있음.
-> 즉, CPU로부터 high-level 명령어를 받아서 하드 디스크를 구동시키는 명령어로 바꿔서 원하는 데이터를 반환하는 역할.
디스크 컨트롤러: 마이크로 프로세서 + 버퍼 메모리 + 캐시
1) checksum을 이용하여 읽기/쓰기 데이터를 검증함.
2) 데이터가 써지면 다시 섹터를 읽어서 잘 써졌는지 확인함
3) bad 섹터의 경우 remapping 함.
4) 데이터 간의 순서가 달라서 전송속도가 달라서 데이터를 읽어왔을 때 끊어지는 현상을 방지함.
디스크 연결
1) DAS (Directed Attached Storage)
: 디스크가 컴퓨터 시스템에 직접 연결되어 있는 방식.
2) SAN (Storage Area Networks)
: 고속 네트워크를 통해 다수의 디스크들이 여러 서버들에 연결되어 있는 방식.
ex. SCSI, Fiber Channel, iSCSI, ATA 등
3) NAS (Network Attached Storage)
: 네트워크 storage에서 네트워크 화일 시스템을 가지고서 서버에 접근하는 방식
ex. NFS, AFP, AFS, SMB/CIFS 등
- DAS는 컴퓨터 시스템에 물리는 Storage인 반면, NAS는 네트워크에 물리는 Storage임.
- NAS는 네트워크에 존재하기 때문에 데이터를 공유하기에 쉬운 구조를 가지고 있음.
- NAS를 쓰려면 file-based Protocol을 쓰게 되어있음.
- LAN은 packet 단위의 데이터 전송을 하는 반면, SAN은 block 단위의 데이터 전송을 함.
디스크 성능 평가
1) 접근 시간: Seek time(탐색 시간- 올바른 트랙 찾는 시간)+ Rotational latency(회전 지연 시간- 올바른 섹터 찾는 시간)
- 디스크의 접근 시간은 메인 메모리에 비해 매우 느림.
2) 데이터 전송 속도: 디스크로부터 데이터를 찾거나 저장하는 속도
- 바깥 트랙에서 속도가 빠르고 안쪽에서 느림.
- 전송 프로토콜에 따라서 속도에 차이가 있음.
3) 평균 고장 시간: 장애 없이 디스크를 지속적으로 사용할 수 있는 평균 시간
자기 디스크의 성능 향상
자기 디스크는 다른 저장 매체에 비해 접근속도가 늦음.
∴ 자체적으로 다양한 기법을 지원함.
1) 블록 단위 데이터 접근
디스크에서 데이터를 가져올 때 블록 단위로 가져옴으로서 디스크 I/O 횟수를 줄임.
2) 디스크 암 스케줄에 엘리베이터 알고리즘 적용
트랙을 찾아갈 때 순서대로 처리하는게 아니라 엘리베이터 알고리즘처럼 지나갈 때 한번에 축적하여 처리하는 방식을 사용함.
3) 데이터 집약화(Data Clustering)
블록 내에서 논리적으로 가까운 데이터끼리 물리적으로 가까이 근접시켜 저장하는 방식으로 블록 접근 시간을 최적화함.
4) 비활성 RAM에 쓰기 연산을 우선시
디스크에 데이터를 직접 쓰지 않고 일단은 비휘발성 RAM(battery backed up RAM이나 플래시 메모리)에 쓰고 나중에 디스크에 request가 적을 때 컨트롤러가 디스크에 데이터를 씀. 이를 통해 쓰기 연산에 따른 기다림을 해소할 수 있음.
5) Log Disk
6) Journaling File System
4.3. RAID
디스크 용량의 빠른 증가에도 불구하고 여러 Application들의 데이터 저장 요구량이 더욱 급격히 증가하기에 데이터를 저장하는데 다수의 디스크가 필요해짐. 이들을 묶어주는 기술이 RAID!
- RAID: 다수개의 디스크를 큰 용량의 단일 디스크처럼 보이게 하는 디스크 구축 및 관리 기술
대용량, 빠른 접근 시간, 고신뢰성을 제공함.
데이터를 중복으로 저장하기에 높은 신뢰성(Reliability)을 보임.
중복에 의한 신뢰성 향상
어떻게 향상 시키는데...?
-> Mirroring을 통해 할 거임!
Mirroring을 통해 모든 디스크를 복제하게 되는데 이 두 디스크에 모두 Write를 하는 반면, Read는 한군데에서만 해도 됨.
이 둘 중 어느게 fail 나도 데이터는 다른 디스크를 통해 이용가능함.
Mean Time to Data Loss는 Mean Time to Failure와 Mean Time to Repair에 의존적임.
MTTD=(MTTF)^2 / (2*MTTR)
병렬에 의한 성능 향상
어떻게 향상 시키는데...?
여러개의 디스크에 데이터를 분산(striping)시켜서 데이터 전송 속도를 향상시킬 수 있음.
1) Bit-Level Striping : 바이트를 비트 단위로 쪼개어 전송.
- bit i는 디스크 i로 들어감.
- 거의 쓰이지 않음.
2) Block-Level Striping: 블록 단위로 쪼개어 전송.
- n개의 디스크가 있으면...블록 i는 디스크 (i mod n) + 1로 들어감.
- 널리 쓰임.
RAID Level
- RAID 시스템은 '디스크 관리 방식'에 따라 RAID Level을 정의할 수 있음.
- 각 RAID Level은 비용, 성능, 신뢰성에 차이가 있음.
RAID Level
0: block striping(성능 향상 O), non-redundant(신뢰도 향상 X)
- 데이터 안전이 중요하지 않을 때 씀.
1: block striping(성능 향상 O), mirrored disks(신뢰도 향상 O)
-> 디스크 거울화로 인해 데이터 저장 공간이 절반으로 축소되는 효과
------------------------------------------------------------------
2: bit striping(성능 향상 X), ECC 코드 사용
- 3에 흡수되어 이제는 더이상 안 씀.
3: bit striping(성능 향상 X)
- bit striping을 하여 너무 작게 쪼개지기에 더 이상 사용하지 않음.
4: block striping(성능 향상 O), parity(신뢰도 향상 O)
- 5에 흡수되어 이제는 더이상 안 씀.
------------------------------------------------------------------
5: block-interleaved(성능 향상) distributed parity(신뢰도 향상 O)
-> 패리티 저장으로 인해 저장 공간 축소가 미비하지만
6: P+Q redundancy(Level 5에 비해 조금 더 신뢰도 높음.)
- 드물게 사용됨.
RAID Level 결정
- 결정 요인
금전적인 문제, 필요한 성능, 장애 시 복구하는데 걸리는 시간, 장애 시 rebuild하는데 걸리는 시간
- RAID 0은 데이터가 중요하지 않을 때(reliability가 낮아도 될 때는 1 높아야 할 때는 1, 5) 씀.
- RAID 2, 4는 각각 3, 5에 흡수되었기에 안 씀.
- RAID 3는 bit-level striping이기에 성능이 안 좋아서 안 씀.
- RAID 6는 다수개의 디스크가 장애 시 복구하는 기술인데, 다수개의 디스크가 장애나는 경우는 흔치 않고 내부적으로 방지하는 기술을 쓰기에 잘 안 씀.
- RAID 1은 데이터 갱신 시 2번 읽기/쓰기를 하는 RAID 5보다 접근 시간적인 면에서 성능이 좋지만 미러링으로 인해 상대적으로 저장공간이 축소(higher storage cost)되는 단점이 있음.
∴ '데이터 갱신이 적고 대용량 데이터 저장이 요구될 때' RAID 5가 사용되고 그외에는 RAID 1이 쓰인다.
SW/HW RAID
RAID는 S/W, H/W 모두 구현이 가능함.
S/W적으로 만들 때는 OS 안에서 알아서 함.
H/W적으로 만들 때는 비휘발성 RAM과 같은 것을 만듦.
H/W 이슈
- latent failure: 디스크가 잘 썼음에도 불구하고 망가진 경우.
-> 이를 방지하기 위해서 Data scrubbing(지속적으로 latent failure를 감시하고 발생 시 다른 복사본에서 가져와서 복구하는 것)을 함.
- Hot swapping: 디스크가 망가졌을 때 시스템 중단없이 running 중에 디스크를 교체할 수 있는 기능.
- Hot spare: RAID 시스템 내에 다수 개의 예비 디스크를 구비하게 하고 운영 중인 디스크에 장애가 발생 시 즉시 예비 디스크를 사용하는 기술.
- RAID 시스템 내에 다수개의 전원장치, 제어장치를 가짐으로서 single point 장애로 인한 서비스 중단 및 데이터 손실 발생을 막음.
4.4. 화일 구성
- 필드 < 레코드 < 화일 < DB
단일 길이 레코드
- 저장 관리 및 구현이 쉬움.
- 가장 간단한 화일 구조.
- 현실적으로는 이런 화일 구조는 운영하기가 어려움.
가변 길이 레코드
- offset과 length값을 모두 기록하고 이를 참조해서 레코드의 시작점과 그 길이를 알 수 있음.
- 레코드들은 페이지 내에 저장되는데 가장 많이 쓰는 구조가 Slotted Page 구조임.
슬롯 페이지 구조(Slotted Page Structure)
- 페이지 헤더 내에 일정 데이터들이 들어감.
- 헤더 이후에는 슬롯이 나옴. 슬롯은 앞에서부터 채워나가고, 레코드들은 뒤에서부터 채워 옴. 그러다가 만나는
- 슬롯은 순차적으로 레코드1이 어디서 시작하는지 정보를 가지고 있음.
∴ 레코드가 위치가 변경되든 말든 외부에서는 페이지 id와 슬롯 번호만 가지고 있으면 레코드 접근이 가능함.
화일 내에서의 레코드를 저장하는 공간
- Heap: 레코드를 화일 내의 아무 곳에 저장
- Sequential: 키 값으로 정렬되어 저장
- Hashing: 해쉬 값을 이용해서 저장
멀티테이블 집약화일(Multitable Clustering File)
서로 다른 화일로 저장되는 게 아닌 두 테이블이 조인된 결과로 저장이 됨.
-> 하나의 테이블에 대한 질의에는 안 좋겠지만 포인터를 사용하면 성능이 좋아질 수 있음.
4.5. 버퍼 관리(Buffer Management)
'대학 전공 공부 > 데이터베이스2' 카테고리의 다른 글
3장 연습문제 (0) | 2022.10.25 |
---|---|
1장 연습문제 (0) | 2022.10.25 |
3. Recovery(복구) (2) | 2022.10.23 |
2. 동시성 제어(Concurrency Control) (0) | 2022.10.22 |
1. 트랜잭션 이론 및 회복가능(Recoverable) (0) | 2022.10.03 |