SQL과 캐시 동기화 / NoSQL Databases

NCache 캐시 애플리케이션을 통해 애플리케이션 성능을 향상시킬 수 있는 매우 빠르고 선형적으로 확장 가능한 분산 캐시입니다. 응용 프로그램 데이터를 캐시하면 데이터베이스에도 있는 캐시에 데이터 복사본이 생성됩니다. 데이터베이스의 이 데이터가 변경되면 캐시도 업데이트되어 항상 데이터베이스와 일치하도록 해야 합니다.

이 상황을 처리하기 위해, NCache 데이터가 관계형 또는 NoSQL database. 여기서 동기화는 캐시에서 해당 캐시 항목을 제거하는 것(또는 Read-through로 다시 로드하는 것)을 의미합니다. NCache 데이터베이스 동기화를 위해 다음을 제공합니다.

  1. SQL 종속성
  2. Oracle의존성
  3. Cosmos DB/MongoDB와 캐시 동기화
  4. OleDB 종속성
  5. CLR 절차
  6. Read-Through를 통한 자동 재장전

다음 다이어그램은 NCache 데이터베이스 동기화 지원:

데이터베이스 동기화

SQL 종속성

SQL 종속성 사용 NCache 데이터베이스가 SQL Server인 경우. 캐시에서 항목을 추가하거나 업데이트할 때 캐시된 항목에 대해 SqlDependency를 지정할 수 있습니다. SQL Server는 추가, 업데이트 또는 제거가 있는지 데이터 세트를 모니터링하고 알립니다. NCache 데이터베이스 업데이트 직후 SQL 알림을 통해 .NET 이벤트로 변환되는 데이터베이스 알림입니다.

SqlDependency는 다음 중 하나일 수 있습니다.

  • 매개변수화된 SQL 쿼리
  • 저장 프로 시저

이 주제에 대한 자세한 내용은 블로그에서 찾을 수 있습니다. SQL Server와 캐시 동기화.

매개변수화된 쿼리 사용

다음은 동적 매개변수화된 쿼리와 함께 .NET 코드에서 SqlDependency를 사용하는 방법입니다.

string connString = ConfigurationManager.AppSettings["connectionString"];
string query = "SELECT ProductID, ProductName, UnitPrice FROM Products WHERE ProductID > @productID";
...
var param = new SqlCmdParams();
...
sqlCmdParam.Add("@productID", param);

SqlCacheDependency sqlDepenency = new SqlCacheDependency(connString, query, SqlCommandType.Text, sqlCmdParam);

저장 프로시저 사용

저장 프로시저와 함께 .NET 코드에서 SqlDependency를 사용하는 방법은 다음과 같습니다.

...
var param = new SqlCmdParams();
...
sqlCmdParam.Add("productID", param);

SqlCacheDependency sqlDependency = new SqlCacheDependency(connString, "sp_GetProductByID", SqlCommandType.StoredProcedure, sqlCmdParams);

오라클 종속성

Oracle의존성 사용 NCache 데이터베이스가 Oracle 10g 이상이고 Windows 또는 Unix에서 실행 중인 경우. SqlDependency와 마찬가지로 캐시에 항목을 추가하거나 업데이트할 때 캐시된 항목에 대해 OracleDependency를 지정할 수 있습니다.

OracleDependency는 다음 중 하나일 수 있습니다.

  • 매개변수화된 SQL 쿼리
  • 저장 프로 시저

그런 다음 Oracle Server는 추가, 업데이트 또는 제거에 대해 이 데이터 세트를 모니터링하고 이러한 일이 발생하면 알립니다. NCache 데이터베이스 업데이트 직후 Oracle 알림을 통해 이러한 알림은 아래에 있는 Oracle의 클라이언트/서버 통신을 사용하고 NCache .NET을 통해.

매개변수화된 쿼리 사용

동적 매개변수화된 쿼리를 사용하여 .NET 코드에서 OracleDependency를 사용하는 방법은 다음과 같습니다.

...
var param = new OracleCmdParams();
. . .
oracleParam.Add("productID", param);

OracleCacheDependency oracleDepenency = new OracleCacheDependency(connString, query, OracleCommandType.Text, oracleParam);

저장 프로시저 사용

다음과 같이 Oracle 종속성에서 매개변수화된 저장 프로시저 호출을 사용할 수 있습니다.

...
OracleCmdParams param = new OracleCmdParams();
. . .
oracleParam.Add("productID", param);

OracleCacheDependency oracleDependency = new OracleCacheDependency(connString, "sp_GetProductByID", OracleCommandType.StoredProcedure, oracleParam);

Cosmos DB/MongoDB와 캐시 동기화

NCache 또한 캐시 항목에 대한 종속성을 호출하는 방법과 시기에 대한 더 많은 유연성과 제어를 제공합니다. 확장 가능한 알림 종속성 캐시에서 데이터를 제거할 시기를 지정하는 사용자 정의 논리를 구현할 수 있습니다. Cosmos DB 및 MongoDB와 같은 기본 데이터베이스에 대한 사용자 지정 공급자를 작성할 수 있으며 이 공급자는 캐시에 배포됩니다. 그런 다음 캐시는 배포된 모든 종속성을 제거해야 하는지 여부를 확인합니다.

사용자 지정 공급자를 만들고 캐시에 배포하여 응용 프로그램에서 사용자 지정 종속성을 사용할 수 있습니다. 다음 코드 조각은 캐시에 항목을 추가하는 동안 Cosmos DB 동기화를 위해 배포된 사용자 지정 공급자를 .NET 코드에서 사용하는 방법을 보여줍니다.

Customer customer = LoadCustomerFromDB(customerId);

CacheDependency cosmosDbDependency = new CosmosDbNotificationDependency<Customer>(. . .) ;

var cacheItem = new CacheItem(customer);
cacheItem.Dependency = cosmosDbDependency;
cache.Insert("Customer:" + customer.Id, cacheItem);

OleDB 종속성

OleDB 종속성 OleDB 종속성은 다음에서 사용됩니다. NCache 데이터베이스가 SQL Server도 Oracle도 아니지만 OLEDB 호환 데이터베이스인 경우. 데이터가 매우 빠르게 변경되는 경우 번거로울 수 있는 이벤트 알림을 원하지 않는 경우 SQL Server 및 Oracle에서 DbDependency를 사용할 수도 있습니다.

DbDependency에서 라는 테이블을 만듭니다. ncacheDbDependency가 있는 캐시된 각 항목에 대해 하나의 행을 포함하는 데이터베이스의 _db_sync. 데이터베이스의 해당 데이터가 변경될 때 이 테이블의 행을 업데이트하도록 데이터베이스 트리거를 수정합니다. NCache 업데이트된 행에 대해 이 테이블을 폴링하므로 한 폴링에서 NCache 수천 개의 행을 가져와 데이터베이스와 동기화합니다.

다음은 .NET 코드에서 DbDependency를 사용하는 방법입니다.

DBCacheDependency oledbDependency = DBDependencyFactory.CreateOleDbCacheDependency(connectionString, "PrimaryKey:dbo.Products");

var cacheItem = new CacheItem(product);
cacheItem.Dependency = oledbDependency;
cache.Insert(key, cacheItem);

CLR 절차

캐시에 매우 많은 항목이 있고 모든 항목을 데이터베이스와 동기화해야 하는 경우 다음을 작성하는 것이 훨씬 좋습니다. CLR 절차 Windows의 SQL Server에서 이 CLR 프로시저는 관련 데이터가 변경될 때 데이터베이스 트리거에서 호출됩니다. 그런 다음 이 CLR 프로시저를 비동기식으로 만듭니다. NCache 캐시에서 해당 캐시 항목을 추가, 업데이트 또는 제거하기 위한 API 호출입니다.

다음은 업데이트된 개체를 제거하는 CLR 프로시저의 예입니다.

[Microsoft.SqlServer.Server.SqlProcedure]
public static void RemoveOnUpdate(string cacheName, string key)
{            
    cacheName = "demoClusteredCache";
    Cache cache = CacheManager.GetCache(cacheName);
    cache.RemoveAsync(key);
}

Read-Through 핸들러를 사용한 자동 재로드

데이터베이스 동기화의 기본 동작은 데이터베이스의 해당 데이터가 변경될 때 데이터베이스에서 캐시된 항목을 제거하는 것입니다. 그러나 단순히 최신 버전의 데이터로 업데이트하려는 상황이 있습니다.

이 필요를 처리하기 위해, NCache 데이터베이스 동기화를 다음과 결합할 수 있습니다. 전체 읽기 핸들러 기능 NCache. 이것으로, NCache Read-through 핸들러를 호출하여 캐시된 항목의 최신 복사본을 다시 로드한 다음 캐시를 업데이트합니다. 이 기능은 동기화할 수 있는 유연성을 제공합니다. NCache 어떤 관계 또는 NoSQL database 다음(및 그 이상)을 포함하여 구성되었습니다.

  1. SQL 서버
  2. 신탁
  3. 코스모스 DB
  4. MongoDB의

다음 코드 스니펫은 데이터를 대량으로 자동 다시 로드하는 방법을 보여줍니다. NCache Read-Through를 사용하여 Cosmos DB에서. 블로그에서도 자세히 보실 수 있습니다 CosmosDB와 캐시 동기화.

public Task ProcessChangesAsync(IChangeFeedObserverContext context, IReadOnlyList docs, CancellationToken cancellationToken) 
{
    cacheItems = cache.GetBulk(DocsKeys, new ReadThruOptions {Mode = ReadMode.ReadThruForced} );
    return Task.CompletedTask;
}

다음에 무엇을할지?

NCache 세부 정보
무료 30일 설치 키 다운로드
맞춤형 라이브 데모 요청
제품 설명서 읽기
© 저작권 Alachisoft 2002 - . 판권 소유. NCache 는 Diyatech Corp.의 등록상표입니다.