현대적인 문제에는 현대적인 솔루션이 필요합니다. 그리고 빠른 성능의 필요성은 항상 문제였습니다. NCache 성능 및 확장성과 같은 중요한 문제에 대한 빠른 수정입니다. 캐싱이 더 읽기 집약적인 응용 프로그램을 위한 주요 목적이기는 하지만 효율적으로 작동하고 응용 프로그램의 모든 문제 영역을 다룹니다. 이 블로그는 방법을 자세히 설명합니다. NCache 읽기 집약적인 애플리케이션을 위한 최고의 선택입니다.
NCache 세부 정보 확장 성 NCache NCache 퍼포먼스
캐싱의 필요성
처음부터 시작하여 캐싱이 필요한 이유를 살펴보겠습니다. 간단한 대답은 데이터베이스의 응답 시간입니다. 모든 데이터를 한 곳에 보관하는 기본 저장소(데이터베이스)는 응답률이 높아 질식할 수 있습니다. 무엇을 해결합니까? 캐싱 – 인메모리 스토리지와 더 빠른 응답 시간을 제공합니다.
둘째, 데이터베이스와 달리 분산되는 캐시는 본질적으로 단일 실패 지점이 없습니다. 부하가 분산되어 서버를 질식시키는 요청의 가능성이 적습니다.
방금 논의한 위의 사실을 감안할 때 쓰기 강도는 그다지 높지 않지만 읽기 강도는 상대적으로 높은 상황에 캐싱이 가장 적합하다는 것을 확인했습니다.
운송 시스템에 대한 정보가 포함된 웹사이트를 고려해 보겠습니다. 버스 요금과 시간은 일반적으로 고정되어 자주 변경되지 않습니다. 읽기 집약적인 데이터가 있는 이러한 응용 프로그램에는 다음에서 제공하는 풍부한 기능 집합이 있습니다. NCache 더 빠른 읽기 작업을 수행합니다.
NCache 세부 정보 NCache 데이터 캐싱용 고 가용성
NCache 읽기 집약적 캐시 저장소로
읽기 집약적인 특성을 가진 응용 프로그램은 NCache 모든 읽기 작업을 가능한 한 빨리 수행합니다. NCache 단일 항목 또는 대량 항목 가져오기와 같은 모든 종류의 읽기 작업을 처리하는 풍부한 기능 세트가 있습니다. 캐시가 데이터베이스에서 데이터를 수신하면 더 높은 성능과 확장성을 위해 모든 가져오기 작업이 캐시로 직접 이동합니다.
NCache 세부 정보 CRUD 작업 확장 성 NCache
작업 가져오기 NCache
NCache 다양한 과부하를 제공합니다. 가져 오기() 특정 키에 대해 캐시에서 데이터를 가져오는 방법입니다. 이러한 작업은 본질적으로 동기적이며 사용자 지정 논리에 따라 캐스팅된 형식 개체를 반환합니다. 캐시에 항목이 없는 경우 null을 반환합니다.
고객이 주소 세부정보를 보고 싶어하는 아래 코드를 보고 일반 주소를 사용하여 정확한지 확인합니다. 가져 오기() 방법:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Pre-condition: Cache is already running // Items are already present in the cache // Initialize Cache ICache cache = CacheManager.GetCache("demoCache"); string customerKey = "Customer:ALFKI"; // Retrieve the Customer object Customer customer = cache.Get<Customer>(customerKey); if (customer != null) { Console.WriteLine($"Customer: {customer.ContactName}, Address : {customer.Address}"); } |
NCache 또한 사용자가 추가, 업데이트및 제거 캐시의 데이터.
캐시에서 대량 항목 가져오기
마찬가지로 다음을 사용하여 캐시에서 대량 항목을 가져올 수도 있습니다. 대량 가져오기() 방법. 이를 사용하면 단일 호출을 사용하여 캐시에서 많은 항목을 가져올 수 있습니다.
아래 예는 단일 작업을 사용하여 캐시에서 여러 고객을 가져오는 방법을 보여줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Pre-condition: Items are already present in the cache // Create an array of all keys to fetch String[] keys = new String[] { "Customer:ALFKI", "Customer:ANATR", "Customer:ANTON", "Customer:AROUT", "Customer:BERGS" }; // Get items from cache IDictionary<string, Customer> retrievedItems = cache.GetBulk<Customer>(keys); // Retrieve customers and their addresses from dictionary foreach (KeyValuePair<string, Customer> retrievedItem in retrievedItems) { Console.WriteLine($"Customer: {retrievedItem.Value.ContactName}, Address : { retrievedItem.Value.Address}"); } |
또한, NCache 사용자에게 제공 추가, 끼워 넣다및 제거 한 번의 호출로 대량 데이터.
키워드를 사용하여 항목 가져오기
효과적인 검색을 위해 첨부된 키워드를 사용하여 항목을 가져올 수도 있습니다. 특정 문자열 기반 키워드로 데이터를 표시하고 이러한 키워드의 도움으로 항목을 검색합니다. 예를 들어 동부 해안 또는 서부 해안과 같이 고객이 속한 지역을 사용하여 특정 고객을 그룹화하려고 합니다. 에서 제공하는 특정 기능 세트 NCache 이 목적을 위해:
명명된 태그 | 태그 | 그룹 |
---|---|---|
사전 형태로 제공 | 태그 배열 형태로 제공 | 문자열 형태로 제공 |
모든 기본 데이터 유형일 수 있음 | 문자열 기반만 | 문자열 기반만 |
아래의 예에서 사용자는 SQL 쿼리를 사용하여 12% VIP 멤버십 할인이 있는 모든 고객의 세부 정보를 보고 싶어합니다.
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 31 |
// Pre-conditions: Items are already present in the cache with named tags // Custom class is query indexed through NCache Web Manager or config.ncconf // Create SQL Query with the specified criteria // Make sure to use the Fully Qualified Name for custom class string query = "SELECT CustomerID, ContactName FROM Alachisoft.NCache.Samples.Data.Customer WHERE VIP_Membership_Discount = 0.12"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Executing Query ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get the value of the result set string customerID = reader.GetValue<string>("CustomerID"); string customerName = reader.GetValue<string>("ContactName"); Console.WriteLine($"Customer '{customerName}' with ID '{customerID}' has VIP membership discount."); } } else { Console.WriteLine($"No VIP members found"); } |
Named Tags를 사용하는 다른 작업에 대해서는 다음을 참조하십시오. NCache 기술 문서.
NCache 세부 정보 ICacheReader 명명된 태그로 캐시 데이터 검색
SQL을 사용하여 캐시 검색
특정 데이터베이스에서 항목을 가져오는 경우 쿼리는 특정 기준으로 검색하는 효과적인 방법입니다. NCache 쿼리의 필요성을 완전히 이해하여 다음을 사용하여 캐시에서 항목을 가져올 수 있습니다. SQL과 유사 쿼리. 또한 다음을 수행해야 합니다. 색인 데이터베이스와 달리 자체적으로 인덱스를 생성하지 않기 때문에 캐시의 특정 항목. 그러나 데이터가 인덱싱되면 SQL 쿼리를 사용하는 것이 좋습니다.
다음과 같은 ADO.NET 호환 API를 제공합니다. ExecuteReader, 스칼라 실행및 비쿼리 실행 캐시에서 데이터를 검색(SELECT) 및 제거(DELETE)합니다.
에서 지원하는 사항은 다음과 같습니다. NCache 쿼리:
SQL과 같은 쿼리가 캐시를 통해 검색하는 방법을 보려면 아래 코드를 참조하십시오. 다음 예는 단가가 100 미만인 제품만 표시하도록 필터를 적용한 사용자를 보여줍니다.
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 31 32 33 |
//Pre-condition: Items are already present in the cache // Use the Fully Qualified Name (FQN) of your own custom class string query = "SELECT * FROM Alachisoft.NCache.Samples.Data.Product WHERE UnitPrice < ?"; // Use QueryCommand for query execution var queryCommand = new QueryCommand(query); // Providing parameters for query queryCommand.Parameters.Add("UnitPrice", 100.0); // Executing QueryCommand through ICacheReader ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); // Read results if result set is not empty if (reader.FieldCount > 0) { while (reader.Read()) { // Get key of product item in cache string productKey = reader.GetValue<string>("$KEY$"); // Get product attributes string productName = reader.GetValue<string>("ProductName"); double unitPrice = reader.GetValue<double>("UnitPrice"); Console.WriteLine($"Product '{productName}' with key '{productKey}' has UnitPrice {unitPrice}"); } } else { Console.WriteLine($"No product found with price less than 100"); } |
LINQ를 사용하여 캐시 검색
SQL처럼, NCache 쿼리 작성을 지원합니다. 링크 캐시를 검색합니다. NCache LINQ 공급자 변환 LINQ 관련 쿼리 으로 NCache의 확장된 SQL 형식을 사용하여 LINQ 형식으로 변환한 후 그에 따라 결과를 반환합니다. LINQ 쿼리를 작성하기 위한 두 가지 유형의 구문이 있습니다.
- 람다 식
- 간단한 LINQ 쿼리 표현식
그러나 SQL과 마찬가지로 쿼리가 원활하게 실행되려면 검색 가능한 캐시 데이터에 대한 인덱스를 정의해야 합니다.
LINQ 쿼리가 캐시에서 개체를 가져오는 방법을 보려면 아래 코드 예제를 참조하세요. 사용자가 필터를 적용하여 최소 10개 이상의 재고가 있는 음료 또는 유제품을 표시했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Pre-condition: Items are already present in the cache // Create custom class LINQ object IQueryable<Product> products = new NCacheQuery<Product>(cache); // LINQ query to search cache IQueryable<Product> result = from prod in products where (prod.Category == "Beverages" || prod.Category == "Dairy") && prod.UnitsInStock > 10 select prod; if (result != null) { foreach (Product product in result) { Console.WriteLine($"Product '{product.ProductName}' in Category '{product.Category}' has stock of '{product.UnitsInStock}' units"); } } else { Console.WriteLine($"No product found"); } |
NCache 세부 정보 링크 쿼리 LINQ 기본 연산자
블로그 마무리
NCache 실제로 읽기 집약적인 응용 프로그램의 성능을 향상시키기 위한 강력한 캐싱 솔루션입니다. 다양한 기능으로 속도를 높이고 성능, 확장성 및 안정성을 향상시킵니다. 다른것도 확인해주세요 NCache 풍모 우리 웹 사이트에서.