효율적인 데이터 관리를 위해서는 특정 속성을 기반으로 애플리케이션 데이터를 빠르게 검색할 수 있는 기능이 필요하며, 이는 데이터 볼륨이 증가함에 따라 점점 더 중요해지고 있습니다. 일반적으로 데이터베이스는 데이터를 분류하기 위해 미리 정의된 필드를 사용하는데, 이는 데이터를 캐싱할 때 인덱스 역할을 할 수도 있습니다. 그러나 태그나 사용자 정의 속성과 같이 캐시에 명시적으로 존재하지 않는 속성을 기반으로 데이터를 그룹화해야 하는 경우가 있습니다.
NCache 사용자 정의 속성을 기반으로 애플리케이션 데이터를 분류하고 검색할 수 있습니다. 기존 인덱싱과 함께, NCache 다음을 사용하여 데이터를 분류하는 옵션을 제공합니다. 그룹, 태그예산 및 명명된 태그, 데이터 분류 및 검색에서 더 큰 유연성을 허용합니다.
주요 요점
논리적 데이터 그룹화: NCache 그룹 기능을 제공하여 1대다 관계를 생성할 수 있으며, 이를 통해 캐시된 항목을 단일 논리적 범주(예: 지역별)로 분류하여 검색 또는 삭제를 간소화할 수 있습니다.
유연한 메타데이터 태깅: 태그를 사용하면 캐시된 항목 하나가 여러 키워드와 연결될 수 있는 다대다 관계(예: "VIP" 및 "동부 해안")를 구축할 수 있으므로 중복되는 카테고리 전반에 걸쳐 검색 기능을 향상시킬 수 있습니다.
고정밀 필터링: 명명된 태그는 기본 데이터 유형(정수, 문자열, 날짜 등)의 키-값 쌍을 지원하여 태그 기능을 확장하고, 할인율이나 날짜와 같은 특정 속성을 기반으로 고급 SQL과 유사한 필터링을 가능하게 합니다.
SQL 기반 검색: 세 가지 분류 방법 모두 SQL과 유사한 쿼리(예: 키워드 사용)를 지원합니다. 그룹 태그$이를 통해 개발자는 정확한 캐시 키를 알 필요 없이 익숙한 구문으로 캐시를 검색할 수 있습니다.
성능 최적화: 데이터를 메모리 내에서 분류하면 캐시 내에서 직접 복잡한 검색이 가능해지므로 백엔드 데이터베이스의 부하가 줄어들어 데이터 접근 속도가 빨라지고 애플리케이션 확장성이 향상됩니다.
그룹을 통한 캐시 데이터 분류
그룹 이름으로 식별할 수 있는 캐시된 항목의 컬렉션의 경우 그룹을 만들 수 있습니다. 이 이름은 해당 그룹과 관련된 모든 항목을 검색하는 데 도움이 될 수 있습니다. 예를 들어, 특정 고객 또는 제품 범주와 관련된 모든 제품이 있는 그룹을 만들 수 있습니다. 이름을 호출하기만 하면 NCache 캐시된 모든 항목을 반환합니다. 각 항목은 하나의 그룹에만 연관될 수 있습니다. 아래에 제공된 예는 특정 지역(이 경우 동부 해안)의 고객이 온라인 스토어에서 어떻게 그룹화되는지 보여줍니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Create a unique cache key for this customer. string customerKey = $"Customer:ALFKI"; // Get customer from cache Customer customer = cache.Get(customerKey); // Get customer from database if not found in cache if (customer == null) { customer = FetchCustomerFromDB("ALFKI"); // Create a new CacheItem var cacheItem = new CacheItem(customer); // Specify the group cacheItem.Group = "East Coast Customers"; // Add customer object to cache with group cache.Add(customerKey, cacheItem); } |
게다가 $Group$ 키워드를 사용하여 그룹에 포함된 캐시 객체를 검색하기 위해 SQL 쿼리를 사용할 수도 있습니다. 다음 코드 예제는 SQL 쿼리를 사용하여 특정 지역(이 경우 서부 해안)의 모든 고객을 보는 방법을 보여줍니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Create an SQL Query with the specified criteria // Make sure to use the Fully Qualified Name (FQN) string query = "SELECT CustomerID,ContactName FROM Alachisoft.NCache.Samples.Data.Customer WHERE $Group$ = ? "; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("$Group$", "West Coast Customers"); // Executing the Query ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set string customerID = reader.GetValue("CustomerID"); string customerName = reader.GetValue("ContactName"); Console.WriteLine($"Customer '{customerName}' having ID '{customerID}' belongs to West Coast."); } } else { Console.WriteLine($"No customers from West Coast found"); } |
효율성을 높이는 것 외에도 그룹은 사용자가 검색 or 삭제 이러한 논리적 범주에 기반한 데이터로 애플리케이션 확장성을 높입니다. 또한 그룹은 특정 검색 기준과 일치하는 일반적으로 사용되는 데이터를 캐시하여 데이터베이스 검색을 반복적으로 실행하는 비용을 피할 수 있습니다.
태그를 통한 캐시 데이터 분류
태그 in NCache 여러 태그를 사용하여 캐시된 항목을 분류하는 방법을 제공합니다. 캐시된 개체에는 하나 이상의 태그가 할당될 수 있으며, 이를 사용하여 항목을 검색할 수 있습니다. 예를 들어, 지역, 언어 또는 제품 기능에 따라 항목을 분류할 수 있습니다. 태그의 이름을 호출하면 NCache 모든 연관된 캐시된 항목을 반환합니다. 태그는 메타데이터를 적절한 개체와 연관시키는 데 도움이 됩니다. 예를 들어, 동부 해안 지역의 고객을 추가하고 VIP 고객 태그를 사용하여 이 고객을 추가로 분류할 수 있습니다. 이 프로세스는 데이터 검색 및 검색을 향상시킵니다.
|
1 2 3 4 5 6 7 8 9 10 11 |
// Create an array of tags assigned to customer Tag[] tags = new Tag[2]; tags[0] = new Tag("East Coast Customers"); tags[1] = new Tag("VIP Customers"); // Setting the tag property of the cacheItem cacheItem.Tags = tags; cache.Add(customerKey, cacheItem); // CacheItem added successfully |
마찬가지로 $Tag$ 키워드를 사용하여 특정 태그가 있는 항목을 쿼리할 수 있습니다. 아래 예의 SQL 쿼리는 태그에 연결된 모든 항목을 반환합니다. VIP 고객.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// Create a query for search string query = "Select CustomerID,ContactName FROM Alachisoft.NCache.Samples.Data.Customer WHERE $Tag$ = ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("$Tag$", "VIP Customers"); // Executing Query ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set string customerID = reader.GetValue ("CustomerID"); string contactName = reader.GetValue("ContactName"); Console.WriteLine($"Customer '{contactName}' having ID '{customerID}' is a VIP Customer."); } } else { Console.WriteLine($"No VIP Customers found"); } |
태그를 사용하면 사용자에게 각 특정 유형과 높은 수준의 관련성을 제공합니다. 태그에서 제공하는 다른 CRUD 작업을 알아보려면 다음을 참조하십시오. NCache 문서.
명명된 태그를 통한 캐시 데이터 분류
캐시된 객체는 목록을 통해 여러 개의 명명된 태그를 할당할 수 있으며, 이는 항목을 검색하는 데 사용될 수 있습니다. 각 명명된 태그에는 두 개의 매개변수가 있습니다. 태그의 이름을 나타내는 문자열인 키와 모든 기본 유형인 값입니다. 예를 들어, 가격 범위 또는 가용성에 따라 항목에 명명된 태그를 할당할 수 있습니다. 태그 이름과 값을 호출하면 NCache 해당 태그가 있는 모든 항목을 가져와야 하는 경우 지정된 명명된 태그가 있는 모든 저장된 항목을 반환합니다.
그룹 및 태그와 마찬가지로 다음을 수행할 수 있습니다. 항목 검색 개체 쿼리를 사용하여 명명된 태그가 있는 캐시에서. 특정 Named Tag가 이미 캐시의 항목에 추가된 경우, NCache 사용자에게 이러한 명명된 태그를 업데이트할 수 있는 기회를 제공합니다. 사용 NCache의 사용자 정의 클래스, 즉 CacheItem, 캐시에 데이터를 추가할 수 있습니다. 재산으로는 명명된 태그 클래스인 CacheItem을 사용하면 항목과 관련된 추가 사양을 지정할 수 있습니다. 아래 예에서 VIP 멤버십(10% 할인)이 있는 고객은 CacheItem의 속성으로 지정하여 설정된 명명된 태그를 사용합니다.
|
1 2 3 4 5 6 7 8 9 10 |
// Creating a Named Tags Dictionary var namedTags = new NamedTagsDictionary(); // Adding Named Tags to the Dictionary where Keys are the names of the tags as string type and Values are of primitive type namedTags.Add("VIP_Membership_Discount", 0.10); // Setting the named tag property of the cacheItem cacheItem.NamedTags = namedTags; cache.Add(customerKey, cacheItem); |
항목이 있을 때 캐시에 추가됨 명명된 태그를 사용하면 SQL 쿼리를 통해 쉽게 검색할 수 있습니다. 다음 예에서 사용자는 12% VIP 멤버십 할인을 받은 모든 고객을 보고 싶어합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Create an SQL Query with the specified criteria string query = "SELECT CustomerID,ContactName FROM Alachisoft.NCache.Samples.Data.Customer WHERE VIP_Membership_Discount = 0.10 "; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Executing the Query ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set string customerID = reader.GetValue("CustomerID"); string customerName = reader.GetValue("ContactName"); Console.WriteLine($"Customer '{customerName}' with ID '{customerID}' has VIP membership discount."); } } else { Console.WriteLine($"No VIP members found"); } |
올바른 분류법 선택하기
건축적 요구사항에 맞는 방법을 선택하는 데 도움이 되도록 간단한 비교를 제공합니다.
| 제품 특장점 | 관계 | 검색 방법 | 값 유형 | 적용 사례 |
|---|---|---|---|---|
| 그룹 | 1 : 많은 | API/SQL | 문자열 이름 | 지역 분할 |
| 태그 | 많은 : 많은 | API/SQL | 문자열 라벨 | 고객 페르소나 |
| 명명된 태그 | 많은 : 많은 | SQL 전용 | 키-값(입력형) | 동적 필터링 |
맺음말
이러한 분류 기능을 활용함으로써, NCache 이를 통해 애플리케이션은 복잡한 검색을 메모리에서 수행할 수 있으므로 비용이 많이 드는 데이터베이스 접근 횟수를 최대 80%까지 줄이고 데이터 집약적인 작업의 지연 시간을 크게 단축할 수 있습니다. NCache 그룹, 태그 및 명명된 태그를 통해 효과적인 데이터 캐싱 및 검색을 위한 강력한 기능을 제공합니다. 이를 통해 특정 속성을 기준으로 캐시된 데이터를 분류하고 검색할 수 있습니다. NCache API 또는 SQL 유사 쿼리. 이러한 기능은 더 빠른 데이터 액세스를 가능하게 하고, 데이터베이스 부하를 줄이며, 전반적인 애플리케이션 성능을 개선하기 때문에 캐싱을 위한 더욱 매력적인 옵션이 됩니다. 이러한 기능의 모든 이점을 경험하고 다운로드하세요. NCache .
자주 묻는 질문 (FAQ)
질문: 하나의 캐시 항목이 여러 그룹에 속할 수 있나요?
A : 아닙니다. NCache 그룹에 대해 엄격한 1단계 계층 구조를 적용하므로 각 캐시 항목은 한 번에 하나의 그룹에만 연결될 수 있습니다. 항목에 여러 식별자가 필요한 경우 태그 또는 명명된 태그를 사용해야 합니다.
질문: 동일한 항목에 그룹, 태그 및 이름 지정 태그를 함께 사용할 수 있습니까?
A : 네. NCache 이 기능을 사용하면 단일 캐시 항목에 그룹, 태그 배열 및 명명된 태그 사전을 할당할 수 있습니다. 이를 통해 복잡한 구성 및 검색 요구 사항에 최대한의 유연성을 제공합니다.
질문: 기본 데이터 형식이 아닌 데이터 형식으로 명명된 태그를 추가하려고 하면 어떻게 되나요?
A: 명명된 태그는 기본 데이터 유형(예: int, string, bool, decimal, DateTime 등)만 지원합니다. 명명된 태그 사전의 값으로 복잡한 사용자 지정 객체를 사용하는 것은 지원되지 않습니다. 이러한 경우에는 객체를 캐시 값 자체로 저장하거나 표준 문자열 태그를 사용해야 합니다.
질문: 검색 시 이러한 분류 속성은 대소문자를 구분합니까?
A : 있음 NCache그룹은 대소문자를 구분하므로 "EastCoast"와 "eastcoast"는 서로 다른 그룹으로 처리됩니다. 그러나 태그와 명명된 태그는 대소문자를 구분하지 않으므로 쿼리 실행 시 더 많은 유연성을 제공합니다.
질문: 이러한 태그나 그룹을 사용하기 전에 설정 파일에 정의해야 하나요?
A: 아니요. 미리 정의된 스키마가 필요한 기존 데이터베이스 인덱스와 달리 그룹, 태그 및 명명된 태그는 "런타임 인덱스"입니다. 캐시에 항목을 추가하거나 업데이트할 때 애플리케이션 코드 내에서 프로그래밍 방식으로 정의합니다.






