2010-08-15 2 views
0

동일한 데이터를 데이터베이스 테이블에 저장하는 대신 HttpCache를 사용하여 웹 서비스의 데이터를 버퍼링하면 어떤 문제가 발생할 수 있습니까? 일시적으로 서비스를 사용할 수없는 가설적인 상황에서 서버가 그 시간 동안 재부팅해야한다면 캐시를 다시 채울 수 없습니다. 이런 이유로 SqlServer 세션 상태에서 할 수있는 것처럼 캐시를 유지할 수 있습니까?ASP.NET HttpCache를 사용하여 웹 서비스의 데이터 버퍼링

HttpCache가 싱글 톤 패턴을 사용하여 구현 된 것을 읽었습니다. 그렇다면 캐시에서 오는 객체로 작업 할 때 뮤텍스를 사용해야한다는 의미입니까?

캐시가 다른 스레드에 의해 읽혀지는 동안 별도의 스레드 프로세스에 의해 동시에 업데이트되는 경우 어떻게됩니까?

감사합니다.

답변

2

캐싱 메커니즘에서 직면하게 될 가장 큰 문제는 부실 데이터입니다. 데이터는 캐시되므로 캐시 수명만큼 오래 될 수 있습니다. 트랜잭션 시스템에서 이것은 받아 들일 수 없지만 다른 시스템에서는 괜찮습니다. 데이터가 얼마나 오래되었는지 이해하십시오. 캐시를 지속 할 수 있는지는 모르겠지만 그렇게하려고 데이터베이스에 갈 생각이라면 먼저 캐시를 사용하지 않는 것이 좋습니다. 일부는 빠른 메모리 내 액세스이므로 귀하의 데이터에.

예, 캐싱은 싱글 톤과 같은 중앙 집중식 메모리 저장을 사용합니다. Mutexes에 대한 귀하의 질문에 대한 대답은 데이터 액세스 패턴에 달려 있다는 것입니다. 대부분의 사람들은 캐시를 사용하여 데이터를 한 번 채 웁니다. 값이 시간 초과되면 캐시는 항목을 널 (null)로 만들고 다시 채 웁니다. 예, 다중 클라이언트가 캐시를 한 번에 채우는 것을 방지하기 위해 뮤텍스 (또는 더 많은 경우 lock 문)를 사용하여 액세스를 보호 할 수 있습니다. 하지만 IMO는 데이터 일관성 지점보다 성능이 더 뛰어납니다. 클라이언트가 동일한 데이터로 서로를 덮어 쓸 가능성이 있기 때문입니다 (다시 말하면 상황에 따라 다릅니다).

+0

캐시를 사용하지는 않지만 코드는 이미 작성되었습니다. 5 분마다 캐시를 ​​다시 채우는 백그라운드에서 실행되는 별도의 스레드가 있습니다. 이것은 한 달에 40-100k 방문자가있는 사이트에 있습니다. 나는 그것이 잘 스케일링 될지 여부와 스레딩/캐싱이 어떤 문제를 일으킬 가능성이 있는지를 확증하려고 노력 중이다. – user23048345

+0

(팜 시나리오 인 경우) 얼마나 많은 컴퓨터가 캐시를 업데이트하려고하는지에 따라 달라집니다. 발생한 문제는 캐시가 다시 채워지는 방식에 따라 달라질 수 있습니다. 안타깝게도 구현 방법에 대한 심층적 인 세부 정보는 매우 중요합니다. –