분산 캐싱 시스템의 출현으로 데이터베이스가 과부하되고 느려지는 문제가 해결되었습니다. 오늘날 이러한 분산 캐시는 초당 발생하는 수백만 건의 데이터 트랜잭션 부하를 처리할 수 있지만 문제가 있습니다.
대부분의 엔터프라이즈 수준 애플리케이션은 이 데이터의 특정 부분에서 발생하는 변경 사항에 의존합니다. 이러한 애플리케이션은 이러한 변경 사항을 기반으로 중요한 비즈니스 결정을 내려야 하며 이 데이터의 크기가 수천 기가바이트이기 때문에 특정 변경 사항을 모니터링하는 것은 엄청난 작업이 됩니다.
이 문제를 해결하기 위해 NCache, 메모리 내 분산 캐시는 다음과 같은 기능을 제공합니다. 연속 쿼리. 이 블로그에서는 연속 쿼리의 작동 방식과 이를 구성하는 방법을 설명합니다. NCache, 그리고 그렇게 함으로써 얻을 수 있는 이점.
NCache 세부 정보 NCache 기술 문서 다운로드 NCache
변경 사항을 모니터링하기 위한 지속적인 쿼리 NCache
연속 쿼리 기능 NCache 분산 캐시 클러스터 내의 선택적 데이터 세트에서 발생하는 변경 사항을 추적할 수 있습니다. 캐시 내의 이 선택적 데이터 세트는 SQL과 같은 방식을 통해 정의됩니다. OQL(객체 쿼리 언어) 쿼리. 이 데이터 세트 내에서 발생하는 변경 사항은 다음과 같은 형태로 애플리케이션(이벤트에 대한 콜백을 등록한)에 전파됩니다. 캐시 레벨 이벤트.
캐시 클러스터의 크기와 관계없이 정의한 후 캐시에 등록한 데이터 세트에서 발생하는 변경 사항에 대해서만 알림을 받습니다. 이것은 연속 쿼리가 OQL 쿼리를 통해 데이터를 필터링할 때 애플리케이션 분리를 달성하는 방법이기도 합니다. 이 분리는 응용 프로그램이 서로 겹치지 않도록 합니다.
또한 연속 쿼리 자체는 애플리케이션 데이터를 변경하지 않는다는 점에 유의해야 합니다. 대신 연속 쿼리는 이벤트를 통해 런타임 시 애플리케이션 간에 데이터를 모니터링하고 공유할 수 있는 메커니즘을 제공합니다. 그런 다음 개발자는 연속 쿼리 이벤트에 대한 콜백을 등록하고 해당 비즈니스 논리를 정의하여 애플리케이션이 이 데이터로 수행하는 작업을 확인합니다.
연속 쿼리 구성 NCache
연속 쿼리를 쉽게 구성할 수 있습니다. NCache. XNUMX단계 프로세스를 따르기만 하면 됩니다. 이 단계를 따르면 애플리케이션은 사용자가 정의한 데이터 세트에 대한 알림을 수신하고 그에 따라 작동할 수 있습니다.
이 두 단계는 다음과 같습니다.
1단계: 이벤트에 대한 콜백 등록
캐시 수준 이벤트에 대한 콜백을 등록해야 합니다. 추가된 항목, 항목 업데이트됨, or 제거된 항목. 이러한 이벤트를 통해 이러한 이벤트 중 하나가 실행될 경우 애플리케이션이 수행해야 하는 작업을 지시하는 비즈니스 논리를 정의합니다.
다음 코드 예제에서는 ItemAdded 이벤트에 대한 콜백이 등록됩니다.
1 2 3 4 5 6 7 8 9 |
static void QueryItemCallBack(string key, CQEventArg arg) { switch (arg.EventType) { case EventType.ItemAdded: Console.WriteLine(“Item has been added”); break; } } |
2단계: 쿼리 및 알림 등록
이벤트에 대한 콜백을 등록한 후에는 결과 데이터 세트에 대한 기준을 지정하는 연속 쿼리를 만들어야 합니다. 이 연속 쿼리를 기반으로 이벤트가 실행됩니다. 그런 다음 콜백이 쿼리에 등록됩니다. 이 작업이 완료되면 다음을 사용하여 쿼리가 캐시 서버에 등록됩니다. CQ등록 방법.
아래 코드 예제는 이 모든 일이 어떻게 발생하는지 보여줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
string query = "SELECT $VALUE$ FROM FQN.Product WHERE Category = ?"; var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("Category", "Beverages"); // Create Continuous Query var cQuery = new ContinuousQuery(queryCommand); // Item add notification cQuery.RegisterNotification(new QueryDataNotificationCallback(QueryItemCallBack), EventType.ItemAdded, EventDataFilter.None); cache.MessagingService.RegisterCQ(cQuery); |
연속 쿼리 등록 취소
NCache 알림이 더 이상 필요하지 않을 때 연속 쿼리에서 알림을 등록 취소할 수 있는 옵션을 제공합니다. 이것은 다음을 사용하여 수행됩니다. 등록 취소 알림 방법.
다음 코드 예제에서는 연속 쿼리에서 이벤트 알림이 등록 취소됩니다.
1 |
cQuery.UnRegisterNotification(new QueryDataNotificationCallback(QueryItemCallBack), EventType.ItemAdded); |
NCache 또한 캐시 클러스터에서 연속 쿼리 자체를 등록 취소하는 옵션도 제공합니다. 리소스를 소모하므로 더 이상 필요하지 않은 경우 캐시 내에서 계속 실행할 필요가 없습니다. 캐시에서 연속 쿼리를 등록 취소하려면 NCache 제공합니다 등록 취소CQ 방법.
다음 코드 예제에서는 연속 쿼리가 캐시 서버에서 등록 취소됩니다.
1 |
cache.MessagingService.UnRegisterCQ(cQuery); |
NCache: 최고의 솔루션
크고 복잡한 비즈니스 애플리케이션의 경우 데이터 정제가 큰 과제입니다. 스트림 처리 in NCache 는 크고 복잡한 데이터를 쉽게 처리할 수 있도록 데이터 스트림으로 변환하여 이러한 문제를 해결합니다.
스트림 처리의 인기 있는 응용 프로그램은 게시자 구독자 ~의 모형 NCache. 그러나 여기에는 다음과 같은 제한 사항이 있습니다.
- 메시지가 구독자에게 전달되면 애플리케이션에서 메시지를 유지하지 않습니다.
- 데이터 필터링은 클라이언트 측에서 이루어지므로 애플리케이션 아키텍처가 더욱 복잡해집니다.
연속 쿼리는 다음과 같은 방식으로 이러한 문제를 모두 해결합니다.
- 처리 후에도 캐시 내부에 데이터를 유지합니다.
- 클라이언트 측이 아닌 서버 측에서 매우 간단한 OQL 문을 통해 데이터를 필터링합니다. 이렇게 하면 간단한 애플리케이션 아키텍처가 보장됩니다.
결론
NCache 데이터베이스 병목 현상을 효율적이고 효과적으로 처리하는 매우 빠르고 확장하기 쉬운 분산 캐시입니다. 연속 쿼리, 스트림 처리 및 Pub/Sub 메시징과 마찬가지로 NCache 시도해야 할 다른 많은 풍부하고 강력한 기능이 있습니다. 이러한 기능은 정량적 및 정성적 결과를 모두 제공합니다. 노력하다 NCache 지금!