읽고 나면 진짜 쉬워지는 자료 구조 - 11. 캐시
데이터 접근 비용을 줄이기 위해 일부 데이터를 계산이 이뤄지는 곳에서 더 가까운 위치에 저장하는 자료 구조
🔖 11.1 캐시 소개
용어 정리
메모리 계층에 따른 속도와 공간 크기에 대한 trade-off가 알고리즘의 성능에 어떤 영향을 미치는지 이해하는 것이 중요하다.
캐시는 우리보다 한 걸음 앞에서 비싼(데이터를 읽는 데에 더 많은 시간이 걸리는) 데이터에 접근한다.
원격 서버를 호출하거나 지역 하드 드라이브에 접근하기 전에, 캐시에 지역적으로 데이터가 저장되어 있는지 검사한다.
데이터를 캐시에서 찾는 경우를 hit 이라고 부른다.
캐시가 hit되면 탐색을 멈추고 더 비싼 저장소를 호출하는 일을 피할 수 있다.
참고로 데이터를 캐시에서 찾을 수 없는 경우를 miss 라고 부른다.
다양한 캐시 방법
어떤 데이터를 교체할지 결정하기 위해 다양한 만료 전략을 사용한다.
데이터에 얼마나 자주 접근했는지 세어보는 방법,
가까운 미래에 데이터를 다시 사용할지 예측하는 방법 등이 있다.
🔖 LRU 만료와 캐시
LRU
LRU는 최근에 사용한 정보를 캐시에 유지한다.
LRU 캐시는 캐시 사용 시 우리가 직면하는 trade-off 유형을 잘 보여주는 방식이다.
이 캐시 전략의 직관적인 아이디어는 최근에 필요했던 정보에 다시 접근할 가능성이 높다는 것이다.
예를 들어, 같은 페이지 집합에 계속 접근한다면 이들 페이지의 변하지 않는 요소들을 지역적으로 저장하면 유리하다.
캐시가 가득 차면 가장 오래 전에 사용한 항목을 제거해 공간을 확보한다.
LRU 캐시 구축하기
LRU 전략을 이용한 캐시는 임의의 원소를 찾는 직업과, 최근에 사용하지 않은 원소를 찾는 두 가지 작업을 지원해야 한다.
그리고 이 두 작업을 모두 빠르게 수행할 수 있어야 한다.
캐시의 목적은 데이터를 읽는 연산을 가속시키는 것이기 때문이다.
해시 테이블과 큐를 이용해 LRU 캐시를 만들 수 있다.
🔖 11.3 다른 만료 전략들
MRU 전략, LFU 전략
MRU(Most Recently Used), LFU(Least Frequently Used)
앞서 소개한 LRU는 특정 캐시 아이템들 사이에서 공통 사용 패턴이 집중적으로 보이며, 캐시된 원소의 분포가 시간이 지남에 따라 변할 것으로 예상될 때 좋은 만료 전략이다.
이와 비교해 MRU 만료 전략은 반복 빈도가 낮은 항목에는 좋은 접근일 수 있다.
그리고 LFU 전략은 마지막으로 원소에 접근한 시점을 고려하는 대신, 전체 접근 횟수를 추적할 수 있다. 이 방법은 캐시된 항목들이 안정적으로 유지되는 경우에 유리하다.
Last updated