현재 학교 도서관에서 개인 글쓰기 플랫폼을 담당하고 있습니다. 기본적인 비즈니스 모델은 완성되었지만 프로젝트가 아직 높은 동시성 환경에 최적화되지 않았습니다.
각 학생은 책을 읽은 후 서평을 쓰거나 메모를 할 수 있습니다. 서평은 공개되고 메모는 비공개입니다. 현재 관행에 따르면 모든 학생 작업은 쿼리를 위해 데이터베이스에 액세스하므로 향후 성능 병목 현상이 분명히 발생할 것입니다.
ehcache 관련 튜토리얼을 살펴봤지만 마땅한 해결책이 없습니다. 가장 큰 이유는 캐시가 유효하지 않은지 판단할 수 없다는 것입니다. 예를 들어, 빈도가 높은 학생의 노트를 특정 개수만큼 캐시에 넣었다면, 특정 제한 시간을 5분으로 설정했다면, 이 5분 내에 새로운 노트가 추가되거나 수정되면 어떻게 해야 할까요?
예를 들어, mybatisselect * from comments condition
,我可以通过ehcache建立一个内存缓存,但是如果comments
에 sql문이 대응된다면, 새로운 레코드가 추가되거나 업데이트된다면, ehcache에 추가된 캐시는 어떻게 정상적으로 업데이트될 수 있을까요?
네티즌이 관련 솔루션을 제안할 수 있나요? 감사합니다 :-)
代言2017-06-12 09:21:37
캐시이기 때문에 데이터 효율성에 관대해야 합니다. 그렇지 않으면 실시간 데이터를 엄격하게 제어하려는 경우 쿼리용 데이터베이스에만 액세스할 수 있습니다.
주제가 설명하는 비즈니스 시나리오에 따르면 일반적인 해결책은 외부 인덱스(물론 인덱스가 완전 실시간은 아님)를 통해 도서와 서평 간의 관계를 유지한 다음 kv 캐시(redis, ehcache, 지도 등) 서평의 특정 내용을 캐시합니다.
데이터를 업데이트할 때 일반적으로 데이터베이스가 먼저 업데이트된 다음 캐시가 업데이트될 필요가 없습니다.
데이터가 업데이트(삽입)되면 업데이트에 따라 해당 관계를 인덱스에 추가해야 합니다.
간단한 외부 색인의 경우 데이터베이스에 (도서-서평) 관계형 테이블을 추가하고, 색인을 구축하고, 서평을 쿼리할 때 먼저 관계형 테이블을 쿼리(페이지 쿼리)한 후, 특정 서평을 쿼리하면 됩니다. 서평 기본 키를 통해 정보(단일 서평 정보에 캐싱 추가)를 두 번 쿼리하여 메모리에 데이터를 모으는 것이 좋으며, 조인 테이블 쿼리를 사용하지 않는 것이 좋습니다(데이터베이스 성능에 영향을 미침). 관계형 테이블 데이터에 대한 캐시를 만들 필요는 없습니다. 서평 정보의 캐시만 늘리면 됩니다.