오늘날 많은 기업은 피크 시간에 많은 수의 트랜잭션 및 참조 데이터를 처리하기 위해 처리 능력이 필요합니다. 예를 들어 은행은 휴일 동안 고객 거래를 처리합니다. 그러나 응용 프로그램의 성능을 저해하지 않고 이 데이터를 처리하는 것이 큰 과제입니다. 일반적으로 애플리케이션 계층은 선형으로 확장할 수 있지만 데이터베이스는 그렇지 않습니다. 트랜잭션 로드가 높으면 데이터베이스 병목 현상이 발생하고 시스템이 과부하될 수 있습니다. 이 병목 현상은 더 빠른 데이터 액세스를 위해 .NET 응용 프로그램에 메모리 내 분산 캐싱을 도입하여 해결할 수 있습니다.
인메모리 분산 캐시는 여러 서버에 걸쳐 있지만 단일 캐시 인스턴스로 작동하며 이를 사용하는 애플리케이션에 투명합니다. 활성 또는 임시 데이터가 캐시에서 제공되므로 백엔드 서버 및 데이터베이스의 부하를 줄입니다.
NCache 는 Teledyne LeCroy 오실로스코프 및 LSA-XNUMX 시리즈 임베디드 신호 분석기가 오픈 소스, .NET 및 Java 기반 애플리케이션 모두를 위한 메모리 내 분산 캐시. NCache 증가하는 성능 요구 사항을 충족하기 위해 이 캐시 클러스터에 새 서버가 추가될 때 빠른 트랜잭션 속도와 데이터 일관성을 달성하는 데 도움이 됩니다.
다음 그림은 이 아키텍처를 보여줍니다.
캐시된 데이터는 모든 서버 간에 균등하게 분산되며 데이터 손실을 방지하고 고 가용성. 따라서 분산 캐시는 초당 수십만 건의 요청을 처리하여 피크 로드 동안 다운타임을 방지합니다.
이 분산 구조는 하나의 캐시 서버가 다운되더라도 다른 서버 노드에서 데이터를 수신하는 것처럼 단일 실패 지점을 보장합니다. 따라서 비즈니스는 영향을 받지 않으며 필요한 경우 분산 캐시에 더 많은 서버를 쉽게 추가할 수 있습니다.
캐싱에 이상적인 데이터에는 읽기 집약적인 데이터가 자주 포함되지만 분산 캐시의 최대 성능을 달성하기 위해 때때로 변경됩니다. 분산 캐시는 다음과 같이 데이터를 저장합니다. 핵심 가치 따라서 사용 및 액세스가 간단합니다.
사용 NCache 분산 캐시로
.NET 애플리케이션에 대한 극적인 성능 향상과 함께 다음과 같은 분산 캐시 NCache 여러 제공 고급 기능 캐시 사용을 훨씬 더 유연하게 만들어 아래의 경우를 포함하여 다양한 사용 사례와 비즈니스 요구 사항을 충족할 수 있습니다.
NCache CRUD 작업
다음을 통해 .NET 애플리케이션에 분산 캐시를 쉽게 통합할 수 있습니다. 캐시에 연결 및 데이터베이스에서 가져온 캐시 항목에 대한 키를 생성합니다. 그런 다음 만료 시간이 30분인 캐시에 항목을 삽입하고 이 연결을 사용하여 가져올 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Specify the cache name to connect with it ICache cache = CacheManager.GetCache("demoCache"); // Get product from database var product = FetchProductFromDB(1001); // Generate a key for the cache item string key = "Product:1001"; // Create cache item and add 30sec sliding expiration var cacheItem = new CacheItem(product); cacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(30)); // Now add this item in cache for future use cache.Insert(key, cacheItem); // Fetch item from cache product = cache.Get(key); |
C 동기화아프다 데이터베이스
데이터베이스의 캐시된 데이터가 변경되는 경우가 있을 수 있습니다. 이 상황은 애플리케이션이 인식하지 못하는 동안 캐시된 데이터를 부실하게 만드는 무결성 문제를 발생시킵니다. 이 문제를 해결하려면 NCache 캐시를 데이터베이스와 자동 동기화할 수 있습니다. 결과적으로 캐시된 레코드에 대한 데이터베이스에서 변경 사항이 발생할 때마다 데이터 최신성을 보장하기 위해 캐시에서 자동으로 제거됩니다.
이 메커니즘을 추가로 지원하려면 NCache 지원 연속 기입, 로더 및 리프레셔및 지속성 저장소 캐시의 데이터를 데이터베이스와 동기화된 상태로 유지합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Get orders against customerID from DB var order = FetchOrderByCustomerID("ALFKI"); // Generate unique cache key for the order string key = $"Order:{order.OrderID}"; CacheItem item = new CacheItem(order); // Create SQL query to select the data from database string query = "SELECT CustomerID, Address, City FROM dbo.Customers WHERE CustomerID = 'ALFKI';"; //Specify database connection string and the query to create and set SQLCacheDependency. item.Dependency = new SqlCacheDependency(dbConnString, query); // Insert the item into the cache cache.Insert(key, item); |
NCache 세부 정보 DB 동기화 캐시 데이터 종속성
SQL 쿼리
NCache 지원합니다 SQL 주어진 기준에 따라 캐시를 검색하고 필요한 결과 집합을 반환할 수 있는 쿼리 메커니즘. NCache 기본 SQL 구조화 언어에 매우 가까운 쿼리 언어를 사용하므로 인덱싱된 캐시 데이터를 더 쉽게 쿼리할 수 있습니다. 다음과 같은 ADO.NET 호환 API를 제공합니다. ExecuteReader, 스칼라 실행및 비쿼리 실행 캐시에서 데이터를 검색(SELECT) 및 제거(DELETE)합니다.
NCache 세부 정보 SQL 및 LINQ 지원 NCache SQL 쿼리
ExecuteReader는 데이터를 검색하고 키-값 쌍을 반환하는 데 사용됩니다. ExecuteReader 메서드를 사용하는 동안 키만 반환할지 아니면 키와 해당 데이터(전체 또는 청크)만 반환할지 지정할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 |
//string query = "SELECT * FROM FQN.Product WHERE UnitsInStock > ?"; var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("UnitsInStock",0); ICacheReader reader = cache.ExecuteReader(queryCommand); while (reader.Read()) { string ID = reader.GetValue("ProductID"); string Name = reader.GetValue("ProductName"); } |
링크 쿼리
링크 데이터 소스에서 데이터를 검색하고 필터링할 수 있는 일반 .NET 쿼리 언어입니다. LINQ 구문은 SQL과 매우 유사하지만 기능 면에서 쿼리할 때 더 우수하고 최적화된 쿼리 방법을 제공합니다. NCache 서버. 코드 컴파일 중에 구문 검사를 수행하면서 보다 효율적인 쿼리 식을 허용하는 기능을 제공합니다.
NCache LINQ를 원활하게 통합하여 LINQ 공급자를 통해 캐시 내에서 정보를 쿼리합니다. 링크 공급자는 LINQ 개체 모델을 변경하지 않고도 응용 프로그램의 성능을 향상시키면서 분산 캐시를 통해 LINQ 쿼리를 쉽게 실행할 수 있습니다.
쿼리 식은 LINQ 지원 분산 캐시 서버에서 데이터를 쿼리하고 변환합니다.
1 2 3 4 |
IQueryable products = new NCacheQuery(cache); IQueryable product = from prod in products where prod.UnitsInStock > 10 select prod; |
NCache 세부 정보 분산 캐싱을 위한 LINQ 쿼리 가능
생각을 결론
성능과 확장성을 제공하는 것 외에, NCache 제공 기타 유용한 기능 도. 그러나 구현과 관련된 복잡성을 숨기고 사용하는 간단한 방법을 제공합니다. 성능과 확장성을 손상시키지 않으면서 .NET 기반 분산 캐시를 찾고 있다면 NCache. 최신 분산 캐싱의 모든 기능을 갖춘 순수한 .NET 플랫폼입니다.