우선, 내가 운영하는 웹 사이트가 호스팅되며 memcached와 같은 흥미로운 것을 설치할 수있는 권한이 없습니다.더 나은 성능을 위해 캐싱 테이블 결과 ... 어떻게?
HTML 테이블을 표시하는 웹 페이지가 여러 개 있습니다. 이러한 HTML 테이블의 데이터는 값 비싸고 복잡한 MySQL 쿼리를 사용하여 생성됩니다. 가능한 한 쿼리를 최적화하고 성능을 향상시키기 위해 인덱스를 제자리에 두었습니다. 문제는 MySQL 서버가 망가져서 고생하는 내 사이트로의 트래픽이 많은 경우입니다.
흥미롭게도 - MySQL 테이블 내의 데이터는 자주 변경되지 않습니다. 실제로 그것은 몇 주에 한 번 일어나는 어떤 특정한 사건 후에 만 바뀝니다.
그래서 내가 지금했던 것은 이것이다 :
- 저장하면 URL이 파일 인 경우는
- 을 존재하는 경우 저장된 파일을 확인 액세스되는 파일
- 에 생성 된 HTML 테이블 1 시간보다 오래 걸리면 쿼리를 실행하고 파일을 출력하지 않으면 새 파일을 저장합니다.
이렇게하면 대다수의 요청에 대해 페이지가 매우 빠르게로드되고 데이터는 최대 1 시간까지 오래 사용할 수 있습니다. 내 목적을 위해 이것은 나쁘지 않다.
데이터베이스에서 데이터가 변경되면 캐시 파일이 삭제되지 않도록 보장하는 것이 좋습니다. 이 은 일 수 있습니다. 테이블에 대한 변경 쿼리를 수행하고 캐시 파일을 제거하는 코드를 추가하는 모든 스크립트를 찾아야합니다. 그러나 이후의 모든 변경 사항도이 메커니즘을 처리해야하므로 희박합니다.
우아한 방법이 있나요?
바닐라 PHP와 MySQL (최근 버전) 이외에는 아무것도 가지고 있지 않습니다. memcached를 가지고 놀고 싶습니다만, 할 수 없습니다. 캐시 무효화 및 명명 것들 :
추상화 레이어가 없습니다. 그러나 귀하의 게시물을 통해 데이터베이스의 모든 단일 테이블에 대해 자동 타임 스탬프를 사용하는 Updated 컬럼을 만들었습니다. 적어도 데이터의 신선도를 확인하고 이에 따라 캐시 파일을 삭제하는 간단한 쿼리를 할 수 있습니다. 찾고 있던 은색 총알이 아니지만 꽤 반짝입니다. – Vamos
사실, 필자는 모든 추상화를 다루는 적어도 하나의 추상화 계층을 가지고있다. 쿼리가 UPDATE/INSERT/DELETE 중 하나인지 확인할 수 있습니다. 그렇다면 쿼리를 실행 한 후 관련 캐시 파일을 삭제할 수 있습니다. 훌륭하지는 않지만, 내가 원하는대로 견고 함을 이루어야합니다. – Vamos