SQL 캐싱이란 무엇입니까?


최상의 답변

Scott McNulty가 이전에이 질문에 답변했듯이 SQL 캐싱은 a에 대한 쿼리의 결과로 생성 된 결과 집합을 저장하는 것입니다. 나중에 결과를 얻기 위해 결과 사본을 사용합니다. 즉,이 문제에는 단순한 “캐싱”보다 훨씬 더 많은 것이 있습니다. 진짜 문제는 캐싱이 아니라 어려운 부분 인 무효화입니다. 정보를 저장하는 것은 어렵지 않습니다. 정보가 언제 유효하지 않은지 아는 것은 어렵지 않습니다.

캐싱과 관련된 두 번째 미묘한 문제도 있으며, 이것이 바로 캐싱의 네트워크 대기 시간 영향입니다. 대부분의 캐시 솔루션은 데이터베이스처럼 독립적 인 서버로 작동합니다. 캐시를 쿼리하려면 데이터베이스와 같이 네트워크를 통한 왕복을 다시 수행해야합니다. 캐시가 응답을 안정적으로 갖고 있지 않고 데이터베이스보다 빠르게 응답하면 실제로 캐시로 성능을 향상시키는 것이 매우 어렵습니다.

SQL을 최적으로 캐시하려면 해결할 수있는 솔루션이 필요합니다. 몇 가지 문제 :

  1. 어떤 콘텐츠를 캐시해야합니까?
  2. 캐시 된 결과가있는 경우 유효하지 않은 것으로 간주해야합니까?
  3. 캐시가 적중 된 경우 속도가 너무 낮 으면 캐싱을 중지하고 페널티를 피하기 위해 조회를 중지하도록 캐시 로직이 자동으로 조정됩니까?

현실은 대부분의 코너 케이스를 설명하기 위해 매우 복잡합니다. 캐싱을위한 최상의 성능 시나리오를 보장하는 논리 집합입니다. 이는 Redis 또는 Hazelcast 와 같은 캐시 엔진을 애플리케이션에 구현하는 것만 큼 간단하지 않습니다. . 대신 어떤 데이터가 변경되고 있는지 검사하고, 데이터를 자동으로 무효화하고, 그렇지 않으면 외부 캐시 엔진에 대한 요청과 데이터베이스에 대한 요청을 최적화 할 수있는 지능형 캐시 엔진이 필요합니다.

이러한 엔진 중 하나는 Heimdall Data 에서 제공합니다 (면책 조항, 저는 Heimdall Data의 CTO입니다). Heimdall 엔진은 JDBC 드라이버 또는 프로토콜 수준 프록시로 애플리케이션에서 데이터베이스로 전달되는 콘텐츠를 자동으로 캐시하고 콘텐츠를 자동으로 무효화하며 캐시되는 콘텐츠도 최적화합니다. 이를 통해 개발자는 캐시가 아닌 기능에 집중할 수 있으며, 경우에 따라 애플리케이션 개발 및 디버깅 시간을 20 ~ 40 \% 절약 할 수 있습니다.

답변

일반적으로 캐시는 저장입니다. 자원 집약적 인 프로세스의 결과로 자원을 다시 사용할 필요가 없습니다.

SQL에서; 항상 공급 업체 기술에 따라 다릅니다. MS-SQL, Oracle, MySQL 및 PostGres는 모두 캐시 대상에 대해 서로 다른 선택권을 가지고 있습니다. 결과, 쿼리, 심지어 쿼리에 대한 실행 계획까지 모두 저장하여 나중에 동일한 정보를 처리하려고 할 때 사용할 수 있습니다.

기본 데이터가 변경되는 경우 시스템에는 일반적으로 메커니즘이 있습니다. 캐시 된 정보가 “더럽고”더 이상 완전히 사용할 수 없음을 나타냅니다. 따라서 시스템에서 쿼리를 다시 실행할 수 있습니다.

당신은 항상 이것을 볼 수 있습니다. 쿼리는 얼마나 걸리나요? 두 번째로 실행하면 항상 더 빠른 이유는 무엇입니까? 이것이 그 이유입니다. 시스템은 이전에 요청한 내용을 효과적으로 기억하고 그 당시 기억했던 답변을 제공합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다