데이터베이스, DBMS, RDBMS
- 데이터베이스 : 데이터의 집합, 검색 또는 추출을 위해 용이하게 규합한 것
- DBMS(Database Management System) : 데이터베이스를 관리
- RDBMS(Relational Database Management System) : 데이터베이스를 관계형으로 관리
- SQL(Structured Query Language): 데이터베이스에 접,근 조작할 수 있는 데이터베이스 질의 언어
관계형
- 별개의 트랜잭션 하나가 곧 전체의 단위가 된다(All or Nothing), 이는 원자성과 같다. 트랜잭션은 어떤 수행을 돕는 논리적인 작업 단위의 별칭이며 커밋, 롤백된다. 전자의 경우 수행이 성공적으로 완료된 경우 관리자에게 알려준다. 후자의 경우 잘못처리 됐거나 비정상적인 요인으로 인해 종료됐을 때 이 연산 작업을 취소(Undo)하는 것이다.
- 중복의 최소화
- 정렬, 탐색, 분류 등과 같은 연산속도가 빠르다
- 정규화의 최소화
- 관계형이다보니 기존 작성된 스키마에 대해 변경사항이 있을 경우 수정하기 어려움
- 많은 양의 데이터를 처리하기에 비효율적
비관계형
- 키-벨류 형식의 지원.
- 관계형과 다르게 조인, 슈퍼키, 외래키 지정하지 않음
- 그러므로 스키마에 대한 명세가 없음
- 대용량 데이터 처리 적합
- 모델링의 유연성
- 확장에 용이
- 키값 저장의 최적화로 인해 효율성 증가
- 방대한 양의 데이터 연산을 할 경우 성능 저하가 일어남
정참조와 역참조
1) 정참조 : select_related. 일대일, 다대일 일 경우. 쿼리 자체 내에서 조인 실시. 쿼리를 한번 날림.
2) 역참조 : prefetch_related. 일대다, 다대다 일 경우. 파이썬에서 조인 실시. 쿼리를 두번 날림.
DB Replication
두 개 이상의 DBMS 시스템을 주종관계로 나눠 동일 데이터를 저장하는 것(master/slave)
실제 수정사항 반영본은 주(master) 데이터베이스에, 실 데이터는 종(slave) DBMS에 복사한다.
서버의 부하를 낮춰주며 읽기 성능 향상 효과를 가져온다.
주로 데이터의 안정성을 위해서 실시한다. 장애 복구시 데이터의 소실을 최소화 할 수 있다.
- 읽기쓰기 : master
- 읽기전용 : slave
- 병목현상 해결(Scale out Soloution) : 읽기 요청을 분산함으로써(slave) 그로인해 병목현상을 줄일 수 있다.
- 분석 및 백업(Data Security, Analytics) : slave 로 복제됨에따라 자동 백업, 또 분석이 가능하다.
지원하는 데이터베이스 : Postgresql, Mysql, Maria DB
데이터베이스 설계 과정
- 요구 조건 분석 = 고객사, 클라이언트의 요구조건 분석, 설계해야 할 것 파악.
- 개념적 데이터 모델링 = 엔티티(개체) 중심 ERD 명세.
- 논리적 데이터 모델링 = 설계과정의 핵심. 논리적 스키마 설계. 구조의 무결성, 정규화
- 물리적 데이터 모델링 = 특정 데이터베이스로 설계. 테이블 생성.
DB Construction
DB 인덱싱
흔히 말해 인덱스란 사전을 찾을때 알파벳을 알려주는 개념. 말머리와 같다.
즉, 인덱스는 데이터 탐색 속도를 향상하기 위해 사용한다.
- 데이터베이스 테이블 탐색 속도 높여주는 자료구조
- 인덱스는 테이블 내에서 한 개, 또는 여러개일 수 있다.
- 검색의 효율성 증가 뿐만 아니라 레코드 접근 등에 대한 효율성도 제공
1) Clustered Index = key값 기반으로 sorting(정렬).
2) Unclustered Index = 정렬 없이 저장.
3) Hash Index = 찾고자 하는 값을 해시함수에 입력, 결과와 bucket 내용과 비교해 레코드 위치를 찾음. 성능이 좋고, 출력값의 크기는 줄어든다는 장점. 하지만 탐색 범위 광범위할 때 비효율적
4) B+Tree Index = leaf 노드 간 이동 가능.
포인터
변수의 메모리 공간주소를 가르킨다.