2013-04-28 6 views
0

일부 파일을 기반으로 처리량이 많은 소프트웨어가 있습니다. 이 과정에서 SQL Server의 일부 테이블을 쿼리해야하는데 이로 인해 DB와 응용 프로그램 성능이 저하됩니다. (다른 응용 프로그램은 동일한 테이블을 사용합니다).SQL Server 오버 헤드 캐싱 쿼리 결과 줄이기

쿼리와 코드를 최적화 한 후에 더 나은 결과를 얻지 만 충분하지 않습니다. 연구 후 나는 해결책에 도달했다 : 일부 쿼리 결과를 캐싱. 내 아이디어는 캐시되는 하나의 특정 테이블 (오버 헤드로 식별) 행을 파일에 필요한 프로세스입니다.

나는 (내가 MS 스택에있어) AppCache를 원단을 사용하여 생각했다가 작은 물체에 대한 큰 메모리 사용량이 몇 가지 테스트를했다 (앱 캐시 서비스를 객체 않고 RAM 사용 ~ 3백50메가바이트이). 하지만

내 두 번째 옵션은 MongoDB를이 캐시 저장소로이다 (LASTNAME, 사회 보장 번호 (SSN), 생년월일 등을 위해 검색과 같은) 이러한 결과 테이블의 일부 쿼리를 확인해야합니다. 나는 이것에 대한 연구를했고 대부분의 사람들은 memcached 나 Redis를 사용하는 것이 좋지만 Windows 서버를 사용하고 있으며 공식적으로 지원되지는 않습니다.

이 경우 캐시 저장소로 mongo를 사용하면 좋은 방법입니까? 또는 AppFabric 캐싱 + 태그 검색이 더 좋습니다?

답변

1

병목 현상에 대해 충분히 알지 못하기 때문에 무엇이 더 좋은지 알기가 어렵습니다. 많은 것은 토론중인 데이터의 품질에 따라 다릅니다. 데이터가 매우 정적이며 지속적으로 호출되지 않지만 데이터 세트를 컴파일하는 데 시간이 오래 걸리는 경우 좋은 해결책은 구체화 된보기를 사용하는 것입니다. 이 데이터가 자주 호출되는 경우 일부 데이터 (예 : 앱 패브릭)에서 캐싱하는 것이 좋습니다. 많은 기술과 가능성이 있습니다. 하지만 네트워크 트래픽, 수요, 크기 등을 실제로 생각할 필요가 있습니다. 모든 세부 사항을 모른 채 여기에 대답하기는 어렵습니다. 올바른 방법으로 보이지만 매개 변수가있는 쿼리 만 있으면됩니다. 말하기 힘듭니다. 하지만 방금 게시 한 명단에 Materialized view를 추가합니다. 필요한 모든 데이터에서이 뷰를 작성하고 해당 내용에 액세스하는 것만으로도 충분할 수 있습니다.

+0

같은 데이터를 자주 변경하지 마십시오. 실제 문제는 파일 행당 SQLServer를 쿼리하는 데 필요한 시간과 내가하는 쿼리 유형입니다 (내 검색은 주로 varchar 열입니다). 이 쿼리는 다른 응용 프로그램을 차단하고 파일을 처리하는 데 너무 오래 걸립니다. 오늘 나는 1.07 시간에 260MB의 파일을 처리한다. 가까운 장래에 GB 파일을 처리 할 것이고 처리는 하루 이상 지속될 수 없다. – Zingui

+1

데이터가 꽤 정적인데 결과 집합 작성에 시간이 오래 걸리는 경우 Sql Server에서 "구체화 된보기"("인덱싱 된 뷰")를 만들 수 있습니다. 여기를 참조하십시오 : http : // msdn.microsoft.com/en-us/library/dd171921%28SQL.100%29.aspx 검색 기능을 만들려면 추가 테이블 등을 만들어야 할 수 있습니다. 그런 다음, 일부 프로세스가 모든 것을 채울 것입니다. 그런 다음 SQL Server에서 데이터 가용성을 높입니다. 이것이 사용자의 조건에 맞지 않으면 원하는 캐싱 메커니즘으로 항상 서버 메모리를 사용할 수 있습니다. –

+0

인덱싱 된보기는 당분간 약간의 비용을 절약 할 수 있지만 앞으로는이 오버 헤드를 줄이기 위해 전용 서버에서 캐시를 사용해야 할 것입니다. Thanks @ T.S. – Zingui

0

귀하의 장기 목표 또는 귀하의 신청에 대한 견적은 무엇입니까? 이것이 당신이 expereince 다음 DB를 조정하거나 MVL을 사용하여 대답하는 것입니다가는 가장 높은로드입니다. 그러나 이것에 대한 장기적인 해결책은 분산 캐싱이며 이미 이러한 라인을 따라 생각하고 있습니다. 귀하의 데이터 요구 사항은 우리가 "참조 데이터"또는 "조회 데이터"라고 부르며 제한된 DB 리소스로 다중 조회를 수행하면 성능 문제가 발생하고 DB가 성능 병목 현상이됩니다.

그래서 이미 생각하고있는 솔루션은 데이터베이스에 액세스 할 필요없이 캐시에서이 "참조"데이터를 캐시하는 동시에 데이터베이스와 캐시를 동기화합니다.

Appfabric 나는 당신이 언급 한 것과 동일한 지원 문제가 있으므로 너무 확신하지는 않을 것입니다. 예산은 얼마입니까? NCache?