우리 모두는 응용 프로그램 서버에서 생성된 쿼리에 대한 대가로 데이터베이스에서 응답을 받기 위해 영원을 기다려야 하는 상황에 직면합니다. 비즈니스 크리티컬 애플리케이션의 경우 대기 시간과 응답 지연은 참을 수 없습니다. 여기에서 최적화된 캐싱 솔루션이 필요합니다.
캐시는 일반적으로 키-값 저장소와 연결되지만 NCache 개체의 키가 아닌 특성에 대한 데이터를 쿼리할 수 있도록 하여 한 단계 더 나아갑니다. 즉, 키 외에 다양한 속성을 기반으로 데이터에 액세스할 수 있습니다. 이 접근 방식은 데이터 검색에 더 큰 유연성과 효율성을 제공하여 데이터를 보다 쉽게 분석하고 관리할 수 있도록 합니다.
시간이 지남에 따라 캐시의 데이터가 증가하므로 더 빠른 검색 및 검색 성능을 위해 쿼리를 생성할 수 있는 캐시에 이러한 기능이 필요합니다. NCache 검색할 때 효율적인 방식으로 데이터를 쿼리할 수 있습니다.
방법 NCache 검색 및 검색 성능을 최적화합니까?
NCache 인덱싱, 프로젝션, 청크 크기 및 클라이언트 캐시를 통해 검색 성능을 최적화합니다. 쿼리 결과를 메모리에 캐시하면 요청 응답성이 크게 향상됩니다. 많은 쿼리가 캐시에서 직접 제공되므로 추가 데이터베이스 트립이 저장됩니다. NCache 아래에서 설명하는 것처럼 검색 성능을 향상시키기 위해 여러 가지 방법을 사용합니다.
1. 전략적으로 인덱스 생성
쿼리 기반의 효율적인 데이터 검색을 위해 NCache 검색 인덱스 생성이 필요합니다. 인덱스 없이 느릴 수 있고 데이터를 찾기 위해 전체 저장소 검색을 수행하는 기존 데이터베이스와 달리, NCache 성능을 우선시하므로 인덱스 생성이 필수입니다. 인덱스를 생성하여 NCache 검색 요구에 가장 적합한 데이터 유형 및 저장 형식을 결정할 수 있으므로 검색이 빠르고 효율적입니다.
그러나, NCache 사용 색인 이는 성능 지향적 접근 방식이지만 인덱스를 유지하기 위한 공간이 필요하고 불필요한 속성을 인덱싱하면 메모리와 성능 오버헤드가 발생할 수 있으므로 검색을 위한 속성 인덱싱은 매우 신중하게 수행되어야 합니다.
NCache 인덱스를 정의하는 두 가지 방법을 제공합니다.
• 미리 정의된 색인(정적 인덱스)
• 런타임 인덱스(동적 인덱스)
2. 프로젝션을 현명하게 사용
쿼리에 관해서는 계획안 애플리케이션의 성능을 크게 향상시킬 수 있습니다. 문의하신 내용을 바탕으로 NCache 캐시 저장소에서 클래스 또는 특정 프로젝션의 모든 인덱싱된 특성을 검색할 수 있습니다.
사용 NCache, 검색을 보다 효율적으로 수행하기 위해 쿼리에 대해 예상할 열을 지정할 수 있습니다. 특정 열 프로젝션 외에도 여러 프로젝션을 검색할 수도 있습니다. 아래에 언급된 프로젝트는 $GROUP$
과 $Value$
단일 쿼리에서.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
string query = "SELECT $Value$, $Group$ FROM FQN.Product WHERE Productid > ?"; // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader. Read()) { Product value = reader.GetValue(1); string group Name = reader.GetValue(2); // Perform operations } } else { // Null query result set retrieved } |
기본적으로 프로젝션을 지정하지 않으면 요청 시 인덱싱된 특성과 함께 완전한 개체가 서버에서 클라이언트로 이동합니다. 선택적 데이터보다 느립니다. 다음은 캐시에서 Product 클래스와 관련된 모든 필드를 검색하는 예입니다. *
연산자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
string query = "SELECT * FROM FQN.Product WHERE ProductID > ?"; // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductID"); // Perform operations } } else { // Null query result set retrieved } |
프로젝션을 사용하면 NCache 개체의 모든 색인화된 특성을 검색하는 추가 작업을 줄이고 원하는 열만 검색합니다. NCache 더 나은 쿼리 구문을 촉진하여 사용자가 이러한 방식으로 성능을 향상시킬 수 있습니다.
3. 청크 크기 / 청크 단위로 데이터 가져오기
NCache 청크 크기라는 쿼리 최적화를 위한 또 다른 기능을 제공합니다. 검색 쿼리를 실행한 후 응용 프로그램은 데이터/키 패킷을 청크로 수신하며 각 청크는 데이터/키 패킷의 특정 크기를 나타냅니다. 키만 쿼리하든 선택적 항목을 쿼리하든 데이터 세트라고 하는 개체의 전체 속성 집합을 쿼리하든 관계없이 데이터를 쿼리하는 방법에는 여러 가지가 있습니다.
결과 집합이 클수록 생성된 쿼리에 대한 응답으로 가져오는 속도가 느려집니다. 따라서 전체 결과 집합을 한 번에 가져오는 대신 데이터를 소비하는 클라이언트는 서버에서 데이터를 하나씩 덩어리로 소비합니다. NCache 기본적으로 서버에서 클라이언트 측으로 더 작은 청크의 데이터를 가져오고, 데이터 청크를 병합하고, 데이터를 애플리케이션에 제공합니다.
청크 크기의 기본값은 512KB이지만 사용자가 구성할 수 있습니다. 청크 크기 요구 사항에 따라 판독기를 실행하여 지정된 쿼리를 기반으로 캐시에서 검색을 수행합니다. 데이터는 네트워크를 통해 청크 형태로 이동하기 때문에 데이터 검색 및 검색 성능이 향상됩니다.
4. 클라이언트 캐시 사용
NCache 클라이언트 캐시(L1 캐시)라는 다목적 기능이 있습니다. L1은 애플리케이션에 더 가까이 상주하는 기본 캐시의 하위 집합입니다. InProc 과, 아웃프로크. 기본 캐시(L2 캐시)의 하위 집합이므로 쿼리는 L1 캐시를 사용하여 실행되지 않습니다. 다음과 같은 키 기반 작업만 add
, get
및 getbulk
작업은 먼저 L1 캐시에서 키를 검색하여 실행하고 L2 캐시에서 누락된 키를 가져와 병합 및 제공합니다.
L2 캐시에는 완전한 데이터가 포함되어 있으므로 태그가 수행하는 쿼리 및 작업은 항상 캐시에서 실행됩니다. L2 캐시에서 모든 데이터를 검색하기 위해 쿼리를 실행하는 대신 사용자는 L2 캐시에서만 키를 가져올 수 있습니다. 그런 다음 대량 가져오기를 사용하여 L1 캐시에서 해당 키를 검색합니다. 누락된 데이터가 있으면 L2 캐시에서 제공됩니다. 자주 수행되는 읽기/쓰기 작업은 클라이언트 캐시에 저장되므로 동일한 데이터에 대한 후속 요청의 검색 시간이 빨라집니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Executing query to fetch keys only ICacheReader reader = _cache.SearchService.ExecuteReader(queryCommand, false); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { //Populate Keys List keys.Add(reader.GetValue(0)); } } //Get Data using Bulk API. IDictionary<string, Product> productsList = _cache.GetBulk(keys); //If the number of keys is very large, you can break the list into multiple chunks and then do GetBulk for each chunk separately. |
NCache 클라이언트 캐시에서 데이터를 효율적으로 가져오기 위한 샘플 애플리케이션을 제공합니다. GitHub의.
결론
이 블로그에서 우리는 NCache 쿼리 검색 및 데이터 검색 성능을 향상시키기 위해 사용합니다. NCache 애플리케이션 성능을 향상시킬 뿐만 아니라 사용자 부하에 맞는 고가용성과 확장성을 보장합니다. 그래서 더 기다리지 않고 다운로드 NCache 지금 60일 무료 평가판을 시작하세요!