2009-09-29 4 views
2

쿼리에 따라 캐시 항목을 설정하는 효과적인 방법입니까?ASP.NET에서 SqlCommand를 사용하여 캐시 종속성을 설정하십시오.

HttpRuntime.Cache.Insert(
       "ListLanguages", 
       list, 
       new SqlCacheDependency(command), 
       DateTime.UtcNow.AddMinutes(AppConfiguration.CacheExpiration.MinimumActivity), 
       Cache.NoSlidingExpiration); 

명령으로 이전에 초기화하는 SqlCommand입니다 :

"ListLanguages는"단순히 선택하는 저장 프로 시저입니다
SqlCommand command = new SqlCommand("Listlanguages", connection); 

.

이 방법은 집계 된 캐시 종속성보다 쉽고 오류가없는 방법입니다. (테이블 자체를 집계 할 필요가 없기 때문에 오류가 없음을 의미합니다. :).

경험 많은 프로그래머는 어떻게 생각합니까?

+0

우리가 당신보다 더 경험이 있는지 어떻게 알 수 있습니까? ;) – AnthonyWJones

답변

2

저장 프로 시저를 사용할 필요가 없다고 생각하면 명령은 그 안에 직접 포함되어있는 select 문을 기반으로 할 수 있습니다.

개인적으로 나는 SqlCacheDependency를 피하고, 나는 항상 그 쿼리가 뭔가를 가지고 있을지도 모르는 것에 중점을 두어 그 중개인 시스템이 기반을 두지 않고 항상 자신이 무엇인지 기억할 수 없다고 우려하고 있습니다. 그것은 또한 조금 복잡해 보이는 것 같아서 연약한면에 있을지도 모른다고 걱정합니다.

내가 프로필이 캐시 된 사본을 삭제 업데이트하는 코드를했을 자신의 프로필을 업데이트하는 사용자의 특정 경우 편집

.

더 일반적인 의미에서 최신 정보를 수신하고 절대 만료를 설정할 수있는 대기 시간을 설정할 수 있습니다.

비싼 SQL 쿼리의 경우 다른 테이블의 일반 요약을 준비하고이 데이터 (예 : SP)를 업데이트하는 코드를 사용하여 준비된 데이터를 조정하거나 삭제하십시오.

나는 SqlCacheDepencency를 결코 사용하지 않을 것이라고 말하지는 않지만, 지금까지는 그것이 존재한다고 확신하지만 시나리오를 보지 못했습니다. 데이터베이스를 수정할 수있는 모든 코드를 완벽하게 제어하지 못하는 시나리오가 발생할 수 있습니다.

어쨌든 "최신"이란 무엇입니까?

웹 응용 프로그램에서 사용자가 볼 수있는 최신 정보는 마지막 응답에서 제공 한 정보입니다. 다음은 고려해야 할 몇 가지 사항입니다.

  • 그들은 뭔가를 가져 왔지만 5 분 동안 전화 통화가 중단되었다고합니다. 그들이 돌아 오는 데이터가 5 분이 경과되어 현재 구식 일 수 있다는 것은 얼마나 의식이 있습니까?
  • 데이터를 제출하기 전에 사용자가 몇 밀리 초를 가져와 사용자가 보았을 것으로 예상되는 것을 바꿀 수 있습니다. 얼마나 많은 문제가 있습니까?
  • 누군가 새로운 데이터를 입력하고 있지만 아직 제출하지 않았습니다. 데이터베이스의 현재 데이터 자체가 오래된 것입니까?

내가 가리키는 바로는 시스템에 캐시 영리성을 얼마나 투입했는지에 관계없이 피할 수없는 대기 시간이 있으며 많은 지연을 허용하지 않고 이러한 종류의 대기 시간을 허용한다는 것입니다.

우리가 최신 정보를 제공해야한다는 많은 상황에서 그러한 의무가 실제로 보장되지는 않는다는 점을 명심하십시오. 이것의 좋은 예는 SO 그 자체입니다. 여기에 표시된 많은 쿼리 결과는 실제로 캐싱되며 우리가 작성한 변경 사항과 거의 일치하지 않는 데이터를 볼 수 있습니다. 그러나 다른 사람들은 우리의 변화에 ​​대해 알지 못하며, 우리가 만든 순간을 그들이 보았던 것이 중요하지 않습니다.

+0

음 ... 알 겠어.하지만 어떻게 캐시에 보관하고 제시된 데이터가 업데이트된다는 충분한 자신감을 가지고 데이터를 제공합니까? 예를 들어 사용자가 프로필을 업데이트하면 변경되지 않았 음을 알기가 혼란스러워 할 것입니다. S –

+0

Anthony, 내가 일하는 방식에 대해 궁금해서 걱정과 걱정을합니다. –

+0

Anthony와 동의하십시오 ... SqlCacheDependency는 사용하기 까다 롭습니다. 실제 런타임 동작의 많은 부분을 예측하기가 어렵 기 때문에 캐싱을 실제로 수행하는지 여부를 아는 것도 어렵습니다. –

관련 문제