SQL 쿼리: 동작 및 사용 개요
NCache 모든 새 개체가 고유 키에 대해 저장되는 키-값 캐시입니다. 기본 키가 데이터를 찾는 관계형 데이터베이스와 유사하게, NCache 해당 키를 지정하여 해당 데이터를 검색할 수 있습니다. 그러나 많은 실제 시나리오에서는 기본 키뿐만 아니라 다양한 속성을 기반으로 데이터를 획득하기 위해 유연하게 검색할 수 있는 기능이 필요합니다. 대부분의 트랜잭션이 많은 응용 프로그램은 데이터를 캐시에 보관하므로 데이터를 쿼리하는 기능이 매우 바람직합니다.
캐시 쿼리의 중요성
카테고리, 가격, 무게 등과 같은 다양한 기준에 따라 제품을 쿼리하는 전자 상거래 웹 사이트가 있다고 가정합니다. 애플리케이션 성능을 개선하려면 분산 캐싱 시스템을 사용하는 것이 적합한 솔루션인 것 같습니다. 그러나 쿼리 기능을 잃거나 응용 프로그램을 다시 작성하는 것은 허용되지 않습니다.
그러한 시나리오에서, NCache 쿼리 기능을 손상시키지 않고 애플리케이션 성능을 확장할 수 있는 이상적인 분산 캐시입니다. 구체적으로, NCache ~ 할 수있게 해준다. 캐시된 데이터 쿼리 SQL과 유사한 쿼리 구문을 사용하여 다양한 속성을 기반으로 합니다. 고용함으로써 NCache 앞에서 언급한 시나리오의 경우 범주, 가격 또는 중량을 기준으로 사용하여 모든 제품을 쿼리할 수 있습니다.
주의 사항
NCache SQL과 유사한 쿼리 구문을 사용하여 캐시에서 데이터를 검색하고 삭제할 수 있습니다.
NCache 검색할 수 있는 유연성을 제공합니다. 계획안, 전체 개체, 캐시 키만 또는 요구 사항에 따라 키-값 쌍 자체. 더구나, NCache 또한 기본 쿼리 연산자, 논리 연산자및 집계 함수 SQL 제공.
어떻게 시작하나요?
In NCache, 분할로 인해 데이터가 여러 클러스터 노드에 분산됩니다. 고객이 천 명일 때 ID를 사용하여 고객을 검색하는 것은 충분히 쉬울 수 있습니다. 그러나 레코드가 서로 다른 노드에 분산되어 있고 쿼리 기준이 모든 고객 속성일 수 있는 경우 백만 개 중 하나를 찾는 것은 동일한 복잡성을 갖지 않습니다. 이러한 맥락에서 캐시의 SQL 쿼리에는 효율적인 데이터 검색 메커니즘이 필요합니다.
특히, NCache 고용하다 색인 과 분산 쿼리 캐시에서 실시간 SQL과 유사한 검색 기능을 지원합니다. 인덱싱은 캐시에서 속성을 검색할 수 있도록 합니다. 인덱스에 항목이 추가되면 클라이언트가 연결된 노드에 쿼리 결과로 반환됩니다. 한편, 분할 토폴로지에서 데이터가 분산되면 분산형으로 쿼리가 실행된다.
중대한
캐시에서 검색할 수 있도록 특성을 인덱싱해야 합니다.
색인
기존 데이터베이스는 인덱싱을 사용하여 쿼리 성능을 높입니다. 하지만, NCache 사용 색인 SQL과 유사한 쿼리를 통한 검색을 활성화하려면 필수입니다. 캐시 데이터를 쿼리하려면 먼저 검색 가능한 모든 속성을 인덱싱해야 합니다. 프로젝션 및 기준에 지정된 필드는 인덱싱되어야 한다는 점에 유의해야 합니다. 속성에 대한 색인이 정의되면 캐시에 추가된 모든 관련 데이터가 자동으로 색인화되고 검색 가능해집니다. 따라서 인덱스를 한 번만 정의하면 충분합니다.
주의 사항
읽기 작업은 인덱싱으로 인해 훨씬 빠르지만 각 쓰기 작업에는 오버헤드가 있습니다.
NCache 성능 중심 접근 방식이므로 인덱싱을 사용합니다. 인덱싱을 사용하면 쿼리 결과 집합을 검색하는 동안 캐시의 모든 항목을 쿼리할 필요가 없습니다. 이는 검색 메커니즘을 가속화하고 시간과 컴퓨팅 성능을 절약합니다.
경고
메모리 및 성능 오버헤드가 발생하므로 불필요한 필드를 인덱싱하지 마십시오.
분산 쿼리
에서 실행된 쿼리 NCache 캐시 토폴로지 및 기본 클라이언트 연결에 따라 다릅니다. 미러링 또는 복제 토폴로지의 경우 클라이언트가 연결된 노드에서만 쿼리가 실행됩니다. 그러나 데이터가 클러스터 노드 간에 분할될 때는 이런 일이 발생하지 않습니다.
에 대한 쿼리 분할된 클러스터 주로 데이터 분할로 인해 분산 방식으로 실행됩니다. 클라이언트가 모든 클러스터 노드에 연결되므로 쿼리는 각 노드에서 개별적으로 실행됩니다. 필요한 데이터로 구성된 결과 세트는 각 노드에서 반환되고 병합되어 최종 결과가 클라이언트에 반환됩니다. 여기서 성능은 클러스터 노드 수와 각 노드에서 반환되는 결과 집합의 크기에 따라 달라집니다.
주의 사항
의 분산 쿼리 NCache 확장성이 뛰어납니다.
분산 쿼리는 더 높은 확장성을 제공합니다. NCache 분할된 데이터와 병렬 실행으로 인해. 새 노드가 클러스터에 합류하면 각 구성원에 대해 분할된 데이터가 줄어듭니다. 따라서 각 서버 노드에서 소요되는 쿼리 실행 시간이 단축됩니다. 또한 각 노드의 동시 실행으로 인해 네트워크 트래픽도 감소합니다.
SQL 쿼리 NCache
NCache SQL과 유사한 SELECT 및 DELETE 쿼리를 각각 사용하여 캐시 데이터를 검색하고 삭제할 수 있습니다. INSERT 및 UPDATE 작업은 현재 지원되지 않습니다. ExecuteReader 캐시에서 SELECT 쿼리를 실행하는 데 사용되며 결과 집합을 인스턴스로 반환합니다. ICacheReader. 스칼라 실행 쿼리를 실행하고 쿼리에서 반환된 결과 집합의 첫 번째 행의 첫 번째 열을 반환하면 추가 열 또는 행은 무시됩니다.
비쿼리 실행 캐시에서 항목을 삭제하는 데 사용됩니다. 쿼리 인덱스가 정의된 경우 모든 기본 데이터 형식 및 nullable 형식을 쿼리할 수 있습니다.
중대한
인스턴스를 닫았는지 확인하십시오. ICacheReader
실행 후 리소스를 정리해야 하기 때문입니다.
쿼리 언어를 사용하면 필요한 데이터에 따라 기본 키가 아닌 기준을 지정할 수 있습니다. 다른 프로젝션 및 기준을 사용하여 캐시의 데이터를 쿼리하는 쿼리를 실행할 수 있습니다. 그러나 프로젝션 및 기준에 지정된 속성은 인덱싱되어야 합니다. 또한 요구 사항에 따라 주어진 쿼리 기준을 충족하는 캐시 키만 검색하거나 전체 항목을 검색할 수 있는 유연성이 있습니다.
인덱싱 유형
캐시의 속성을 쿼리하려면 먼저 인덱싱해야 합니다. NCache 여러 가지 유연한 방법을 제공합니다. 색인. 미리 정의된(정적) 인덱스의 필요성을 고려하여 NCache 검색 가능한 속성에 대한 색인을 미리 수동으로 정의할 수 있습니다. 정적 인덱스를 정의하는 한 가지 방법은 구성. 또는 다음을 수행 할 수도 있습니다. 프로그래밍 방식으로 인덱스 정의.
반면에, 미국에서 체류를 연장하고자 이전의 승인을 갱신하려던 동적 인덱스 그룹, 태그 및 명명된 태그와 같은 속성은 런타임에 자동으로 생성됩니다. 런타임 인덱스를 사용하면 논리적 그룹, 태그 및 명명된 태그를 기반으로 캐시의 데이터를 쿼리할 수 있습니다.
SQL 프로젝션을 사용한 쿼리
NCache 쿼리를 기반으로 캐시 저장소에서 클래스 또는 특정 프로젝션의 모든 인덱싱된 속성을 검색할 수 있습니다. NCache 다른 지원 계획안 효율적인 검색을 용이하게 합니다. 프로젝션은 쿼리와 관련하여 애플리케이션의 성능 향상에 중요한 역할을 합니다. 예를 들어, 특정 카테고리의 제품에 대해 사용 가능한 단위 열만 검색하려고 합니다. 이 경우 다음 SELECT 쿼리를 사용할 수 있습니다.
SELECT UnitsInStock FROM FQN.Product WHERE Category = "Sample_Category"
주의 사항
성능 향상을 위해서는 전체 개체를 반환하는 데 비용이 많이 들기 때문에 필수 열만 쿼리하는 것이 가장 좋습니다.
원하는 열만 검색하면 인덱스화된 모든 속성을 검색하는 추가 오버헤드가 발생한다는 점은 주목할 가치가 있습니다. Product
수업은 피합니다. 이런 식으로, NCache 사용자는 향상된 쿼리 구문을 통해 향상된 성능을 얻을 수 있습니다.
키 및 개체 쿼리
요구 사항에 따라 캐시 키만 검색하거나 쿼리와 관련된 데이터를 검색할 수 있습니다. 키만 열거해야 하는 경우 NCache 키만 검색할 수 있습니다. 이 방법을 사용하면 캐시에서 가져올 데이터의 크기가 크게 줄어들기 때문에 효율적인 접근 방식입니다. 따라서 성능 향상을 위해 사용할 수 있습니다.
ExecuteReader
옵션이있다 getData
, 키 검색에 대해서만 false로 설정됩니다. 기본적으로 해당 값은 true입니다. 추가 처리를 위해 데이터가 필요한 경우 기본값을 사용하여 개체를 쿼리할 수 있습니다.
지원되는 쿼리 연산자
에서 제공하는 풍부한 연산자 집합을 사용할 수 있습니다. NCache 필요한 쿼리 기준에 따라 캐시에서 원하는 결과 세트를 가져옵니다.
다음 연산자 범주는 다음에서 지원됩니다. NCache 쿼리:
범주 | 운영자 |
---|---|
기본 쿼리 연산자 | = , == , != , <> , < , > , <=, >=, IN, LIKE , NOT LIKE |
논리 연산자 | 그리고, 또는, 아님 |
집계 함수 | 합계, 개수, 평균, 최소, 최대 |
그 외 | GROUP BY, ORDER BY, DateTime.Now, DateTime("모든 날짜 시간 호환 문자열") |
자세한 내용은 다음을 참조하십시오. 쿼리 연산자 안내
클라이언트 캐시
NCache 가정한다 클라이언트 캐시 (L1 캐시)에 일부 데이터가 있을 수 있습니다. L1 캐시에서 완전한 데이터가 보장되지 않는다는 점을 고려하여 쿼리는 항상 서버 캐시(L2)에서 발생합니다. NCache. 쿼리를 실행하는 클라이언트 끝에서 L1 캐시가 활성화된 경우 쿼리 실행 동작은 영향을 받지 않습니다. 쿼리는 서버 캐시에서 직접 실행됩니다. 그러나 DELETE 쿼리로 인해 클러스터 캐시에서 데이터가 변경되면 L1은 L2 캐시와 동기화됩니다.
클라이언트 캐시는 쿼리 실행에 영향을 미치지 않지만 NCache, 성능 향상에 필수적인 역할을 할 수 있습니다. 예를 들어 쿼리 결과 집합에 대해 추가 작업을 수행하려고 하지만 캐시에서 데이터를 가져오면 애플리케이션 성능이 저하될 수 있습니다. 클라이언트 캐시가 L2 캐시로 구성되어 있으면 한 번의 클릭으로 원하는 데이터를 검색할 수 있습니다. GetBulk
부르다. 클라이언트 캐시에서 수행되는 작업이 L2 캐시에 비해 훨씬 빠르기 때문에 시간이 절약되고 성능 저하가 방지됩니다.