내 친구는 그의 슈퍼마켓 경영진이 분산 캐시 시스템 전자 상거래 애플리케이션의 성능을 개선하기 위해. 그러나 그는 이 분산 캐시가 그들에게 다음과 같은 기능을 제공할지 확신하지 못했습니다. SQL로 데이터 검색. 그 이유는 대부분의 온라인 상점 기능이 데이터 검색에 의존하고 애플리케이션을 다시 작성할 여유가 없기 때문입니다. 그리고 모든 SQL 쿼리가 여전히 데이터베이스로 이동하는 경우 분산 캐시를 사용하는 목적을 상실하게 됩니다.
유사한 상황으로 어려움을 겪고 있고 모든 성능 문제에 대한 빠르고 안정적인 수정이 필요한 경우 NCache 정확히 필요한 것입니다. 자세히 알아보려면 계속 읽어보세요.
데이터 저장소로 캐시
이제 더 빠른 사용을 위해 데이터를 캐시에 저장하는 경우 친구가 설명한 문제는 여전히 남아 있습니다. 고객은 원하는 제품을 검색하기 위해 인벤토리를 쿼리하려고 합니다. 글쎄요, 당신과 그에게 좋은 소식이 있습니다. NCache SQL을 완벽하게 갖추고 있어 다음을 수행할 수 있습니다. 캐시의 쿼리 데이터 데이터베이스에서와 같은 방식입니다.
그림 1 : NCache SQL 쿼리 부하 처리
잠깐만요! 이것이 갑자기 우리의 모든 문제를 해결하지 않습니까? 그림 1에서 볼 수 있듯이 전체 제품 카탈로그는 캐시에 저장되며 SQL 쿼리를 구현하고 결과를 애플리케이션에 직접 반환할 수 있습니다. NCache 확장 가능하고 안정적이며 한 번에 수십만 명의 고객을 처리할 수 있습니다!
SQL 쿼리 NCache – 빠른 예
고객이 자신이 자주 사용하는 제품의 제품 ID를 가지고 있다고 가정하고 아래 쿼리를 주목하십시오. 이것은 캐시(데이터베이스가 아님)에서 실행되고 결과를 애플리케이션으로 보냅니다.
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 |
// Pre-condition: Cache is already connected // Items are already present in the cache. // Provide Fully Qualified Name (FQN) of your custom class string query = "SELECT ProductName FROM FQN.Product WHERE ProductID > ?"; /// Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductID",50000); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if the result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductName"); // Perform operations } } |
문제는 캐시의 이러한 SQL 쿼리가 매우 유용하지만 결국 캐시 내부에서 작동한다는 것입니다. 그래서…
캐시에서 검색되는 데이터 유형은 무엇입니까?
NCache 데이터가 저장되는 두 가지 방대한 범주가 있습니다. 트랜잭션 데이터 및 참조 데이터입니다.
거래 데이터
트랜잭션 데이터는 요청을 충족하기 위해 단일 단위로 취급되는 데이터입니다. 이들은 쿼리 결과로 데이터베이스에서 수집되어 캐시에 저장됩니다. 예를 들어 데이터베이스의 테이블에서 고객이 5달러보다 저렴한 모든 제품을 요청하면 캐시에 저장된 결과 출력은 트랜잭션 데이터입니다.
그림 2: 데이터베이스의 제품 테이블
1 |
SELECT * FROM Products WHERE UnitPrice <= 5.00 |
그림 3: 캐시에 저장된 쿼리 결과
트랜잭션 데이터는 일반적으로 처리를 위해 임시로 저장됩니다. 자주 업데이트되며 오래되고 불필요한 데이터는 폐기됩니다. 단일 개체에는 SQL이 필요하지 않으며 대신 개체 데이터에 키 검색이 사용됩니다. 트랜잭션 데이터는 이미 쿼리 결과 데이터입니다. 따라서 SQL 쿼리를 수행할 수 없습니다.
참조 데이터
NCache 더 오랜 기간 동안 캐시에 많은 양의 데이터를 저장할 수 있습니다. 이러한 종류의 데이터를 참조 데이터라고 합니다. 참조 데이터는 구조화된 관계형 형식으로 저장되며 정기적으로 업데이트되고 데이터베이스와 동기화됩니다. 이러한 이유로 분산 캐시에서 이 데이터에 대한 SQL 쿼리를 구현할 수 있습니다.
구현으로 NCache, 고객이 만드는 대부분의 쿼리는 캐시에서 실행되고 결과는 즉시 반환됩니다. 이렇게 하면 캐시에 대한 이동 횟수가 엄청나게 줄어들어 모든 성능 병목 현상을 제거하는 데이터베이스에 대한 과도한 이동이 제거됩니다.
NCache 세부 정보 SQL 구문 NCache NCache SQL 문서
의 SQL 기능 NCache
NCache 넓은 범위를 제공한다 SQL 함수 및 캐시에서 데이터를 검색하고 삭제할 수 있는 연산자입니다. 에서 제공하는 SQL 확장자는 NCache 삽입 및 업데이트 명령을 지원하지 않습니다. 이러한 명령은 데이터베이스에서 직접 구현됩니다.
에서 제공하는 고유한 메모리 내 SQL 기능 중 일부를 살펴보겠습니다. NCache.
SQL 와일드카드 사용 NCache
NCache SQL 함수에서 두 개의 고유한 와일드카드를 사용하여 유연한 검색을 제공합니다. LIKE. 이것들은 '?' 그리고 '*'
"?" 앞에 검색해야 하는 문자가 하나 있는 경우에 사용됩니다. 예를 들어, "샤르?". 이것은 캐시를 검색하고 공유, 샤프 또는 기타 유사한 결과를 제공할 수 있습니다.
"*"는 앞으로 검색되는 문자가 XNUMX개에서 임의의 수일 수 있는 경우에 사용됩니다. 예를 들어 "cha*"는 문자, 문자, 의자 또는 기타 유사한 결과를 제공할 수 있습니다.
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 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT * FROM FQN.Product WHERE ProductName LIKE ? AND Category LIKE ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("ProductName", "Cha?"); queryCommand.Parameters.Add("Category", "Edib*"); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ProductID"); // Perform operations } } |
SQL 집계 함수 사용 NCache
집계 함수 SQL에서 여러 값에 대한 산술 연산을 수행하고 단일 값을 반환하는 데 사용됩니다. NCache 이러한 집계 함수를 사용하여 캐시된 데이터 항목에 대한 작업을 수행합니다.
에서 지원하는 일부 집계 함수 NCache 위치 :
합계, 개수, 평균, 최소, 최대
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT COUNT(*) FROM FQN.Products WHERE UnitPrice > 5"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); } } |
SQL GROUP BY 사용 NCache
NCache 를 사용하여 제공된 기준에 따라 데이터를 그룹화할 수 있습니다. GROUP BY 기능. 그러나 문제가 있습니다. 위의 집계 함수를 포함하는 쿼리에서만 그룹화 기준을 사용할 수 있습니다. 예를 들어
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// Pre-condition: Cache is already connected // Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT Category, COUNT(*) FROM FQN.Products WHERE UnitPrice > 5 Group By Category"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Check if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set int result = reader.GetValue(1); string category = reader.GetValue(0); } } |
이유 NCache .NET 앱을 위한 좋은 선택입니다.
우리의 슈퍼마켓 문제로 돌아가 봅시다. 구현으로 NCache 제품 카탈로그를 저장하고 여기에 SQL 쿼리를 구현하기 위해 이제 응용 프로그램이 쿼리를 만들고 데이터를 검색하기 위해 데이터베이스로 이동해야 하는 비용이 많이 드는 횟수가 크게 줄었습니다.
다음은 다른 혜택 중 일부입니다. NCache 다음과 같이 제공됩니다.
- 추가 코드 없음: 대부분의 쿼리는 캐시에서 이루어지기 때문에 매번 데이터베이스에 액세스하기 위해 추가 코드를 작성할 필요가 없습니다.
- 100% 기본 .NET 및 .NET core: NCache 100% 기본 .NET이며 .NET core 다른 분산 캐시 및 데이터 저장소와 달리 신뢰할 수 있는 형식으로 데이터를 저장하고 관리하고 쿼리할 수 있는 분산 캐시입니다.
- 낮은 대역폭 비용: 캐시된 데이터에 대해 쿼리가 수행되고 애플리케이션으로 반환되어 많은 시간과 대역폭 비용을 절약합니다.
- 매우 빠르고 안정적입니다: NCache .NET용으로 특별히 설계된 매우 빠르고 확장 가능한 분산 캐시입니다. .NET core 응용 프로그램. 확인 NCache 기준 초당 XNUMX만 트랜잭션.
따라서 보시다시피 완전한 윈-윈 상황입니다!
하기에 머리 NCache 문서는 분산 캐시 데이터 저장소에서 SQL을 사용하는 방법에 대해 자세히 알고 있습니다.