사용 NCache EF Core 및 SQL Server에서

오늘은 통합하는 방법을 알려드리겠습니다. NCache 기존 Entity Framework Core 애플리케이션에 추가하여 다음과 같은 이점을 얻을 수 있습니다. 고성능과 확장성. 다룰 내용이 너무 많아서 바로 들어가겠습니다.

샘플 EF 핵심 애플리케이션

우리가 가진 첫 번째 일은 이것입니다. 샘플 Entity Framework Core 애플리케이션 내가 가지고 있는 것은 Northwind SQL 데이터베이스를 사용하는 것입니다. 따라서 여기에 오면 주문 ID 10249와 10268 사이의 주문을 가져오고 미국에서 고객을 가져오고 제품 ID 10과 20 사이의 제품을 가져오는 것을 볼 수 있습니다. 이것이 바로 이 샘플이 수행하는 작업의 전부입니다. 계속해서 이것이 데이터베이스에서 가져올 결과를 살펴보겠습니다. 완벽한. 따라서 우리는 이러한 제품을 10~20개, 11개 제품, 미국 고객 13명, 해당 주문 ID 사이에서 20개 주문을 가져오는 것을 볼 수 있습니다.

샘플 앱 결과

이제 샘플이 실행되었으므로 작업 중인 데이터베이스를 살펴보겠습니다. 보시다시피 우리는 Northwind 데이터베이스를 사용하고 있으며 이들은 우리 고객 테이블에 이미 존재하는 고객입니다. 이제 모든 것이 잘 되었습니다. 우리는 샘플 작업을 확인했습니다.

샘플 앱 결과

통합 단계

이제 통합하는 방법에 대해 이야기해 보겠습니다. NCache 기존 Entity Framework Core 애플리케이션에 추가합니다. 우리는 매우 간단한 5가지 단계를 사용하여 이 작업을 수행할 것입니다.

  1. 설치 NCache EF 코어 너겟 패키지
  2. 추가 NCache EntityFrameworkCore 네임스페이스
  3. DbContext에서 캐시 구성 지정
  4. 모델을 직렬화 가능하게 만들기
  5. NCache EF 핵심 확장 방법
 

설치 NCache EF 코어 너겟 패키지

따라서 첫 번째 단계는 다음을 설치하는 것입니다. NCache Entity Framework 핵심 NuGet 패키지 응용 프로그램에. 따라서 이 애플리케이션에 대한 NuGet 패키지를 관리하면 해당 패키지에 EntityFrameworkCore가 이미 설치되어 있음을 알 수 있습니다.NCache 다음에 해당하는 NuGet 패키지 NCache 5.3 SP2. 완벽한. 그럼 이만 마치겠습니다.

 

추가 NCache EntityFrameworkCore 네임스페이스

다음 단계를 살펴보겠습니다. 따라서 다음 단계는 NCache Entity Framework 핵심 네임스페이스 우리의 응용 프로그램에. 따라서 여기에 오면 "using"을 추가하면 됩니다. Alachisoft.NCache.EntityFrameworkCore". 내 컨텍스트에도 동일한 작업을 수행해야 합니다. 따라서 여기에 저장하고 컨텍스트로 이동한 다음 거기에도 붙여넣고 저장하겠습니다. 완벽합니다.

 

데이터베이스 컨텍스트에서 캐시 구성 지정

이제 다음 단계는 데이터베이스 컨텍스트 내에서 캐시 구성을 지정하는 것입니다. 이제 아래로 스크롤하면 'OnConfiguring' 메서드를 찾습니다. OnConfiguring 메서드가 있습니다. 그리고 여기에 제가 할 일은 제가 작업 중인 캐시를 추가하는 것입니다. 바로 여기에 'efcorecache'가 있고 'NCacheConfiguration.Configure'라고 말하고 저는 SQL 서버로 작업하고 있으므로 이 캐시와 종속성 유형을 SQL 서버라고 말합니다. 완벽합니다.

 

모델을 직렬화 가능하게 만들기

이제 완료되었으므로 다음 단계는 모델을 직렬화할 수 있도록 만드는 것입니다. 그래서 저는 제 모델로 가서 고객에게 가서 [직렬화 가능]을 추가하겠습니다. 완벽합니다. 이거 복사해서 주문서에 가서 거기에 붙여넣고 저장하고 제품에 그냥 붙여넣기만 하면 완벽해요. 이제 완료되었으므로 이 직원을 살펴보고 이미 다른 모든 모델을 직렬화 가능으로 표시했으므로 더 이상 모델에 대해 이 작업을 수행할 필요가 없음을 보여 드리겠습니다.

 

NCache EF 핵심 확장 방법

이제 모델이 직렬화 가능으로 표시되었으므로 다섯 번째 단계로 넘어갑니다. 그리고 다섯 번째 단계는 우리가 실제 NCache Entity Framework 핵심 확장 방법 우리의 응용 프로그램 내에서. 이제 이는 애플리케이션 내에 존재하는 데이터의 사용 사례에 따라 달라지며 이는 두 가지 사용 사례 중 하나일 수 있습니다. 트랜잭션 데이터를 가질 수도 있고 애플리케이션에 참조 데이터를 가질 수도 있습니다.

트랜잭션 데이터 처리

따라서 트랜잭션 데이터에 대해 이야기하고 트랜잭션 데이터 처리에 대해 이야기할 때 트랜잭션 데이터는 매우 자주 읽고 쓸 것으로 예상되는 데이터입니다. 이 데이터의 좋은 예는 비행 기록을 유지하는 것입니다. 따라서 하루 안에 많은 항공편이 발생하고 모든 항공편에는 서로 다른 점이 있으므로 데이터베이스에 로그인하는 경우 지속적으로 새 항공편을 기록하게 되며 이는 트랜잭션 사용 사례로 간주될 수 있습니다. . 따라서 애플리케이션에 이러한 종류의 트랜잭션 사용 사례가 있는 경우 이러한 유형의 데이터에 대해서는 'FromCache' 확장 방법을 사용하는 것이 이상적이라고 말합니다.

FromCache 확장 방법

이제 FromCache 확장 메서드가 수행하는 작업은 FromCache 확장 메서드가 처음 작동할 때 엔터티를 데이터베이스에서 다시 가져오는 일반적인 Entity Framework Core 응용 프로그램과 매우 유사하게 작동하는 것입니다. 그러나 현재 FromCache 메서드는 해당 엔터티를 캐시에 채우며, 이에 대한 이점은 다음에 해당 쿼리를 호출해야 하거나 애플리케이션에 해당 엔터티가 필요할 때 해당 엔터티로 다시 돌아가지 않는다는 것입니다. 데이터베이스를 사용하여 해당 엔터티를 가져오는 대신 캐시에서 해당 엔터티를 신속하게 다시 가져오면 고성능의 이점을 누리고 애플리케이션 내에서 모든 데이터를 신속하게 사용할 수 있습니다.

이제 실제로 구현을 수행하고 작동 방식을 살펴보겠습니다. 이제 애플리케이션으로 돌아와서 제가 여기서 하려는 작업은 주문 작업을 하고 일부 주문 캐싱 옵션을 추가하는 것입니다. 자, 이제 'new CachingOptions()'가 있다고 하겠습니다. ' 여기서는 'StoreAsType'을 '컬렉션'으로 정의하겠습니다. 그래서 모든 주문을 캐시에 단일 컬렉션으로 저장하고 싶습니다. 또한 만료를 추가하여 'SetSlidingExpiration'으로 이동합니다. 10분의 'TimeSpan()'을 추가하여 이 주문이 10분 후에 만료되도록 하겠습니다. 완벽합니다. . 이제 완료되었으므로 여기에서 아래로 스크롤하여 '.FromCache' 확장 메서드를 추가하고 'order_caching_options'를 추가하겠습니다. 완벽합니다. 그게 내가 여기서 해야 할 전부야.

var order_caching_options = new CachingOptions()
{
	StoreAs = StoreAs.SeparateEntities
};
order_caching_options.SetSlidingExpiration(new TimeSpan(0, 10, 0));

//Orders 
var order_resultset = context.Orders
		     .Where(o => o.OrderId >= 10249 && o.OrderId <= 10268)
		     .FromCache(order_caching_options)
		     .ToList();

Console.WriteLine($"Orders between 10249 and 10268 fetched: {order_resultset.Count}
\n--------------------------------------------------------------------------\n\n"
+ String.Format("{0,-25}  {1,-40}  {2,-10}", $"Order ID", $"Date", $"Shipper Name") + "\n");

order_resultset.ForEach(order =>
{
    Console.WriteLine(String.Format("{0,-25}  {1,-40}  {2,-10}", $"{order.OrderId}", $"{order.OrderDate}", $"{order.ShipName}"));
});

이제 실행하기 전에 캐시를 살펴보겠습니다. 이제 여기서 볼 수 있는 두 노드에 'EFCoreCache' 설정이 있습니다. 모니터로 이동하면 완전히 연결되어 있고 정상이며 실행 중이며 내부에 아무것도 없는 양호한 상태임을 확인할 수 있습니다. 그리고 통계를 보면 동일한 내용을 알 수 있습니다. 내부에 사용할 준비가 된 항목이 하나도 없는 건강한 캐시입니다. 이제 애플리케이션을 실행하고 완벽한 결과를 살펴보겠습니다.

이제 애플리케이션이 실행되었으므로 여기에서 이 콘솔 창을 닫겠습니다. 발생한 추가 작업에서 캐시에 있는 이러한 요청을 볼 수 있습니다. 아래로 스크롤하면 이 개수를 볼 수 있습니다. 즉, 우리 컬렉션이 캐시에 채워졌습니다.

NCache 모니터링 도구

이제 'export-cachekeys'를 실행하면 완벽합니다. 캐시에 입력된 이 컬렉션을 볼 수 있습니다. 이제 각 주문을 별도의 엔터티로 추가하고 싶다고 가정해 보겠습니다. 따라서 컬렉션 대신 'StoreAs' 유형에 'SeparateEntities'를 추가하겠습니다. 이 애플리케이션을 다시 실행하겠습니다. . 이제 이것이 수행할 작업은 단일 컬렉션 대신 해당 주문을 별도의 엔터티로 추가하는 것입니다. 이제 애플리케이션이 실행되었으므로 애플리케이션을 닫으면 발생한 모든 활동과 더 중요한 것은 이러한 추가 사항을 볼 수 있습니다. 이 16개와 4개의 추가 항목과 그 수가 증가했습니다.

NCache 모니터링 도구

따라서 통계로 이동하면 16과 5를 볼 수 있습니다. 이제 캐시 키를 다시 내보내면 캐시 수가 21개이고 모든 주문이 별도로 채워져 있음을 알 수 있습니다. 캐시와 컬렉션에 엔터티를 추가합니다. 이상으로 FromCache 확장 메서드가 사용되는 방식이 마무리되었습니다.

캐시 키

참조 데이터 처리

이제 참조 데이터를 처리하는 방법과 참조 데이터가 무엇인지 알아보겠습니다. 참조 데이터는 기록된 것보다 훨씬 더 자주 읽혀지는 데이터 유형입니다. 따라서 이것은 다소 정적인 상태로 유지되는 데이터입니다. 예를 들어 제품 카탈로그가 있습니다. 이제 귀하의 제품은 데이터베이스에서 일관되게 읽히는 참조 데이터가 될 수 있도록 매우 자주 변경될 것으로 예상되지 않으며 거의 ​​수정되지 않습니다. 그리고 참조 데이터의 경우 전체 참조 데이터 작업 세트를 캐시로 가져온 다음 해당 참조 데이터를 가져올 때마다 캐시에서 읽기만 하는 것이 좋습니다. 어떻게 할 것인지 보여드리겠습니다.

따라서 우리가 가지고 있는 첫 번째 방법 또는 두 번째 확장 방법은 'LoadIntoCache()' 확장 방법입니다. 이제 LoadIntoCache() 확장 메서드는 전체 작업 데이터 집합을 캐시에 로드하는 데 매우 강력합니다. 따라서 데이터베이스에 대해 쿼리를 실행하고 쿼리 결과를 가져오고 전체 쿼리 결과를 캐시에 채운 다음 해당 결과를 다시 애플리케이션에 반환합니다.

LoadIntoCache 확장 메서드

그리고 이는 데이터를 캐시로 가져오는 데에도 유용하며 해당 데이터가 변경될 것으로 예상될 때마다 정기적으로 이 작업을 실행할 수 있습니다. 따라서 일주일 내에 데이터가 변경될 것으로 예상되는 경우 일주일 후에 다시 실행하여 캐시의 데이터를 계속 새로 고치고 이러한 엔터티에 대해 캐시에서만 쿼리할 때 부분적인 결과를 받지 않도록 할 수 있습니다. 캐시에서만 쿼리하는 방법은 'FromCacheOnly()' 확장 메서드를 사용하는 것입니다. 이제 FromCacheOnly() 확장 메서드는 캐시 내의 데이터만 찾고 해당 결과를 얻기 위해 백엔드 데이터베이스로 이동하지 않습니다. 이는 매우 빠른 확장 방법이며 클러스터된 캐시에서 모든 엔터티를 수신하고 데이터베이스를 조사할 필요가 없으므로 메모리 내 캐싱의 전체 성능 이점을 얻을 수 있습니다.

이제 이러한 확장 메서드를 애플리케이션에 구현해 보겠습니다. 하지만, 이를 사용하기 전에 완료해야 할 전제 조건이 하나 있습니다. 따라서 이러한 참조 데이터 확장 방법을 사용하려면 애플리케이션 내에서 쿼리 인덱스를 정의해야 하며 이는 두 가지 방법 중 하나로 수행될 수 있습니다. 이제 네임스페이스 '를 가져오는 '[QueryIndexable]' 태그를 추가하여 여기에 쿼리 인덱스를 동적으로 만들 수 있습니다.NCache.Runtime.Caching'을 애플리케이션에 추가하고 이제 이 작업을 동적으로 수행했습니다. 하지만 저는 이것을 다른 방식으로 하려고 합니다. 따라서 여기에 대해 설명하겠습니다. 클러스터 캐시로 이동하면 여기에서 볼 수 있듯이 캐시에 이러한 쿼리 인덱스를 이미 정의했음을 보여줄 수 있습니다.

쿼리 인덱스

따라서 이미 이 작업을 수행했으므로 애플리케이션 내에서 동적으로 추가할 필요가 없습니다. 이제 설정이 완료되었습니다. 여기 아래로 스크롤하면 여기에 이 ​​코드가 있습니다. 이 모든 작업은 주석 처리를 제거하고 데이터베이스에서 제품을 가져오는 것입니다. 'LoadIntoCache()' 확장 메서드를 사용하여 이를 별도의 엔터티로 저장하게 되며 그게 전부입니다. 이제 이것을 실행하고 이것이 가져오는 결과를 살펴보겠습니다. 완벽합니다.

//Load ALL Products Into Cache
var products_caching_option = new CachingOptions
{
    StoreAs = StoreAs.SeparateEntities
};
var all_products = (from products in context.Products
                    select products)
                    .LoadIntoCache(products_caching_option)
                    .ToList();
Console.WriteLine($"\n\nAll Products Loaded into cache : {all_products.Count}\n\n");
all_products.ForEach(product =>
{
    Console.WriteLine(String.Format("{0,-25}  {1,-40}  {2,-10}", $"{product.ProductId}", $"{product.ProductName}", $"{product.UnitPrice}"));
});

따라서 우리는 캐시에 77개의 제품이 로드되었음을 알 수 있고, 급증한 개수, 발생한 추가 사항, 들어온 요청을 볼 수 있습니다. 통계로 이동하면 42와 57을 볼 수 있습니다.

NCache 통계

이제 캐시 키를 다시 내보내겠습니다. 완벽합니다. 따라서 캐시 내에서 이러한 99개 항목을 볼 수 있으며 전체 작업 제품 세트가 캐시로 가져왔습니다. 이제 캐시 내에 전체 작업 세트가 있으므로 제품을 쿼리하던 곳으로 돌아가는 것이 안전합니다. 따라서 이에 대해 설명하고 위로 올라가겠습니다. 내 제품을 가져오는 곳에 'FromCacheOnly()' 확장 메서드를 추가하겠습니다. 완벽합니다. 이제 작업이 완료되었으므로 간단히 애플리케이션을 다시 실행할 수 있습니다. 그리고 내 애플리케이션이 'FromCacheOnly()' 확장 메서드에 대해 가져오는 결과를 살펴보겠습니다. 우리는 거기에 갈.

캐시에 추가된 제품

따라서 우리는 동일한 수의 제품, 즉 11개의 제품을 얻었음을 알 수 있습니다. 따라서 여기에 완전한 결과가 있다는 것을 알 수 있으며 이 가져오기가 캐시 내에서 발생했다는 것을 알 수 있으며 이 활동은 이 FromCacheOnly( ) 확장 메서드가 작동하여 캐시에서 결과를 가져왔습니다.

EF 핵심 특정 NCache API

이것이 FromCacheOnly() 및 LoadIntoCache() 확장 메서드에 대한 전부입니다. 이제 우리는 EF 코어 관련 NCache API. 그래서, NCache 캐시에서 데이터를 삽입하거나 제거하기 위해 반드시 확장 메서드를 사용할 필요가 없는 기능을 제공합니다. EF Core 라이브러리를 사용하여 컨텍스트에서 캐시 핸들을 가져온 다음 해당 캐시 핸들을 사용하여 독립 엔터티를 삽입하고 캐시에서 독립 엔터티를 제거할 수도 있습니다. 여기에 추가하고 싶은 점은 이것이 다음과 같지 않다는 것입니다. NCache 내에서 사용 가능한 API NCache SDK. 이는 Entity Framework Core 전용 또는 특정 API입니다.

따라서 이러한 API를 살펴보고 작동 방식을 살펴보겠습니다. 그래서 이것이 우리가 그것들을 사용하는 방법입니다. 따라서 우리는 컨텍스트에서 캐시를 가져온 다음 간단히 고객에 대해 캐시 삽입을 실행하고 출력 문자열 캐시 키를 제공하여 캐시에 데이터를 삽입합니다. 이 캐시 키는 Entity Framework Core API에 의해 생성됩니다. 그런 다음 동일한 캐시 핸들을 사용하여 데이터를 제거하거나 캐시에서 일부 항목을 제거하려는 경우 예를 들어 context.find를 사용하여 캐시 내에서 해당 데이터를 찾은 다음 간단히 캐시 제거를 수행할 수 있습니다.

EF 핵심 특정 NCache API

이제 애플리케이션에서 이러한 작업을 수행해 보겠습니다. 따라서 여기 애플리케이션으로 돌아와 여기 아래로 스크롤하면 여기에 고객을 캐시에 추가하는 코드가 있습니다. 이 코드의 주석 처리를 제거하겠습니다. 위로 스크롤하면 이 고객을 생성하는 컨텍스트에서 캐시를 가져오고 있으며 이를 별도의 엔터티로 저장하고 변경 사항을 저장하고 싶습니다. 이 캐시를 수행합니다. 삽입한 다음 이 고객을 캐시에 추가했음을 기록합니다. 자, 이제 실행해서 이것이 무엇을 하는지 살펴보겠습니다.

//Add Customer Using Cache Handle
Cache cache = context.GetCache();
var cust = new Customer
{
    CustomerId = "HANIH",
    ContactName = "Hanih Moos",
    ContactTitle = "Sales Representative",
    CompanyName = "Blauer See Delikatessen",
};

var options = new CachingOptions
{
    StoreAs = StoreAs.SeparateEntities
};

context.Customers.Add(cust);
context.SaveChanges(true);

cache.Insert(cust, out string cacheKey, options);
Console.WriteLine($"Customer ID: {cust.CustomerId} -> Added to Cache");

따라서 이 고객을 캐시에 추가했음을 알 수 있습니다. 따라서 이 애플리케이션을 닫으면 이러한 요청이 수행된 추가 항목을 볼 수 있고 약간의 슬럼프도 볼 수 있으므로 42에서 43으로 올라갔습니다. 통계로 이동하면 43과 57을 볼 수 있습니다. 그러면 100이 완성됩니다. 따라서 캐시 키를 내보내면 해당 독립 고객을 볼 수 있습니다. 따라서 캐시에 추가한 독립적인 개별 엔터티를 볼 수 있습니다. 그건 완벽합니다.

독립 고객

이제 이 고객을 제거해 보겠습니다. 그래서 저는 이 코드에 대해 주석을 달겠습니다. 다시 한 번 여기 아래로 스크롤하여 이 코드 조각의 주석 처리를 제거하겠습니다. 이 코드 조각이 수행하는 작업은 동일한 고객 이름의 캐시 내에서 고객을 찾는 것입니다. 컨텍스트에서 제거하고 변경 사항을 저장한 다음 캐시에서 제거합니다. 그리고 나서 그렇게 했다는 것을 인쇄할 것입니다. 그렇지 않으면 고객을 찾을 수 없다는 메시지가 표시됩니다.

//Remove Customer Using Cache Handle
Cache cache = context.GetCache();
Customer customerToRemove = context.Customers.Find("HANIH");
if (customerToRemove != null)
{
    context.Customers.Remove(customerToRemove);
    context.SaveChanges(true);
    cache.Remove(customerToRemove);
    Console.WriteLine($"Customer ID: {customerToRemove.CustomerId} -> Removed from Cache");
}
else
{
    Console.WriteLine("could not find the customer within the cache");
}
Console.ReadLine();

이제 이 애플리케이션을 실행하고 결과를 살펴보겠습니다. 완벽합니다. 따라서 우리는 고객이 캐시에서 제거되었음을 알 수 있고 통계에서 43에서 42로 이동한 것을 볼 수 있으며 모니터에도 동일한 내용이 완벽하게 표시됩니다.

고객이 캐시에서 제거됨

이제 통계로 돌아가면 NCache PowerShell을 사용하면 캐시 키를 내보내겠습니다. 완벽합니다. 그리고 더 이상 캐시에 해당 고객이 없다는 것을 알 수 있습니다. 그리고 이것이 바로 고객이나 데이터를 추가하고 제거할 수 있는 방법입니다. NCache EF Core 관련 API.

다음 단계

다운로드 NCache

이상으로 이번 시연을 마치겠습니다. 정말 감사드립니다. 당신이 원한다면 다운로드 NCache 다운로드 페이지에서 무료 30일 평가판과 모든 기능을 갖춘 완전한 기능을 갖춘 제품을 받을 수 있습니다. 지금 거기로 데려가겠습니다. 따라서 여기에 오면 Windows용과 Linux용으로 다운로드할 수 있는 .NET용 제품이 있다는 것을 알 수 있습니다. NCache 제공합니다.

놀이터를 사용해보십시오

또한 시도해 볼 수 있습니다. NCache ~에서 NCache 운동장. 그리고 실제로 제품의 기능이 어떻게 작동하는지 감을 느낄 수 있습니다. 그러니 여기로 가시면 놀이터를 사용해보십시오 30분 동안 이 샌드박스 세션을 시작할 수 있다는 것을 알 수 있습니다. 이 세션을 통해 일부 샘플을 실행하고 .NET 및 Java 샘플이 어떻게 실행되고 느껴질지 확인할 수 있습니다.

맞춤형 예약 NCache Rescale과 함께 비즈니스를 가속화하는 방법에 대해 알아보세요.

마지막으로 맞춤 예약을 할 수 있습니다. NCache 우리가 논의할 1시간짜리 기술 세션을 제공하는 데모 NCache 아키텍처 및 기능을 파악하고 이를 귀하의 환경 내에서 찾은 사용 사례에 따라 매핑합니다. 그리고 그렇게 하는 것은 매우 간단합니다. 여기 저희 웹사이트를 방문하셔서 맞춤형 라이브 데모를 예약하시면 됩니다. 이 페이지는 여기. 그리고 일단 여기 오시면 해당 요청을 보내실 수 있습니다. 그러면 우리는 이를 받고 일정을 계획할 것입니다. 이것으로 이 데모를 마치겠습니다. 시청해주셔서 정말 감사합니다. 즐거운 하루 보내세요. 안녕히 가세요.

다음에 무엇을할지?

© 저작권 Alachisoft 2002 - . 판권 소유. NCache 는 Diyatech Corp.의 등록상표입니다.