트래픽이 많은 실시간 애플리케이션은 엔터프라이즈 환경에서 널리 사용됩니다. 실시간 애플리케이션에서는 정보가 생성되는 순간에 정보를 사용할 수 있게 되며 정보 제공이 지연되면 심각한 재정적 손실이 발생할 수 있습니다. 트래픽이 많은 실시간 애플리케이션이 직면한 주요 과제는 해당 보기를 업데이트할 수 있도록 데이터 세트의 변경 사항에 대한 알림을 받는 것입니다.
그러나 이러한 트래픽이 많은 실시간 응용 프로그램은 상주 데이터에 대한 쿼리만 지원하고 업데이트된 데이터 세트를 가져오려면 즉각적이지 않은 특정 간격 후에 쿼리를 다시 실행해야 하기 때문에 기존 데이터베이스에 의존할 수 없습니다. 그리고 이 주기적인 폴링은 데이터 세트에 변경 사항이 없는 경우에도 대부분 값비싼 데이터베이스 이동을 하게 되므로 성능 및 확장성 문제를 야기합니다.
SQL 종속성 Microsoft에서 SQL Server로 제공하고 Windows의 Oracle에서도 지원합니다. SqlDependency를 사용하면 SQL 문을 지정할 수 있으며 SQL Server는 추가, 업데이트 또는 삭제에 대해 데이터베이스에서 이 데이터 집합을 모니터링하고 이러한 일이 발생하면 알려줍니다. 그러나 SqlDependency의 문제는 일단 실행되면 데이터베이스에서 등록이 취소된다는 것입니다. 따라서 데이터 세트의 모든 향후 변경 사항이 누락되어 알림을 받지 못합니다.
또한 SqlDependency는 변경이 발생한 레코드의 세부 정보를 제공하지 않습니다. 따라서 데이터 세트의 변경 사항을 찾으려면 데이터 세트에서 추가, 업데이트 또는 제거된 특정 레코드만 직접 가져오는 대신 전체 데이터 세트를 다시 가져와야 합니다. 물론 이것은 효율적이지 않습니다.
SqlDependency의 한계 외에도 데이터베이스는 초당 수만 개의 쿼리가 실행되고 데이터베이스가 빠르게 확장성 병목이 되는 이러한 트래픽이 많은 실시간 응용 프로그램의 트랜잭션 요구를 처리할 수 없습니다. 더 많은 애플리케이션 서버를 추가하여 애플리케이션 계층을 선형으로 확장할 수 있지만 데이터베이스 서버에서는 동일한 작업을 수행할 수 없기 때문입니다.
이것은 어디 분산 캐시 처럼 NCache 데이터를 캐싱하고 확장성 병목 현상을 일으키는 값비싼 데이터베이스 여행을 줄일 수 있기 때문입니다.
NCache 캐시 클러스터에 SQL과 유사한 쿼리를 등록할 수 있는 강력한 연속 쿼리 기능이 있습니다. 이 연속 쿼리는 캐시 클러스터에서 활성 상태로 유지되며 이 쿼리의 데이터 세트에 변경 사항이 있으면 NCache 귀하의 실시간 지원을 알립니다. 이 연속 쿼리 접근 방식을 사용하면 데이터베이스에 대해 동일한 값비싼 쿼리를 주기적으로 실행하여 폴링할 필요가 없습니다.
다음은 샘플 코드입니다. NCache 연속 쿼리:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
public void Main(string[] args) { … NCache.InitializeCache("myPartitionReplicaCache"); String query = "SELECT NCacheQuerySample.Business.Product WHERE this.ProductID > 100"; Hashtable values = new Hashtable(); values.Add("ProductID", 100); … onItemAdded = new ContinuousQueryItemAddedCallback(OnQueryItemAdded); onItemUpdated = new ContinuousQueryItemUpdatedCallback(OnQueryItemUpdated); onItemRemoved = new ContinuousQueryItemRemovedCallback(OnQueryItemRemoved); ContinuousQuery query = new ContinuousQuery(queryString, values); query.RegisterAddNotification(onItemAdded); query.RegisterUpdateNotification(onItemUpdated); query.RegisterRemoveNotification(onItemRemoved); _cache.RegisterCQ(query); … } //data set item is removed void OnQueryItemRemoved(string key){ … Console.WriteLine("Removed key: {0}", key); … } //data set item is updated void OnQueryItemUpdated(string key){ … Console.WriteLine("Updated key: {0}", key); … } //data set item is removed void OnQueryItemAdded(string key){ … Console.WriteLine("Added key: {0}", key); … } |
그리고 SqlDependency와 달리 NCache 연속 쿼리는 활성 상태로 유지되며 각 변경 알림에서 등록이 취소되지 않습니다. 따라서 트래픽이 많은 실시간 애플리케이션은 여러 변경 사항에 대해 계속 알림을 받습니다.
NCache 연속 쿼리는 또한 ADD, UPDATE 및 DELETE에 대해 별도로 알림을 받을 수 있는 유연성을 제공합니다. 그리고 연속 쿼리를 생성한 후에도 런타임에 이러한 이벤트를 지정할 수 있습니다. SqlDependency에서는 허용되지 않습니다. 이는 또한 캐시 클러스터에서 실시간 애플리케이션으로의 이벤트 트래픽을 줄입니다.
요약하자면, NCache 당신에게 매우 강력한 제공 이벤트 기반 연속 쿼리 다른 데이터베이스에는 없습니다. 그리고, NCache 또한 트래픽이 많은 실시간 애플리케이션을 위해 선형으로 확장 가능합니다.
따라서 완전히 작동하는 60일 평가판을 다운로드하십시오. NCache Enterprise 그리고 직접 사용해 보세요.