오늘날 모든 기업은 운영을 관리하기 위해 데이터가 필요합니다. 잘 정리된 데이터 모음을 저장하는 가장 좋은 솔루션은 데이터베이스입니다. 마찬가지로 데이터베이스에서 데이터를 저장하고 검색하는 데 가장 많이 사용되는 컴퓨터 언어는 SQL(Structured Query Language)입니다. 급변하는 현대 사회에서는 정보를 빠르고 효과적으로 찾을 수 있는 것이 중요합니다.
NCache 기본 키가 데이터를 찾는 데 사용되는 관련 키를 지정하여 이 요구를 충족합니다. 추가적으로, NCache 또한 고용 색인 많은 모듈에서 캐시의 검색 성능을 향상시키고 이를 추적합니다. 실제 상황에서와 마찬가지로 기본 키 이외의 기준을 사용하여 정보를 찾을 수 있는 유연한 검색 기능이 필요합니다.
그러나 검색 가능한 모든 속성은 검색을 위해 인덱싱되어야 합니다. 인덱스를 저장하는 데 필요한 추가 컴퓨팅 스토리지와 업데이트가 발생하는 데 필요한 시간은 정보 검색 중에 절약된 시간과 균형을 이룹니다.
인덱스를 정의하는 방법
인덱스를 정의하려면 NCache 제공 정적 인 과 동적 인덱싱. 두 경우 모두 캐시에서 해당 클래스의 항목을 검색하려면 사용자 정의 클래스에 대한 쿼리 인덱스를 미리 정의해야 합니다. 이렇게 함으로써 캐시는 쿼리를 간단하게 만드는 방식으로 정보를 저장합니다. 다음을 통해 정적 인덱스를 지정할 수 있습니다. 구성 또는 정의하여 프로그래밍 방식으로 인덱스. 런타임 인덱스는 사용하기 전에 구성할 필요가 없습니다.
다음을 통해 프로그래밍 방식으로 인덱스 쿼리 NCache
NCache 여러 가지 방법을 사용하여 인덱스를 구축할 수 있는 다재다능함을 사용자에게 제공합니다. 필요에 따라 특정 필드 또는 전체 클래스에 대한 인덱스를 생성할 수 있습니다. NCache ~ 할 수있게 해준다. 프로그래밍 방식으로 쿼리 인덱스 다음 주석을 사용하여:
- 쿼리인덱싱 가능
- 쿼리인덱싱됨
- QueryIndexed["인덱스 이름"]
- 비쿼리인덱싱됨
클래스에 대한 쿼리 인덱스 구성
QueryIndexable 특성을 사용하여 클래스를 인덱싱할 수 있습니다. 전체 클래스를 인덱싱할 수 있음을 나타내기 위해 클래스 수준에서 정의됩니다. 클래스가 QueryIndexable로 표시되면 모든 공용 속성 및 필드가 자동으로 인덱싱됩니다. 클래스의 비공개 필드를 인덱싱해야 하는 경우 QueryIndexed 주석으로 명시적으로 표시해야 합니다.
다음 예제는 이름이 지정된 클래스의 필드를 인덱싱하는 방법을 보여줍니다. 프로덕트 QueryIndexable 속성을 사용합니다. 이렇게 하면 색인이 생성됩니다. ID, 이름, 수량, ManufacturerName, 과 단가.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[QueryIndexable] class Product { public int ID { get; set; } public string Name { get; set; } public string Quantity { get; set; } public string ManufacturerName { get; set; } public Decimal UnitPrice { get; set; } } |
인덱싱된 클래스의 개체는 캐시에 추가됩니다. 아래 코드 예제는 다음의 개체를 가져오는 방법을 보여줍니다. 프로덕트 쿼리를 통해 위에서 언급한 클래스.
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 26 27 28 29 30 |
// Pre-conditions: Cache is already connected // Products are already present in the cache // Provide Fully Qualified Name (FQN) of your Product class // Create a query string query = "SELECT $Value$ FROM FQN.Product WHERE Quantity < ?"; // Use QueryCommand for query execution QueryCommand queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("Quantity", 500); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Checking if the result set is not empty if (reader.FieldCount > 0) { // Getting all Products with Quantity less then 500 while (reader.Read()) { Product product = reader.GetValue<Product>(1); // Perform required operations } } else { // Null query result set retrieved } |
클래스 속성 또는 필드의 전부 또는 대부분을 쿼리 색인화하려는 경우에만 이 전략을 사용해야 합니다. 그렇지 않으면 필요하지 않은 특성을 잠재적으로 인덱싱하고 추가 메모리를 소비하게 되므로 권장되지 않습니다.
특정 속성에 대한 쿼리 인덱스 구성
클래스의 몇 가지 속성 또는 필드만 인덱싱해야 하는 경우 다음을 사용하십시오. QueryIndexed 속성 성능과 메모리 비용을 절약하기 때문입니다. 표시된 속성 또는 필드를 인덱싱할 수 있음을 나타내기 위해 기본 속성 또는 필드 수준에서 정의됩니다. 주석이 있는 필드 또는 속성은 자동으로 인덱싱됩니다.
클래스 항공편 아래 설명은 전체 클래스를 인덱싱하지 않고 QueryIndexed를 사용하여 원하는 속성을 인덱싱하는 방법을 보여줍니다. 필드 ID 및 TotalPassengers의 경우에만 NCache 자동으로 인덱스를 생성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Flight { [QueryIndexed] public int ID { get; set; } [QueryIndexed] public int TotalPassangers { get; set; } public string FlightType; private string DepartAirport { get; set; } public AirLine Airline { get; set; } } |
클래스에서 소수의 속성 또는 필드만 인덱싱해야 하는 경우 이 방법을 사용하여 인덱스를 구성할 수 있습니다. 원하는 속성 또는 필드를 선택하고 해당 항목만 인덱싱할 수 있는 옵션을 제공합니다. 이 주석은 전체 클래스를 쿼리한 결과로 발생할 수 있는 메모리 문제를 방지하는 반면 클래스에서 일부 속성만 쿼리하면 됩니다.
사용자 제공 쿼리 인덱스 구성
선택적 인덱싱에 QueryIndexed 속성을 사용하면 이 기본 동작이 발생하므로 인덱스 이름은 필드 이름과 동일합니다. QueryIndexed("indexName") 주석을 통해, NCache 인덱싱할 필드 또는 속성에 대해 고유한 이름을 설정할 수 있습니다. 그렇다면 생성자에서 사용자가 지정한 이름을 사용하여 인덱스가 생성됩니다. 잠재적으로 고유한 필드 이름이 있는 여러 언어로 애플리케이션 코드를 작성할 때 이 기능이 유용할 수 있습니다.
수업에서 직원, 구역 EmployeeId, 생년월일, 과 봉급 QueryIndexed 속성으로 표시되면 인덱싱됩니다. 그러나 필드를 포함하는 인덱스를 생성하려면 EmployeeId 및 DateOfBirth, 생성자의 사용자 지정 이름 "ID" 과 "생년월일" 사용하게 될 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Employee { public string Name { get; set; } [QueryIndexed("ID")] public int EmployeeId { get; set; } [QueryIndexed("DOB")] public string DateOfBirth { get; set; } [QueryIndexed] public double Salary { get; set; } public string Position { get; set; } } |
인덱싱에서 필드 제외
클래스가 인덱싱되면 NonQueryIndexed 특성을 사용하여 선택적 속성 또는 필드의 인덱싱을 중지할 수 있습니다. 클래스가 QueryIndexable로 선언되면 속성 비쿼리인덱싱됨 속성 또는 필드가 인덱싱되지 않아야 함을 지정하기 위해 기본 속성 또는 필드 수준에서 정의됩니다. 공용 필드와 속성은 모두 자동으로 인덱싱됩니다. NonQueryIndexed 특성은 인덱싱되지 않아야 하는 필드를 나타냅니다.
다음 예제는 필드를 명시적으로 선언하는 방법을 보여줍니다. 고객 이름 NonQueryIndexed로 주문번호 클래스가 인덱싱됩니다. 이렇게 하면 주석이 달린 필드의 인덱싱이 무시됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
[QueryIndexable] class Order { public int OrderId { get; set; } public DateTime OrderDate { get; set; } public string OrderDestination { get; set; } [NonQueryIndexed] public string CustomerName { get; set; } } |
필드 고객 이름 캐시에 추가되지 않습니다. 쿼리하면 다음 값을 얻을 수 있습니다. 고객 이름 다른 모든 필드는 명시적으로 검색해야 합니다.
일부 속성을 제외한 모든 속성을 인덱싱해야 하는 경우 QueryIndexable을 NonQueryIndexed와 결합할 수 있습니다. 이것은 큰 데이터가 있고 성능이 그대로 유지되도록 작은 부분만 제외하려는 경우 잠재적으로 유용합니다.
결론
NCache 설정된 기준에 따라 인덱스를 쿼리할 수 있는 빠르고 효율적인 메커니즘을 제공합니다. 그리고 이 기능을 사용하면 해당 필드 중 일부만 인덱싱하면 되므로 전체 클래스를 인덱싱하는 쿼리로 인해 발생할 수 있는 메모리 문제에 대해 걱정할 필요가 없습니다. 의심할 여지 없이, NCache의 다양한 쿼리 색인 주석은 진정한 축복입니다. 기타 확인하실 수 있습니다 NCache 풍모 우리 웹 사이트에서.