2017-03-25 9 views
1

10 년간의 광산 경험에서 우리는 기본적으로 RDBMS를 Oracle 또는 SQL 서버 중 하나를 사용하여 구성했습니다. 기본적으로 (적어도 oracle에서는) 비활성화 된 결과 캐시를 조정하지 않았습니다. ehcache/memcache/redis 등의 응용 프로그램 수준에서 캐시 옵션을 항상 캐싱 솔루션으로 사용하는 것을 보았습니다.RDBMS 결과 캐싱 대 애플리케이션 레벨 캐싱?

질문 - DB 서버에서 메모리 대역폭을 사용할 수 있다면 성능상의 문제가 있는지 여부에 관계없이 결과 캐시 즉 DB 수준을 적극적으로 사용하는 것은 좋지 않은 옵션입니까? 이 쿼리 결과가 인 경우 select * from employee where department = 'Finance'은 항상 재무 부서에 해당하여 캐시됩니다.

내 질문에 하드웨어가 특정 요구 사항에 따라 LRU 또는 적절한 알고리즘을 지원할 수 있다면 DB 레벨 캐싱을 사용하지 않는 것이 좋습니다. 키를 생성하고 (예 : memcached와 같이) 별도의 서버로 배포해야하는 응용 프로그램 수준 캐싱이 필요합니까?

+0

내 일반적인 규칙 : 캐시를 캐시하지 마십시오. 데이터베이스는 모든 종류의 캐싱을 수행합니다. 캐싱의 또 다른 레이어를 추가 할 필요가 거의 없습니다. –

답변

1

예를 들어 ehcache이라는 응용 프로그램 수준 캐싱을 사용하면 응용 프로그램에서 네트워크를 통해 데이터를 가져 오는 대가를 지불하지 않아도됩니다. (귀하의 응용 프로그램이 귀하의 RDBMS와 동일한 컴퓨터에서 호스팅되지 않는다고 가정하십시오)

looking at the common latency in IT systems에 대해 생각하면, 아마 이미 귀하의 응용 프로그램에 대한 큰 이익이 될 것입니다.

+0

동의. 여기서 포인트는'EHcache (데이터베이스에서 가져 오기 위해 이미 자주 필요하고 비용이 많이 드는 오브젝트 용)'와'DB 캐시 (작업량에 따라 비용이 많이 들거나 사용되지 않을 수도있는 DB 오브젝트 용) '입니다. 포인트 LRU를 사용하여 DB 캐시를 큰 값으로 설정하지 말고, IO 호출 대신 메모리에서 쿼리 결과 중 일부 (값 비싸지 않은지 여부)를 가져올 수 있습니다. 적어도 크지 않은지에 대해서는 약간의 차이가있을 것입니다. – emilly

+0

예, 당신이 묘사하는 것이 의미가 있다고 생각합니다. 그러나 그것은 또한 당신이 구성하고 기억하기 위해 2 개의 캐시로 끝나는 것처럼 들리지만 ... –