2009-07-10 4 views
1

모든 페이지에서 액세스 할 수있는 검색 기능이 내 사이트에 있습니다. 마스터 페이지 텍스트 상자 및 버튼 거래의 일반적인 최상위 항목입니다. 나는 가장 일반적인 검색 문자열을 캐싱하고 System.Web.Caching.Cache를 사용하여 결과를 얻는 더 좋은 방법을 찾고있다.자주 검색 문자열과 결과를 ASP.Net 캐시에 저장합니다.

검색 문자열을 적용 가능한 일부 사용자 권한 데이터와 연결하여 값을 List로 사용하여 캐시 키로 사용하려고 생각했습니다.

예를 캐시 키

Microsoft Visual Studio 2008 Service Pack 1--usergroup2,3,6,17,89

그러나 그 날은 캐시 키의 최대 길이 무엇을 생각하고 있어요. 열쇠가있을 수있는 최대 길이가 있습니까? 이 방법으로 물건을 저장하려고하면 꽤 긴 키 이름 값이 생길 수 있으며 가장 최근에 사용 된 가장 일반적인 검색을 유지하는 것에 대해서는 아무 것도하지 않습니다.

내가 수행하려는 것을 수행하기 위해 이미 일반적으로 사용되는 방법이 있습니까? 제 질문이 의미가 있습니까? 어떤 도움을 주셔서 감사합니다.

+0

마찬가지로 ... 메모리 제약 조건에 부딪치지 않도록 테스트하고 테스트하십시오. –

답변

1

하지만 캐시 키의 최대 길이는 무엇인지 생각해 봤습니다. 열쇠가있을 수있는 최대 길이가 있습니까? 이 방법으로 물건을 저장하려고하면 꽤 긴 키 이름 값이 생길 수 있으며 가장 최근에 사용 된 가장 일반적인 검색을 유지하는 것에 대해서는 아무 것도하지 않습니다.

키의 길이는 "문자열"자체의 최대 길이입니다.

여기 설명서에 따르면 http://msdn.microsoft.com/en-us/library/system.web.caching.cache.add.aspx에 따르면 키는 개체 유형의 값이있는 문자열로 정의 할 수 있습니다.

사용자 지정 개체에 고유 키 태그를 지정하면 캐시에서 쿼리 할 때 사용자 지정 개체에 태그가있는 복잡한 정보로 사용자 지정 개체를 개체 할 수 있습니다.

나는 조심스럽게 다시 요구 사항을 읽은 후 11072009_1154

편집, 난 당신의 목적은 자주 검색 문자열을 캐시하는 것으로 나타났습니다.

주어진 예제에서 자주 검색하는 문자열은 "Microsoft Visual Studio 2008 서비스 팩 1"일 수 있습니다. 필자의 의견으로는 키가되어야하며 값은 다른 필수 속성을 보유 할 추가 속성이있는 사용자 지정 개체입니다. 키 : "Microsoft Visual Studio 2008 서비스 팩 1" 값 : CustomObjectInstance : CustomObjectInstance.UserLanguage = "영어"와 CustomObjectInstance.UserLocalization : "USA", CustomObjectInstance.UserKeyboardLayout 요약

,이 예 수 있습니다 = "UK"등이 있습니다.

AFAIK, 캐시는 사전 형식의 데이터 구조를 구현하므로 충분히 고유해야합니다. 따라서 키가 "Microsoft Visual Studio 2008 서비스 팩 1 - usergroup2,3,6,17,89"인 경우 어떻게 ASp.NET 웹 응용 프로그램에서이 특정 키를 고유하게 식별 할 수 있습니까? 왜냐하면 내 검색 텍스트 상자에 나는 usergroup2,3,6,17,89를 삽입하지 않을 것입니다.

StackOverflow 사이트 검색 기능과 마찬가지로 생각하십시오 : 사용자는 공통 검색 문자열 즉 "jquery 자료 배우기"를 삽입합니다. 캐시 키에는 "jquery 자료 배우기"항목이 있어야합니다.

수정 11072009_1250

감사합니다. 또한 여러 레이어를 적용하여 추가 솔루션을 제공 할 수 있습니다. 즉, 모든 정보를 캐시의 한 레이어에 집중시키는 대신 추가 레이어를 저장하지 않는 것이 좋습니다.

캐시에 키 (문자열)와 사전을 다시 가리키는 값이 있음을 의미합니다.

또 다른 가능한 해결책은 SQL Server 전체 텍스트 인덱스 검색을 사용하여 이러한 기능을 밀어 넣는 것입니다. SQL Server 전체 텍스트 인덱스 검색에는 익숙하지 않지만이 기능을 기존 인프라에 활용할 수 있으면 좋습니다. 가능하다면.

+0

"... 고유 키를 사용하여 사용자 지정 개체에 태그를 지정하면 캐시에서 쿼리 할 때 사용자 지정 개체에 태그가 추가 된 복잡한 정보로 사용자 지정 개체를 개체 할 수 있습니다." 이것에 대해 일종의 의사적인 예를 들어 주시겠습니까? 결과 세부 정보와 속성 정보를 모두 포함하는 사용자 정의 obj를 결과 목록의 소품과 함께 캐시에 저장 하시겠습니까? 원래, 제가 생각한 것은 캐시 키로 사용할 검색 세부 사항의 문자열을 작성하는 것입니다. 목록의 값이 Billyhole

+0

@Billyhole 인 경우 위의 업데이트 된 답변을 참조하십시오. –

+0

감사합니다. 귀하의 의견에 감사드립니다. 귀하의 질문에 대답하기 위해, 나는 검색을하고있는 현재 로그인 한 사용자의 정보로부터 사용자 그룹 데이터를 얻을 것입니다. 문제는 검색을 통해 동일한 검색 문자열이 모든 사용자에 대해 동일한 데이터를 반환하지 않는다는 것입니다. 다른 사용자 그룹은 다른 데이터에 액세스 할 수 있습니다. 따라서 원래의 계획을 세우는 것이 효과적 일 것입니다. 사람들이이 공통 요구 사항을 다루는 공통적 인 인식 방법이 있는지 확실하지 않았습니다. 감사. – Billyhole

0

캐싱 검색 결과는 매우 보편적 인 기술입니다. ASP.NET 캐시는 빠른 액세스를 위해 캐시 된 모든 데이터를 메모리에 저장합니다. 그것은 모두 얼마나 많은 메모리를 캐싱에 사용할 수 있는지에 달려 있습니다. ASP.NET 캐시 접근법에서 벗어나고 싶다면이를 구현하는 또 다른 방법이 있습니다. 검색에서 검색된 데이터를 캐싱하는 방법은 데이터베이스 테이블에 저장하는 것입니다.

수십억 개의 레코드로 테이블을 검색하는 것은 비용이 많이 듭니다. 따라서 가장 많이 검색된 키워드에 대한 데이터를 테이블에 저장하여보다 빠르게 액세스 할 수 있습니다. 비교적 쉬운 몇 가지 알고리즘을 기반으로 규칙적인 간격으로 테이블을 새로 고치기위한 작업을 생성 할 수도 있습니다. 예를 들어 Least Recently Used 알고리즘. 최근에 사용되지 않은 검색 결과를 제거 할 수 있습니다.

EDIT : 그리고 캐시 키의 길이에 대한 질문은 다음과 같습니다. 문자열이며 문자열의 길이는 저장할 수있는 메모리에 따라 다릅니다.

관련 문제