donaricano-btn

캐시(cache)


1. 캐시란?

- 사용 빈도가 높은 데이터를 고속으로 엑세스 할 수 있는 위치에 두는 것을 의미

- 일부 테이터를 테이터 출력 위치와 가까운 지점에 일시적으로 저장

- 데이터를 재사용을 전제로 한다

- CPU의 1/2차 캐시, 저장소 캐시, OS 페이지 캐시, 데이터 베이스 버퍼캐시


2. 사용되는곳

1) 브라우저 캐시

- 웹 브라우저가 접속한 페이지를 캐시한다

- 웹 서버 접속을 줄이고 브라우저 표시를 고속화

a. 캐시 데이터 위치

- 윈도우 7: C:\Users\[사용자명]\AppData\Local\Microsoft\Windows\Temporary Internet Files

- 윈도우 10: C:\Users\[사용자명]\AppData\Local\Microsoft\Windows\Caches

2) 캐시 서버

- 웹 서버와 네트워크 출입구 부하 경감

- 웹 서버와 클라이언트 사이에 캐시 서버를 배치

1. 클라이언트는 평상시와 같이 웹 서버에 접속하기 위해 DNS에 질의

2. DNS 서버는 웹서버가 아닌 캐시 서버 한대의 IP 주소를 반환

3. 캐시 서버에 콘텐츠가 있으면 캐시 서버에서 콘텐츠를 반환

4. 캐시서버에 콘텐츠가 없으면 웹 서버에서 취득

* CDN(Content Delivery Network)

- 요즘 캐시서버 보단 웹 서버나 다른 네트워크에 웹 콘텐츠 캐시를 배치하는 구조 이용


3. 주의 사항

- 데이터가 실제 데이터와 캐시라는 이중 구조로 저장, 리소스 소비가 늘어난다

- 시스템 가동 직후는 캐시가 없기 때문에 원하는 성능이 안나온다

- 시스템 성능, 데이터 불일치 발생

- 갱신 데이터를 캐시할 때 캐시가 여러개 있으면 갱신된 최신 데이터를 서로 뻇으려는 상태 발생 

블로그 이미지

리딩리드

,
donaricano-btn

탐색알고리즘(Searching) - 트리(Tree)(인덱스), 해시(Hash)


1. 탐색 알고리즘?

- 데이터 구조 : 데이터를 정리 방법

- 데이터 검색 : 탐색 알고리즘

1) 예    

- 영한 사전은 알파벳 순(데이터구조)으로 구성, 알파벳으로 찾기(탐색알고리즘)를 한다


2. 사용되는 곳

1) DBMS

 SQL 튜닝 시에 풀 스캔으로 돼 있어서 느렸는데, 인덱스를 생성해서 인덱스 스캔하니 빨라졌다?

- 반드시 인덱스가 빠른것은 아니다, 풀 스캔이 빠른 경우도 있다

A. 인덱스가 없을 때

- 디스크에서 테이블 데이터를 모두 읽어서 조사해야한다

- 모든 블록을 처음부터 순서대로 읽음(FULL-SCAN)

- 테이블 크기가 커질 수록 블록도 많아짐

B. 인덱스 있을 때

- 일반 적으로 B 트리 인덱스(트리 구조 계층이 깊어 지지않기 때문에:줄기가 많다)) 사용

- 최소한의 필요 블록만 읽으면 된다

- 검색이 빨라지는 대신 데이터 추가, 갱신, 삭제 시에 테이블 뿐만 아니라 인덱스 데이터도 갱신해야한다(오버헤드 발생)

(서류철을 정리할 때 인덱스 스티커를 붙여두면 빠르게 찾지만, 대신 서류를 추가 할 때는 인덱스를 수정해야함)

C. 인덱스 구조

SELECT * FROM EMP WHERE EMPNO = 7369

1. SQL이 발행되면 루트 블록을 본다

2. 브랜치블록1에 있다는 것을 안다

3. 브랜치 블록1을 보면 리프 블록1에 있다는 것을안다

4. 리프블록1을 보면 데이터 블록 어디에 데이터가 저장되어 있는지 안다

D. 인덱스를 잘못 사용하면?

- 인덱스는 읽을 블록 수를 줄이기 위한 수단이지만, 오히려 읽을 블록 수가 늘어 날 수 있다

예) 테이블 데이터를 모두 취득해야 하는 경우

- 테이블의 모든 블록뿐만 아니라 인덱스 블록까지 읽어야 하기 때문에 디스크 I/O증가한다

- 을 처음 부터 다 읽어야 하는데 인덱스를 보면서 처음부터 읽는 것과 같다

2) 해시 테이블

- 키와 값 조합으로 표를 구성한 데이터 구성

- 등호 검색에 강하다, 범위 검색에 약함

1) 키

- 키는 해시 함수를 통해 해시 값으로 변환

2) 값

- 해시 값은 고정 길이 데이터이기 때문에 조합 표의 데이터 구조가 간단해서 검색이 빠르다


블로그 이미지

리딩리드

,
donaricano-btn

Array, LinkedList

- 모두 순차적으로 데이터를 처리하는 구조

- 성능 측면에서 특징이 다르다

- 탐색알고리즘(해시/트리) 에서 사용하는 경우가 있다


1. 배열(Array)

- 데이터를 빈틈없이 순서대로 나열한 구조

- 탐색이 빠르다

- 데이터 추가 삭제가 느리다


2. 연결리스트(LinkedList)

- 데이터를 선으로 연결

- 탐색이 느리다

- 데이터 추가 삭제가 빠르다


3. 사용되는 곳

1) 해시 테이블

- 연결리스트 + 배열로 구성

예) 오라클 DB에서 SQL을 실행하면 SQL을 파스한 후 실행결과 반환

- 한번 실행된 SQL 관련 정보는 메모리에 저장(재사용하기위함)

- 재사용하기 위한 SQL 정보를 관리 할때 해시 테이블 사용

2) 오라클 SQL 재사용을 위한 해시테이블 구조

a. 처음 실행된 SQL 은 파스를 거쳐 실행된 후에도 메모리에 남는다(캐시)

b. 똑같은 SQL이 실행되면 메모리에 있는것 재사용

- 탐색이 빠른 배열 사용

- 배열은 고정 길이 데이터 구조라 제각각의 길이인 SQL을 관리할 수 없다

- 해시 함수를 이용하여 SQL을 고정길이 해시 값을 변환, 이 해시 값 배열로부터 연결 리스트를 찾아가면서 빠르게 탐색

c. 메모리가 부족하면 실행되고 있지 않은 SQL 해제한다

- SQL이 이곳 저곳에 산재하기 때문에 추가 삭제가 용이하려면 연결 리스트 사용


블로그 이미지

리딩리드

,
donaricano-btn

가변길이(variable-length)/고정길이(fixed-length)


1. 가변길이/고정길이란?

- 컴퓨터에서 처리하는 데이터도 정해진 상자 안에 저장

- 미리 사이즈가 정해져 있다면 고정길이, 정해져 있지 않다면 가변길이 

- 분류별로 정해져있는 칸막이 책꽂이(고정길이)

- 책 칸막이가 움직이면서 분류 조절(가변길이)


2. 특징

- 가변길이 : 공간을 유용하게 활용하지만 성능이 불안정

- 고정길이 : 쓸데없이 공간이 생기지만 성능면에서 좋다


3. 사용되는 곳

1) 파일 시스템

- 윈도우즈에 NTFS라 불리는 파일 시스템이 있다

- 파일 시스템에서 고정 길이로 각종 파일을 저장한다

- 파일 크기는 97.5KB 이지만 할당은 100KB로 고정되어서 저장된다

2) 네트워크

- 데이터 전송시 가변으로 할지 고정으로 할지 결정

- 만약 2000byte의 데이터라면

- TCP/IP로 전송할 데이터는 최대크기(MMS) 1460byte로 고정되서 전송

- 나머지 540byte는 가변적으로 전송된다


블로그 이미지

리딩리드

,