2012-10-05 1 views
1

사전에 액세스 할 수 있도록 웹 서비스를 만들어야한다면 각 요청마다 SQL 쿼리를 실행하지 말고 이전 결과를 메모리에 저장하고 DB에만 액세스하는 것이 좋습니다. 엔트리가 지금까지 요구되지 않았을 때.캐싱 패턴

그러나 이렇게하면 내 사전이 늘어나고 전체 SQL 테이블이 메모리에 저장됩니다.

각 항목의 사용 빈도에 따라 일종의 사전 청소 패턴을 찾고있었습니다. 하지만 "마지막 액세스 시간"은 시간이지나면서 커질 것이기 때문에 좋은 방법이 아니며 히트 넘버는 내 사전 항목의 평균 현재 사용량을 반영하지 않습니다.

DB 액세스를 가능한 한 많이 버려야하는 항목을 알 수있는 방법이 있습니까?

+0

"평균 현재 사용량"은 어떻게 정의합니까? – Sameer

답변

0

이 문제를 정확히 해결하는 수많은 오픈 소스 제품이 있습니다. 로드가 많은 사이트의 경우 memcachedredis에 대한 좋은 경험이 있습니다.

0

"가장 최근에 사용한 것"을 나타내는 "LRU"가 가장 일반적입니다. 이것은 실제로 언급 한 "마지막 액세스 시간"입니다.

위키 백과, 아마 당신은 당신을 위해 작동 하나를 찾을 수있는 다른 전략의 많은 예제가 있습니다 http://en.wikipedia.org/wiki/Cache_algorithms#Examples

0

"증가 및 메모리에 전체 SQL 테이블로 끝나는 것입니다 내 사전"- 당신은 어떻게 정의 할 전체 SQL-Table을 메모리에 저장합니다. 고정 된 메모리 크기를 정의 할 수 있습니까? 그렇다면 고정 크기의 우선 순위 대기열을 만들 수 있습니다. 가장 먼저 튀어 나오는 요소는 가장 자주 충돌하는 요소 여야합니다. Comparable/Comparator Interface를 사용하여이를 수행 할 수 있습니다. 큐가 가득 차서 들어오는 요소를 삽입해야하는 경우 queue.pop()을 트리거 한 다음 들어오는 요소를 삽입하십시오. 이렇게하면 자주 사용하지 않는 것들을 계속 청소할 수 있습니다.