가장 좋은 대답은 그것이 달려 있다는 것입니다. 내 경험에는 캐싱 알고리즘을 선택하는 데 많은 요소가 있습니다.
고려해야 할 요소
- 읽기 / 쓰기 밸런스. (읽기 대 쓰기의 몇 퍼센트 액세스)
- 캐시 양.
- 캐시 뒤의 미디어 유형. (SATA 드라이브가 느리거나 SSD 드라이브가 빠릅니까?)
- 조회수 대 미스. (얼마나 자주 다시 쓰거나 다시 읽습니까?)
- 평균 액세스 크기 (페이지 크기를 선택합니다)
- 읽고 쓰는 데 비용이 얼마나 듭니까?
모든 다른 요소를 고려한 후에는이를 가장 잘 처리하는 캐시 알고리즘을 찾아야합니다. 예를 들어 많은 쓰기, 일부 다시 쓰기, 최근에 쓴 데이터 읽기 및 일종의 회전 미디어가있는 응용 프로그램이 있다고 가정합니다. 이 경우 일종의 하이브리드 캐싱 알고리즘이 필요합니다. 쓰기 데이터를 처리하려면 WOW (Wise order of Writes) 및 디스크에서 읽은 데이터에 대한 LRU 알고리즘과 같은 것이 필요할 수 있습니다. 그 이유는 디스크 액세스 비용이 매우 비싸고 WOW 알고리즘을 사용하면 데이터를보다 효율적으로 쓸 수 있고 LRU는 자주 액세스하는 데이터를 항상 캐시에 보관하기 때문입니다.
매우 빠른 액세스 시간을 갖는 SSD 디스크가 있다고 가정하면 디스크 액세스가 비교적 저렴하기 때문에 LRU 알고리즘을 선택하는 것이 좋습니다.
정말 말하고 싶은 것은 "최고의"답변이 없다는 것입니다. 가장 좋은 대답은 자신에게 적용되는 요소를 알고이를 처리하는 알고리즘을 선택하는 것입니다.
알고리즘을 찾는 방법
시스템을 프로파일하십시오. 일반적으로 메모리 액세스에 대한 통계를 유지하는 코드를 추가해야합니다. 프로파일 링을 통해 가장 중요한 요소를 확인할 수 있습니다.
과거에는 일정 기간 동안 모든 메모리 액세스를 추적하는 코드를 추가했습니다. 그런 다음 나중에 패턴을 찾습니다. 다시 읽기, 다시 쓰기, 순차적 액세스, 임의 액세스 등을 찾습니다.
중요한 것을 식별 한 후에는 어떤 유형의 처리가 가장 적합한 지 확인하기 위해 모든 다른 유형의 캐싱 알고리즘을 살펴 봐야합니다.