1. 데이터베이스의 필요성
1) 대량의 데이터에서 빠른 검색.
2) 대량의 데이터를 메모리 내에서 관리하기 어렵다
3) 장애 복구
4) 병렬성 제어(동시 작업)
5) 데이터 무결성 보장
2. 인덱스
- <id, 주소> 형태
원하는 정보가 어느 주소에 위치하는지 빠르게 찾기 위함.
레코드가 고정 길이인 경우, 고정길이 * id를 하면 주소를 알 수 있지만, 버려지는 정보가 많을 수 있다.
인덱스를 이용하면 가변 길이를 이용하면서도 주소를 빨리 구할 수 있다.
- B+ tree : root/branch.leaf 블록이 존재.
리프 블록만 데이터를 가짐.
리프 블록에서 리프 블록으로 이동 가능. -> 등호, 전방일치 등 범위 검색 가능
branch 노드도 데이터를 갖는 경우: B- tree
-인덱스 병합: 여러 개의 인덱스를 사용하는 경우, 각 인덱스로 검색 -> AND/OR
- 업데이트 속도를 향상시키기 위해: 데이터가 추가될때마다 업데이트(ranom write) 하지 않고, 메모리나 파일에 모아두었다가 한번에 업데이트한다.(sequential write.) 예: MySQL innoDB
- B+ 트리의 인덱스 값이 변경된 경우, 리프 블록의 내용도 변경해야하는 경우가 존재한다 : 리프 분할
동시에 여러 클라이언트에서 하는 경우 문제가 생길 수 있음. -> LOCK 사용
파티션 테이블 : 사용자에게는 테이블이 하나지만 내부로는 복수의 테이블로 관리, 인덱스도 복수로 구분 -> 병렬 갱신 가능.
3. 테이블과 릴레이션
◆ - 참조 무결성:
정규화 이론
1) 제1 정규화: 테이블 구성에서 중복/반복/복합값을 포함한 구조 제거
2) 제2 정규화: 일부 열에 의해 결정되는 열 제거
3) 제3 정규화: 모든 열은 기본키에 의해 값이 하나로 결정되어야한다.
4. 장애와 대응
1) RAID
하나의 서버를 여러 개의 HDD에 탑재하고 동일한 데이터를 두 개 이상의 HDD에 분산하는 기술
RAID 0: 복수의 HDD에 데이터 기록, 읽고 쓰기. 이용 가능 용량 - 디스크 개수
RAID 1: 두 대의 HDD에 동일한 데이터 작성. 이용 가능 용량 - 디스크 수의 반절
RAID 5: 오류 정정 부호인 패리티 데이터와 함께 분산하는 방식. 이용가능 용량 - 디스크 수-1개
2) 복제
-1) 단방향
마스터 -> 슬레이브 : 바이너리 로그 전송.
슬레이브는 바이너리 로그를 실행함으로써 마스터와 동일한 상태가 됨.
- 단방향/비동기(MySQL 채택)
슬레이브가 바이너리 로그를 받아서 실행을 완료하기 전까지는 동일하지 않음.
- 단방향/준동기화
슬레이브에 바이너리 로그가 도착할 때까지 마스터가 기다린 뒤 다시 실행 시작.
시간이 조금 더 걸림.
- 단방향/동기화
슬레이브에서 처리를 마칠때 까지 마스터가 기다림.
-2) 양방향
MySQL cluster : 데이터 노드라는 특수 서버에서 데이터를 가지고 있음.
여러 데이터 노드가 동일한 데이터 가짐.
한 데이터 노드 업데이트 -> 다른 데이터 노드에 동기화
3) 장애 대처: 현재는 슬레이브가 다운되면 새로 만들어 전체 복구하는 방법 채택
데이터양이 많을 수록 부하 증가.
5. 트랜잭션
1) 처리 중간에 멈춘 상태에서 데이터 복구
2) 무정지성 : 장애 발생 뒤에도 다시 정상가동을 도움(백업 이후의 처리에 대한 기록이 남음)
LSN(Log Sequence Number)가 증가하고 REDO 로그 생성.
commit마다 데이터를 변경하는 것이 아니라 redo 로그를 생성한뒤 한 번에 처리
sequential write은 처리가 빠르므로 부하 작음.
◆
샤딩:
같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장하는 방법
무결성
1. 영역 무결성
- 한 컬럼에 대해 NULL의 허용 여부와 타당한 데이터 값들을 지정합니다.
- 자료형(Data type), 규칙과 제약(Rules), 값 범위 등을 제한합니다.
2. 참조 무결성
- 기본 키와 참조 키 간의 관계가 항상 유지됨을 보장합니다.
- 참조되는 테이블의 행을 이를 참조하는 참조키가 존재하는 한 삭제될 수 없고, 기본키도 변경될 수 없습니다.
3. 개체 무결성
- 테이블에 있는 모든 행들이 유일한 식별자를 가질 것을 요구합니다.
출처: https://jwprogramming.tistory.com/53 [개발자를 꿈꾸는 프로그래머]
'CS 기본 이론 > Database_SQL' 카테고리의 다른 글
빅데이터를 지탱하는 기술 (0) | 2019.11.13 |
---|---|
SQL 더 쉽게, 더 깊게 (0) | 2019.11.11 |