프로그래밍 방식으로 SQL 인덱스 정의
NCache 데이터베이스와 같은 SQL 쿼리를 기반으로 캐시를 쿼리할 수 있습니다. 그러나 데이터베이스와 달리 검색 가능한 개체와 해당 필드는 NCache 먼저 인덱싱해야 합니다. 이와 관련하여, NCache 개발자는 SQL 인덱스를 프로그래밍 방식으로 쉽게 정의할 수 있습니다. 이를 통해 모든 공개, 비공개 및 보호 기본 필드와 속성을 색인화할 수 있습니다. 보다 NCache 지원되는 데이터 유형 자세한 내용은.
팁
또는 다음을 통해 SQL 인덱스를 구성할 수 있습니다. NCache 관리 센터 or PowerShell을.
주의 사항
참조 유형 필드는 인덱싱할 수 없습니다.
프로그래밍 방식으로 SQL 인덱스를 정의하기 위한 전제 조건
SQL 인덱스를 정의하기 전에 다음 전제조건이 충족되었는지 확인하십시오.
- 모든 작업에 필요한 표준 전제 조건에 대해 알아보려면 NCache 클라이언트측 기능은 다음 페이지를 참조하세요. 클라이언트 측 API 전제 조건.
- 검색 가능한 개체 및 해당 속성은 다음 중 하나에 의해 색인화되어야 합니다. 인덱스 구성 or 프로그래밍 방식으로 인덱스 정의.
- API 세부 정보는 다음을 참조하세요. QueryIndexed속성, NonQueryIndexed속성, 쿼리인덱싱 가능.
NCache 다양한 접근 방식을 통해 인덱스를 생성할 수 있는 유연성을 제공합니다. 필요에 따라 선택 필드 또는 전체 클래스에 대한 색인을 생성할 수 있습니다. 한편, 클래스가 색인화될 때 특정 필드가 색인화에서 제외될 수 있습니다. 또한 다국어 클라이언트에 대한 색인 지원도 제공됩니다. 구체적으로, NCache 프로그래밍 방식으로 인덱스를 정의하기 위한 다음과 같은 사용자 정의 필드가 있습니다.
QueryIndexed
: 선택 필드를 인덱싱하는 데 사용됩니다.QueryIndexed["indexName"]
: 사용자가 제공한 인덱스 이름에 대해 필드를 인덱싱하는 데 사용됩니다.QueryIndexable
: 전체 클래스를 인덱싱하는 데 사용됩니다.NonQueryIndexed
: 클래스를 인덱싱할 때 인덱싱에서 필드를 제외하기 위해 사용됩니다.
중대한
인덱싱에는 메모리 및 성능 오버헤드가 있으므로 불필요한 필드를 인덱싱하지 않는 것이 좋습니다.
여기에서 인덱스를 생성하는 다양한 접근 방식에 대해 논의합니다. NCache 이러한 필드를 사용합니다.
선택적 인덱싱
다음을 사용하여 클래스의 특정 속성 또는 필드에 대한 인덱스를 만들 수 있습니다. QueryIndexed
기인하다. 표시된 속성 또는 필드를 인덱싱할 수 있음을 나타내기 위해 기본 속성 또는 필드 수준에서 정의됩니다. 주석이 달린 속성 또는 필드는 자동으로 인덱싱됩니다.
주의 사항
항상 사용 QueryIndexed
성능 및 메모리 비용을 절약하기 때문에 클래스의 몇 가지 속성 또는 필드만 인덱싱해야 하는 경우.
이 접근 방식은 클래스의 속성이나 필드에 인덱싱이 필요한 필드가 비교적 적은 경우 인덱스를 만드는 데 사용할 수 있습니다. 원하는 속성이나 필드만 직접 선택할 수 있는 선택 필드를 색인화하는 유연성을 제공합니다.
경고
참조 필드를 다음과 같이 명시적으로 표시하는 경우 QueryIndexed
, "인덱스가 지원되지 않습니다. <Ref Type Name>
". 인덱스는 값 유형에서만 지원됩니다.
다음 예는 다음을 사용하여 선택 필드를 인덱싱하는 방법을 보여줍니다. QueryIndexed
전체 클래스를 인덱싱하지 않고. NCache 필드에 대한 인덱스를 자동으로 생성합니다. ID 및 성함 로 작성되어야 합니다.
public class Product
{
[QueryIndexed]
public int ID { get; set} // explicitly indexed
[QueryIndexed]
public string Name { get; set} // explicitly indexed
public Decimal UnitPrice { get; set } // will not be indexed
public Customer Customer { get; set; } // will not be indexed
}
주의 사항
작업이 안전하도록 하려면 에 설명된 대로 응용 프로그램 내에서 잠재적인 예외를 처리하는 것이 좋습니다. 처리 실패.
위의 예에서 인덱스 이름은 필드 이름과 동일합니다. 이는 인덱스를 사용하는 동안의 기본 동작이기 때문입니다. QueryIndexed
선택적 인덱싱을 위한 속성입니다. 하지만, NCache 를 통해 인덱싱할 필드 또는 속성에 대한 사용자 지정 이름을 정의할 수 있습니다. QueryIndexed ("indexName")
주석. 이 경우 색인을 생성하는 동안 생성자에서 사용자가 지정한 이름이 사용됩니다.
이것은 여러 언어로 애플리케이션 코드를 개발할 때 유용할 수 있으며 필드 이름이 다를 수 있습니다. 예를 들어 전자 상거래 응용 프로그램에는 .NET 및 Java 클라이언트가 있으며 .NET 클라이언트는 프로덕트 클래스 단가, Java 클라이언트는 다음과 같은 필드 이름을 지정합니다. 단위 당 가격. 이 필드를 인덱싱하려면 다음을 사용하여 .NET과 Java 모두에서 사용자 정의 이름을 지정할 수 있습니다. QueryIndexed("price")
기인하다. 표시된 필드는 이름으로 인덱싱됩니다. 가격 모든 클라이언트를 위해. 이제 다른 클라이언트가 다음을 사용하여 쿼리를 수행할 수 있습니다. 가격 WHERE 절 또는 프로젝션으로.
경고
필드가 다음을 사용하여 인덱싱되는 경우 QueryIndexed["indexName"]
, 필드 이름을 기반으로 데이터를 쿼리하면 "필드 이름에 대한 인덱스가 정의되지 않음" 예외가 발생합니다.
다음 예제는 선택한 인덱스 이름을 사용하여 클래스의 선택적 필드를 인덱싱하는 방법을 보여줍니다.
public class Product
{
[QueryIndexed]
public int ID { get; set} // explicitly indexed with index name ID
[QueryIndexed]
public string Name { get; set} // explicitly indexed with index name
[QueryIndexed("price")]
public Decimal UnitPrice { get; set } // will not be indexed
public Customer Customer { get; set; } // will not be indexed
}
클래스 인덱싱
속성을 사용하여 클래스를 인덱싱할 수 있습니다. QueryIndexable
. 전체 클래스를 인덱싱할 수 있음을 나타내기 위해 클래스 수준에서 정의됩니다. 클래스를 다음으로 표시하면 QueryIndexable
, 모든 공용 속성 및 필드가 자동으로 인덱싱됩니다. 클래스에 인덱싱이 필요한 비공개 필드가 있는 경우 다음을 사용하여 명시적으로 표시해야 합니다. QueryIndexed
인덱스 생성을 위한 속성입니다.
이 접근 방식은 클래스의 속성 또는 필드의 전부 또는 대부분을 인덱스로 쿼리하려는 경우에만 사용해야 합니다. 그렇지 않으면 불필요한 속성을 인덱싱할 가능성이 있으므로 권장되지 않습니다. 결국 기본 메모리 및 인덱싱의 성능 오버헤드로 인해 애플리케이션의 성능이 저하됩니다.
경고
- 사용하지 않는 것이 좋습니다
QueryIndexable
인덱싱에는 메모리 및 성능 비용이 있기 때문에 모든 또는 대부분의 속성 또는 필드에 인덱싱이 필요하지 않은 경우. - 수업을 다음으로 표시
QueryIndexable
개인 필드를 인덱싱하지 않습니다. 이 경우 각 개인 필드를 다음과 같이 개별적으로 표시해야 합니다.QueryIndexable
색인을 생성합니다.
다음 예제는 이라는 클래스의 필드를 인덱싱하는 것을 보여줍니다. 프로덕트 를 사용하여 QueryIndexable
, 기인하다. 그러면 색인이 생성됩니다. ID, 성함및 단가 필드. 필드 범주 는 다음과 같이 명시적으로 표시됩니다. QueryIndexed
비공개이기 때문에. 인덱싱 빠른 객체를 가리키는 참조 필드이므로 무시됩니다. 빠른 수업 동안 NCache 인덱싱 참조 필드를 허용하지 않습니다.
[QueryIndexable]
public class Product
{
public int ID { get; set} // auto index
public string Name { get; set} // auto index
public Decimal UnitPrice { get; set } // auto index
[QueryIndexed]
private string Category { get; set } // explicitly marked for indexing
public Customer Customer { get; set; } // will not be indexed
}
인덱싱에서 필드 제외
당신은을 사용할 수 있습니다 NonQueryIndexed
속성을 사용하여 클래스가 인덱싱될 때 필요하지 않은 속성이나 필드의 인덱싱을 방지합니다. 속성 NonQueryIndexed
클래스 자체가 QueryIndexable
. 모든 공용 속성 및 필드는 자동으로 인덱싱됩니다. 로 표시된 필드는 NonQueryIndexed
속성은 인덱싱에서 제외됩니다. 당신은 조합을 사용할 수 있습니다 QueryIndexable
및 NonQueryIndexed
일부를 제외하고 대부분의 속성에 인덱싱이 필요한 경우.
다음 예는 필드를 제외하는 방법을 보여줍니다. 단가 로 명시적으로 표시하여 인덱싱에서 NonQueryIndexed
클래스 자체가 인덱싱될 때. 이것은 주석이 달린 필드의 인덱싱을 무시합니다.
[QueryIndexable]
public class Product
{
public int ID { get; set} // auto index
public string Name { get; set} // auto index
[NonQueryIndexed]
public Decimal UnitPrice { get; set } // will not be indexed
public Customer Customer { get; set; } // will not be indexed
}
주의 사항
NCache 이를 통해 인덱스 생성과 관련된 오류를 억제할 수 있습니다. NCacheServer.SuppressIndexNotDefinedException
~에있는 태그 NCache 서비스 구성 파일.
추가 자료
NCache SQL 쿼리에 대한 샘플 애플리케이션을 제공합니다. GitHub의.
도 참조
.그물: Alachisoft.NCache.고객 네임 스페이스.
자바 : COM.alachisoft.ncache.고객 네임 스페이스.