2011-11-04 3 views
2

그래서 SQL Server 2008에서 상당히 많은 양의 데이터를 쿼리하는 ASP MVC 웹 응용 프로그램에서 작업하고 있습니다. 응용 프로그램이 시작되면 사용자에게 여러 필드가 포함 된 검색 마스크가 표시됩니다. 검색 마스크를 사용하여 사용자는 데이터베이스에서 데이터를 검색 할 수 있으며 마스크에 매개 변수를 지정하여 검색을 필터링 할 수도 있습니다. 검색 속도를 높이기 위해 서버 세션에서 데이터베이스 쿼리에 의해 반환 된 결과 집합을 저장합니다. 이후 검색 중에 세션에있는 데이터를 검색하여 DB 로의 불필요한 이동을 피할 수 있습니다.ASP MVC 응용 프로그램의 서버 세션에 많은 양의 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

데이터베이스 쿼리에서 반환 할 수있는 데이터의 양이 매우 클 수 있기 때문에 웹 응용 프로그램의 확장 성이 심각하게 제한됩니다. 애플리케이션을 동시에 사용하는 사용자가 100 명이라면 서버는 각 개별 사용자에 대해 세션에서 검색 결과를 유지합니다. 이것은 결국 꽤 많은 양의 기억을 먹을 것입니다. 내 질문은 지금, 세션에 데이터를 저장하는 가장 좋은 대안은 무엇입니까? DB에있는 쿼리는 시간이 꽤 오래 걸릴 수 있으므로 이미 검색 한 데이터에 현재 검색중인 데이터가 포함되어있는 경우 지금 당장 쿼리를 실행하지 않아도됩니다. 내가 고려한 옵션은 검색된 데이터를 저장하고 후속 검색에 사용할 수있는 내 검색 쿼리의 DB에 임시 테이블을 만드는 것으로 간주됩니다. 문제는 SQL Server에 대한 경험이 너무 많아서 검색을 수행하는 사용자가 여러 명인 경우 SQL Server에서 각 사용자에 대한 임시 테이블을 만들지 모르겠다는 것입니다. 다른 가능성이 있습니까? SQL Server의 임시 테이블을 사용한 아이디어가 효과가 있었습니까, 아니면 SQL Server의 메모리 문제로 이어질 수 있습니까? 도와 주셔서 감사합니다! :)

편집 : 도움이되고 통찰력있는 답변을 주셔서 감사합니다. 그러나, 나는 중요한 세부 사항을 언급하지 않았다. 데이터베이스에 쿼리 할 때 결과 집합의 형식은 사용자마다 다를 수 있습니다. 이는 사용자가 검색 마스크에서 미리 정의 된 다중 선택기 상자에서 열을 선택하여 결과 테이블에 포함 할 수있는 열을 결정할 수 있기 때문입니다. 사용자 A가 ColA, ColB 및 ColC를 결과 테이블에 표시하려면 검색 마스크의 다중 선택 상자에서 해당 값을 선택합니다. 그러나 사용자 B는 ColA 및 ColC 만 선택할 수 있습니다. 따라서 테이블 columsn이 반드시 모든 사용자에게 동일하지는 않으므로 모든 사용자에 대해 단일 테이블로 결과를 캐싱하는 것은 다소 까다로운 일일 수 있습니다. 따라서 나는 각 사용자의 캐시 된 테이블을 별도로 저장하는 대안을 거의 사용해야 할 것이라고 생각합니다. 아래에서 언급 한 HTML5 로컬 저장소 대체 옵션은 흥미로운 것으로 들립니다. 인트라넷 응용 프로그램이므로 사용자가 HTML5를 지원하는 최신 브라우저를 사용한다고 가정하는 것이 적절할 수 있습니다. 너희들은 어떻게 생각하니? 다시, 도와 줘서 고마워.

답변

1

쿼리 결과를 캐시하려면 웹 서버 나 클라이언트에서 어떤 형태로든 수행해야합니다. 모든 옵션에는 메모리가 필요하며 검색 결과가 사용자별로 다르므로 해당 메모리 사용량이 현재 사용자 수의 선형 함수로 증가합니다.

제 제안은 SQL에서 리턴 된 행 수를 제한하고 (TOP 사용) 또는 SQL 끝에서 조회를 최적화하는 것입니다. DB 쿼리에 상당한 시간이 걸리는 경우 SQL에서 최적화 할 수있는 좋은 기회가 있습니다.

0

SQL 세션 상태를 켜는 것이 좋습니다.

http://support.microsoft.com/kb/317604

플러스 :이 메모리 압력을 수정하고 적절한 성능 (즉, 읽기와 DB에 캐시를 쓰는)이있는 경우 어려움, 당신은 발견 할 것이다. 만약 perf가 괜찮다면 SQL 세션이 스스로하기 때문에 일종의 구현을 원할지도 모른다. 아래쪽 : 세션에서 제거하는 것에 대해 적극적이지 않은 경우 관련없는 페이지의 각 요청에 대해 직렬화 및 역 직렬화됩니다.

1

NoSql databases에 대해 이미 알고 싶습니까?

NoSql 데이터베이스의 아이디어는 읽기 또는 쓰기를 위해 최적화 된 정보를 저장하고 '쉬운 쿼리'(예 : 검색어에 대한 조회)로 액세스하는 것입니다. 크기를 쉽게 수평 적으로 조정할 수있어 매우 빠른 속도로 데이터를 검색 할 수 있습니다. 예를 들어 Google의 BigData를 생각해보십시오.

+0

팁에 대해 감사드립니다. 그러나 내 제품은 고객 회사를위한 것이며 데이터베이스를 변경할 수있는 권한이 없습니다. – cbbcloud

1

HTML5가 가능한 경우 로컬 저장소를 사용할 수 있습니다.

+0

이것은 정말 흥미로운 것 같습니다. 전체 .NET 객체를 로컬 스토리지로 직렬화하여 클라이언트에 보내거나 자바 스크립트를 사용하여 클라이언트 측에서 처리해야합니까? 어떤 링크 나 자습서를 참조 할 수 있습니까? 아직 HTML 5로 작업하지 않았습니다. – cbbcloud

+0

클라이언트 저장소가 데이터에 자주 액세스해야하는 경우에만 로컬 저장소 사용을 사용해야한다고 [여기] (http://stackoverflow.com/questions/3220660/local-storage-vs-cookies)를 읽었습니다. 그러나 내 시나리오에서는 서버가 클라이언트보다 데이터로 더 많은 작업을해야합니다. 따라서 쿠키는 로컬 저장보다 더 적합한 대안 일 수 있습니다. – cbbcloud

+1

쿠키가있는 경우 쿠키 당 4MB, 사이트 당 총 쿠키가 20 개로 제한됩니다. 얼마나 많은 데이터를 가져올 지 알고 있습니까? 그런 다음 변경 사항을 데이터베이스에 유지 한 다음 동시성에 대해 걱정해야합니다. 프레임 워크를 사용하여 해당 작업을 수행 할 수 있습니다. 이 블로그를 확인해보십시오. http://stephenwalther.com/blog/archive/2011/01/12/asp-net-and-html5-local-storage.aspx –

관련 문제