2022. 4. 17. 15:16ㆍ코딩/TIL
1. 트랜잭션
DB의 상태를 변화시키기 위해서 수행하는 작업의 단위
DB의 상태를 변화시킨다는 의미는 SQL을 이용하여 DB에 접근한다는 의미이다.
ex) SELECT, INSERT, DELETE, UPDATE 등
작업 단위는 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것
즉 작업단위는 상대적이라는 의미이다.
게시판을 예로 들자면,
게시판 사용자 - 게시글 작성, 올리기 버튼 > 그 후에 다시 게시판에 돌아오면 게시판은 자신의 글이 포함된 업데이트된 게시판을 보게 된다.
이러한 상황을 DB 작업으로 옮기면
1) 사용자가 올리기 버튼을 눌렀을 시 = INSERT
2) 사용자가 입력한 게시글의 데이터를 옮긴다
3) 게시판을 구성할 데이터를 다시 SELECT 하여 최신 정보로 유지
이런 작업 단위를 하나의 트랜잭션이라고 한다.
트랜잭션의 특성 4가지
1. 원자성 = 트랜잭션이 데이터베이스에 모두 반영되던가 아니면 전혀 반영되지 않아야 한다.
2. 일관성 = 트랜잭션의 작업 처리 결과가 항상 일관성 유지
3. 독립성 = 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다
4. 지속성 = 트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 한다.
2. CRUD
데이터베이스의 테이블의 변화를 주는 트랜잭션 연산들
=> SQL을 이용해서 DB에 접근함으로써 테이블의 변화를 준다
C : CREATE R : READ U : UPDATE D : DELETE
CRUD 분석
CRUD 분석으로 테이블에 발생되는 트랜잭션의 주기별 발생 횟수를 파악하고 연관된 테이블들을 분석하면 테이블에 저장되는 데이터의 양을 유추할 수 있다
CRUD 매트릭스
2차원 표. 행에는 프로세스 / 열에는 테이블을 / 행과 열이 만나는 위치에는 프로세스가 테이블에 발생시키는 변화를 표시하는 업무 프로세스와 데이터 간 상관 분석표
CRUD 매트릭스를 통해 프로세스의 트랜잭션이 테이블에 수행하는 작업 검증
3. Index
데이터 레코드를 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 데이터 구조
데이터베이스의 테이블에 대한 검색 속도를 향상시켜주는 자료구조
테이블의 특정 컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 물리적 주소와 함께 저장
컬럼의 값과 물리적 주소를 key,value의 한 쌍으로 저장
Index의 장점은 테이블을 검색하는 속도와 성능이 향상된다
Index의 단점은 인덱스를 관리하기 위한 추가 작업이 필요하고, 추가 저장 공간이 필요하고 잘못 사용하는 경우 검색 성능이 저하된다.
Index 자체가 내가 원하는 데이터를 찾기 위한 색인인데, (우리가 책에서 원하는 부분을 표시하는 것과 같음)
원하는 데이터를 찾기 위해 모든 레코드를 순차적으로 검색하는 TABLE SCAN 발생 가능 (시간이 겁나 걸리겠지?)
4. 트리 기반 인덱스
B Tree
인덱스를 이루고 있는 자료구조의 일종
B의 의미는 어떤 의미라고 밝혀진 바는 없고, 아마 Balanced를 의미하는 B가 아닐까 라는 추측만 있는 상황
MySQL의 DB 엔진인 InnoDB는 B+tree로 이루어져 있는데 B 트리의 확장된 개념이다.
트리 구조는 데이터베이스에 한정하지 않더라도 시스템 세계에서는 데이터를 유지하기 위해 자주 사용하는 구조
탐색 시, 단시간 내에 실행할 수 있기 때문
B 트리의 핵심은 데이터가 정렬된 상태로 항상 유지. 루트 노드 > 하위 노드로 크기를 비교하면서 데이터 검색
이진탐색 노드와 비슷하지만 한 노드 당 자식 노드가 2개 이상 가능
B 트리의 장점 한 가지는 '어떤 값에 대해서도 같은 시간에 결과를 얻을 수 있다는 균일성'
B+ 트리는 B 트리의 확장된 개념
B 트리는 branch나 Leaf 노드에 key와 데이터를 담을 수 있지만 B+ Tree는 오직 리프 노드에만 데이터 저장 가능
'코딩 > TIL' 카테고리의 다른 글
220603 Web TIL) 시맨틱태그,EntityCode (0) | 2022.06.04 |
---|---|
220413 웹TIL) 리액트 - key props와 컴포넌트의 차이 - key props편 (0) | 2022.04.14 |
220408 웹TIL) state,리액트 생명주기,axios,async~await (0) | 2022.04.08 |
220407 웹TIL) 함수형/클래스형 컴포넌트,state,setState() (0) | 2022.04.08 |
220406 웹TIL) 리액트 map()함수 그리고 컴포넌트, key props (0) | 2022.04.07 |