NCache 키-값 저장소입니다. 키로 캐시된 항목을 빠르게 검색합니다. 그러나 다른 속성으로 캐시된 항목을 검색할 수도 있습니다. 예를 들어 캐시된 제품을 키로 검색하는 대신 카테고리, 가격 범위 및 무게별로 검색할 수도 있습니다. 캐시된 항목을 검색 가능하도록 인덱싱하는 방법을 알아보겠습니다.
수색
키로 항목을 찾는 것 외에도 NCache, SQL과 유사한 구문을 사용하여 캐시된 항목을 쿼리할 수 있습니다. SELECT 및 DELETE 쿼리를 작성하여 항목을 찾고 삭제할 수 있습니다. NCache INSERT 또는 UPDATE 쿼리를 지원하지 않습니다. 데이터베이스 SELECT 쿼리와 마찬가지로 프로젝션, 캐시된 전체 개체 또는 키만 검색할 수 있습니다. 또한, NCache 지원 기본 쿼리 및 논리 연산자와 집계 함수.
예를 들어 제품을 저장하는 경우 SELECT FROM Product WHERE UnitPrice <= 5.00`과 같은 쿼리를 작성하여 가격이 5 미만인 모든 캐시된 제품을 찾을 수 있습니다. 항목을 검색하고 연산자 및 집계 함수를 사용하는 방법에 대한 더 많은 예를 보려면 , 사용 확인 분산 캐시를 사용한 SQL 쿼리.
색인
관계형 데이터베이스와 달리 다른 속성으로 항목을 찾기 위해 NCache 인덱스가 필요합니다. 그렇지 않으면 항목 및 관련 속성을 찾기 위해 전체 캐시를 검색해야 합니다. 그것은 만들 것이다 NCache 느린. 인덱스를 사용하면 검색 작업이 더 빨라집니다. SQL과 같은 검색 쿼리에서 객체의 속성을 사용하려면 먼저 인덱싱해야 합니다. 객체의 모든 공개, 비공개 및 보호 기본 필드와 속성을 인덱싱할 수 있습니다. 참조 유형 필드 또는 속성을 인덱싱할 수 없다는 점에 유의하십시오. 한 번 NCache 인덱스에 항목을 추가하면 검색 쿼리의 기준을 충족하는 경우 쿼리 결과로 반환됩니다.
인덱스를 정의하는 두 가지 메커니즘이 있습니다. NCache: 정적 및 동적 인덱싱.
정적 인덱싱
사용자 정의 객체를 검색하려면 먼저 색인을 생성해야 합니다. 구성 변경을 통해 또는 프로그래밍 방식으로 인덱스를 정의할 수 있습니다.
구성을 통해 인덱스 생성
다음을 사용하여 인덱스를 만들 수 있습니다. NCache 관리자 또는 Powershell cmdlet. 먼저 캐시를 중지하고 인덱스를 만든 다음 다시 시작해야 합니다. 그만큼 NCache Manager는 클래스와 함께 어셈블리를 업로드하고 인덱싱할 속성과 필드를 선택하도록 요청합니다. 이후, NCache 새 항목을 자동으로 인덱싱합니다. 자세한 내용은 NCache 매니저와 파워쉘 Add-QueryIndex
cmdlet, 확인 쿼리 인덱스 구성.
프로그래밍 방식으로 인덱스 만들기
프로그래밍 방식으로 색인을 생성하려면 개체의 필드에 주석을 달아 색인을 생성해야 합니다. NCache 가 QueryIndexed
필드 및 속성을 색인화하는 속성입니다.
예를 들어 제품 이름과 단가를 색인화하려면 해당 항목에 주석을 달아야 합니다. Name
과 UnitPrice
속성. 이와 같이,
1 2 3 4 5 6 7 8 9 10 11 |
public class Product { public int ID { get; set } [QueryIndexed] public string Name { get; set } [QueryIndexed] public decimal UnitPrice { get; set } public decimal Weight { get; set } } |
기본적으로, NCache 주석이 달린 속성 다음에 색인을 지정합니다. 그러나 다음과 같이 다른 이름을 지정할 수 있습니다. QueryIndexed
기인하다. 이 기능은 인덱싱하려는 속성에 대해 서로 다른 이름을 사용하는 두 개의 클라이언트 애플리케이션으로 작업할 때 유용합니다. 예를 들어, 하나의 애플리케이션이 다음을 사용하는 경우 UnitPrice
그리고 또 다른, pricePerUnit
; 우리는 사용할 수 있습니다 price
두 애플리케이션 모두에서 색인 이름으로 사용하고 다음을 사용하여 SQL과 유사한 검색 쿼리를 작성합니다. price
대신.
개별 속성에 주석을 추가하는 것 외에도 다음을 사용하여 클래스에 주석을 추가할 수 있습니다. QueryIndexable
기인하다. 이 방법, NCache 모든 공용 속성 및 필드를 자동으로 인덱싱합니다. 하지만 비공개 필드에 다음과 같은 주석을 추가해야 합니다. QueryIndexed
. 일부 속성을 인덱싱하지 않으려면 다음과 같이 주석을 달아야 합니다. NonQueryIndexed
. 모든 속성을 인덱싱해야 하는 경우에만 클래스를 인덱싱합시다. 그러나 인덱스를 너무 많이 추가하면 메모리 및 성능 오버헤드가 발생하므로 검색에 필요한 속성만 인덱싱하는 접근 방식을 채택하겠습니다.
예를 들어 다음을 제외하고 제품의 모든 속성을 색인화하려면 Weight
, 우리는 클래스와 Weight
재산. 이와 같이,
1 2 3 4 5 6 7 8 9 10 11 12 |
[QueryIndexable] public class Product { public int ID { get; set } public string Name { get; set } public decimal UnitPrice { get; set } [NonQueryIndexed] public decimal Weight { get; set } } |
색인 주석에 대한 자세한 내용은 다음을 확인하세요. 프로그래밍 방식으로 인덱스 정의.
동적 인덱싱
우리는 다음을 사용하여 런타임에 캐시된 항목의 일부 속성을 정의합니다. NCache 고객. 주석을 사용하여 이러한 속성을 색인화할 수 없습니다. 런타임 속성의 경우 NCache 동적 인덱싱을 사용합니다. 동적 인덱스에는 그룹, 태그 및 명명된 태그 인덱스의 세 가지 유형이 있습니다.
그룹 인덱스
그룹을 사용하면 효율성을 위해 항목을 논리적으로 분할할 수 있습니다. 그룹은 논리적 범주처럼 작동합니다. 예를 들어 "가장 중요한 고객"과 "자주 구매하는 제품"에 대해 그룹을 사용할 수 있습니다. 동일한 그룹에 속하는 모든 항목을 검색하고 제거할 수 있습니다. 또한 그룹을 사용하여 SQL과 유사한 SELECT 쿼리를 작성할 수 있습니다. NCache 그룹을 자동으로 인덱싱합니다. 존재하지 않는 그룹에 항목을 추가하면 NCache 그룹에 대한 색인을 작성하고 그룹에 속하는 모든 항목을 동일한 색인에 저장합니다. 그룹에 대해 자세히 알아보려면 다음을 확인하세요. 그룹 캐시 데이터: 개요.
태그 색인
태그는 항목과 연결하는 문자열 식별자입니다. 태그를 사용하면 태그를 기반으로 항목을 검색하고 제거할 수 있으므로 데이터를 더 잘 구성할 수 있습니다. 그룹과 달리 하나 이상의 태그를 캐시 항목에 연결할 수 있습니다. 예를 들어 "East Coast Customers" 및 "West Coast Customers"를 태그로 사용하여 위치에 따라 고객을 분류할 수 있습니다. NCache 태그 이름 또는 SQL과 유사한 쿼리 구문을 사용하여 항목 검색 및 삭제를 지원합니다. 예를 들어 하나 이상의 태그가 포함된 모든 항목을 찾을 수 있습니다. 모든 새 태그에 대해 NCache 태그 인덱스를 생성하고 해당 인덱스와 관련된 모든 캐시 항목을 저장합니다.
명명된 태그 색인
명명된 태그는 향상된 태그입니다. 문자열만 식별자로 지원하는 그룹 및 태그와 달리 명명된 태그를 사용하면 기본 데이터 유형, 문자열 및 날짜를 항목에 연결할 수 있습니다. 명명된 태그는 런타임 시 항목에 연결된 키-값 쌍 목록입니다.
예를 들어, Named Tags를 사용하여 반복 고객에게 제공하는 할인을 저장할 수 있습니다.
태그 이름 또는 SQL과 유사한 구문을 사용하여 항목을 검색하고 삭제하려면 NCache 존재하지 않는 명명된 태그가 있는 항목을 추가하면 자동으로 색인이 생성됩니다. 또한, NCache 모든 관련 캐시 항목을 해당 인덱스에 저장합니다. Named Tag 인덱스는 문자열뿐만 아니라 모든 기본 유형을 지원하므로 더 넓은 범위의 데이터 유형을 가진 항목을 검색할 수 있는 대안이 있습니다.
태그 및 명명된 태그에 대해 알아보려면 태그 캐시 데이터 과 캐시 데이터가 있는 명명된 태그 가이드.
결론
인덱스와 분산 쿼리 덕분에 NCache SQL과 유사한 구문으로 실시간 검색 기능을 제공합니다. 인덱스가 없으면 NCache 항목을 찾으려면 전체 캐시를 스캔해야 합니다. 그래서 NCache 인덱스가 필요합니다. 먼저 항목의 검색 가능한 모든 속성을 인덱싱해야 한다는 점을 기억하십시오. 구성, 프로그래밍 방식 또는 두 접근 방식의 조합을 통해 인덱스를 정의할 수 있습니다. 쿼리에 필요한 속성만 인덱싱하겠습니다. 인덱스에는 메모리 및 성능 비용이 있습니다.
인덱스 생성 방법 및 SQL 쿼리 작동 방식에 대한 자세한 내용은 인덱싱 가이드 과 SQL 쿼리: 동작 및 사용 개요.