Entity Framework Core는 클래식 .NET Entity Framework 데이터 개체 관계형 매핑 엔진의 최신 버전입니다. EF Core는 가볍고 크로스 플랫폼이 되도록 재설계 및 재작성되었습니다. EF Core를 사용하여 애플리케이션 데이터베이스에 액세스하는 경우 최대 로드 시간 동안 데이터베이스 응답 시간이 지연될 수 있습니다. 이것은 귀하의 EF 핵심 애플리케이션 성능. 애플리케이션 트랜잭션 부하가 증가함에 따라 더 많은 애플리케이션 서버로 애플리케이션 계층을 선형으로 확장하여 요청 부하를 수용할 수 있습니다. 그러나 증가된 로드를 처리하기 위해 데이터베이스 서버를 더 추가할 수 없습니다.
이것은 다음과 같은 분산 캐시가 있는 곳입니다. NCache 재생됩니다. 자주 액세스하는 데이터를 캐시하여 응답 시간을 개선할 수 있습니다. 캐싱의 분산 특성 NCache Entity Framework Core의 경우 캐시를 생성하여 극심한 트랜잭션 부하에서 최적의 성능을 보장합니다. 선형 확장 가능 도.
Entity Framework Core에서 캐싱 사용
NCache 확장 방법을 통해 Entity Framework Core에서 캐싱을 위한 통합을 제공합니다. 결과 집합을 캐시할 수 있습니다. LINQ 쿼리 트랜잭션 데이터 또는 참조 데이터를 위한 것인지 여부. 다음 확장 메서드는 다음에서 제공합니다. NCache EF 코어용.
LINQ 쿼리 결과 캐싱 – FromCache()
XNUMX월에 하와이로 가는 항공편을 가져오려는 항공사 웹사이트를 예로 들어 보겠습니다. 결과 집합은 더 자주 가져오기 때문에 캐싱하는 것이 좋습니다.
FromCache()
Extension Method는 먼저 캐시에서 쿼리 결과를 확인하고 캐시에 없거나 오래된 경우 데이터베이스에서 가져와 캐시에 추가하므로 향후 요청에 대한 응답 시간이 더 빨라집니다.
사용 NCache, 쿼리 결과 집합을 별도의 엔터티 또는 단일 컬렉션으로 저장할 수 있습니다. 결과 집합을 변경하려면 데이터베이스에서 완전히 업데이트해야 하므로 캐시에 결과 집합을 전체 컬렉션으로 저장하는 것이 합리적입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using (var context = new FlightRecordsContext()) { var options = new CachingOptions { // To store as collection in cache StoreAs = StoreAs. Collection }; var resultSet = (from flight in context.Flights where flight.Destination == "Hawaii" && flight.Month == "July" select flight).FromCache(options).ToList(); } |
NCache 세부 정보 Entity Framework Core Cache 다음을 사용하여 EF Core 구성 NCache
모든 참조 데이터로 캐시 미리 로드 – LoadIntoCache()
참조 데이터에 대한 신뢰할 수 있는 기본 데이터 소스로 캐시를 사용하려면 전체 참조 데이터가 먼저 캐시에 있어야 합니다. 이것이 없으면 쿼리가 캐시를 검색하는 동안 일부 데이터가 데이터베이스에 있을 수 있기 때문에 캐시에 대한 쿼리에서 올바른 결과를 기대할 수 없습니다.
EF Core 애플리케이션의 참조 데이터 로드 NCache 요청 액세스를 훨씬 빠르게 만듭니다. LoadIntoCache()
데이터베이스에서 LINQ 쿼리 결과 집합을 가져오고 데이터를 캐시에 로드합니다.
이것은 어떻게 LoadIntoCache()
후드 아래에서 작동:
e-store의 제품 카탈로그를 예로 들어 보겠습니다. 각 제품을 별도의 엔터티로 저장하면 모든 종류의 쿼리 조합에 사용할 수 있고 단일 제품을 더 빠르게 가져올 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using (var context = new NorthwindContext()) { var options = new CachingOptions { // To store the result as separate entities in cache StoreAs = StoreAs.SeperateEntities }; var resultSet = (from product in context.Products select product).LoadIntoCache(options); } |
NCache 세부 정보 Entity Framework Core Cache NCache LINQ API 문서
LINQ를 사용하여 캐시에서 참조 데이터 검색 – FromCacheOnly()
LINQ 쿼리를 실행하려면 캐시의 전체 참조 데이터를 로드해야 합니다. 그렇지 않으면 일부 데이터가 데이터베이스에 있고 LINQ 쿼리가 이 시나리오에서 데이터베이스를 검색하지 않기 때문에 LINQ 쿼리가 유효하지 않습니다. 이것은 데이터베이스에 대해 LINQ 쿼리를 수행하고 결과 집합을 캐싱한다는 점에서 다릅니다.
다음 아키텍처는 EF Core를 통한 쿼리 실행을 보여줍니다. NCache 지금:
예를 들어, 특정 제품 ID로 제품을 가져오는 것이 캐시로만 이동하므로 이제 훨씬 더 빨라졌습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using (var context = new NorthwindContext()) { var options = new CachingOptions { // To store the result as collection in cache StoreAs = StoreAs.Collection }; var resultSet = (from product in context.Products where product.ProductID == MatchingProductID select product).FromCacheOnly(); } |
관련 링크 : Entity Framework Core Cache NCache LINQ API 문서
캐시에서 EF 핵심 엔터티 수정 – GetCache()
EF Core를 사용하면 데이터베이스에 엔터티를 추가하고 업데이트할 수 있습니다. 따라서 캐시를 데이터베이스와 동기화하고 캐시에 이미 존재하는 엔터티에 필요한 변경을 수행하려면 NCache 캐시에서 직접 추가, 업데이트 및 제거 작업을 수행할 수 있는 캐시 핸들을 제공합니다.
예를 들어 EF Core에 다른 고객을 추가하려는 경우 다음을 호출하여 데이터베이스에 추가한 후 SaveChanges()
데이터베이스 컨텍스트에서 다음을 호출하여 캐시 컨텍스트를 얻을 수 있습니다. GetCache()
전화 Insert()
반환된 캐시 인스턴스에 대해
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using (var database = new NorthwindContext()) { var cust = new Customers { CustomerId = "HANIH", ContactName = "Hanih Moos", ContactTitle = "Sales Representative", CompanyName = "Blauer See Delikatessen" }; var options = new CachingOptions { QueryIdentifier = new Tag("CustomerEntity"), Priority = Runtime.CacheItemPriority.Default }; Cache cache = database.GetCache(); //get NCache instance cache.Insert(cust, out string cacheKey, options); } |
관련 링크 : Entity Framework Core Cache NCache 캐시 클래스 문서 EF Core 앱 확장 - 웨비나
생각을 결론
다음을 통해 EF Core에 캐싱 통합 NCache 간단하고 유연합니다. NCache 은 캐시 성능을 손상시키지 않으면서 복제를 통해 100% 가동 시간과 데이터 안정성을 제공함으로써 다중 서버 환경에서 잘 작동하는 분산 캐싱 프레임워크를 제공합니다. 따라서 다음을 사용하여 Entity Framework Core에서 캐싱 NCache 성능과 확장성의 격차를 메우고 매우 효율적으로 만듭니다.
좋은 기사, 일반적으로 Azure Cache를 사용했습니다. Redis 디스크가 아닌 메모리에 데이터를 저장하여 우수한 처리량 및 대기 시간 성능을 달성합니다. 가격 측면에서 매우 저렴하고 성능 측면에서 응답 시간에 큰 가치를 더합니다.
어쨌든 복잡한 주제를 쉬운 말로 설명하기 위해 많은 노력을 기울였습니다.