몽고 DB 하는 NoSQL, 확장 가능한 오픈 소스 고성능 문서 지향 데이터베이스. 최고 중 하나입니다 NoSQL database시장에 있습니다. Mongo DB와 함께 캐싱을 사용하면 데이터베이스로의 이동이 줄어들어 애플리케이션의 성능이 크게 향상됩니다. 그러나 Mongo DB 데이터를 분산 캐시에 캐싱하면 이 데이터의 복사본이 두 개 생성됩니다. 하나의 사본은 Mongo DB에 상주하고 다른 하나는 분산 캐시에 상주합니다. 응용 프로그램이 Mongo DB 내부의 데이터를 직접 변경하면 캐시 내부의 데이터가 오래됩니다.
트랜잭션이 많은 다중 환경 및 엔터프라이즈 수준 애플리케이션의 경우 이 오래된 데이터는 큰 문제입니다. 이 블로그에서는 Mongo DB와 함께 분산 캐시를 계속 사용하면서 동시에 오래된 데이터 문제를 방지하는 방법에 대해 설명합니다.
다음을 사용하여 캐시를 Mongo DB와 동기화 NCache
NCache 잘 알려진 분산 캐시입니다. .NET Framework/ .NET Core, 자바 및 Node.js. NCache 비약적으로 응용 프로그램의 성능을 향상시킬 수 있는 방대한 기능 세트를 제공합니다. 이러한 방대한 기능 세트 중에는 다음과 같은 기능이 있습니다. 알림 기반 확장 종속성. 이 기능은 MongoDB(이전에 논의한)의 부실 데이터 문제를 해결합니다.
XNUMXD덴탈의 NotifyExtensibleDependency
클래스를 사용하면 알림을 통해 데이터베이스 내에서 발생하는 변경 사항을 알리는 사용자 지정 종속성 논리를 작성할 수 있습니다. NCache 라고 알려진 Mongo DB(버전 3.6에 도입됨)의 기능을 사용하여 이러한 알림을 처리합니다. 스트림 변경. 이러한 알림이 처리되면 작성한 코드를 기반으로 캐시 내의 부실 데이터가 무효화됩니다.
Change Stream 로직은 NotifyExtensibleDependency
. 이 변경 스트림을 수정하여 데이터베이스 내에서 발생하는 추가, 업데이트 또는 삭제 작업에 대한 알림을 받을 수 있습니다. 그러나 삭제 작업은 추적할 수 없습니다. 따라서 삭제 작업을 추적하기 위해 만료가 있는 업데이트 작업이 사용됩니다.
Mongo DB는 독립 실행형 데이터베이스에 대한 변경 스트림을 지원하지 않는다는 점도 염두에 두어야 합니다. Change Stream 기능이 작동하려면 Mongo DB 데이터베이스에 복제 세트가 있는지 확인해야 합니다.
NCache 세부 정보 NCache 확장 가능한 종속성 알림 NCache 기술 문서
Mongo DB와 동기화 캐시: 간단한 예
Mongo DB를 사용하려면 NCache 당신은 구성해야합니다 사용자 지정 종속성 in NCache 먼저 클라이언트 애플리케이션에 배포한 다음 나중에 배포합니다. 이것은 아래에 설명되어 있습니다:
NCache 사용자 지정 종속성 구성
의 알림 기반 확장 가능 종속성 기능을 사용하려면 NCache Mongo DB를 사용하려면 다음을 수행해야 합니다. 사용자 지정 종속성 구성 on NCache 먼저 각각의 DLL 파일을 NCache 서버.
아래 GIF에서 이름이 지정된 공급자를 배포했습니다. MongoDbNotifyExtensibleDependencyProvider
캐시에 대한 모든 종속성과 함께. 그것은 구현 ICustomDependencyProvider
상호 작용. 에 대한 종속성 개체를 만드는 일을 담당합니다. 캐시 아이템. 종속성이 제대로 트리거되려면 NotifyExtensibleDependency
클래스를 구현해야 합니다. 이 클래스는 MongoDB 변경 스트림을 수신하고 Mongo DB의 데이터 변경 시 종속성을 트리거합니다.
또한 이 예에서는 다음의 오픈 소스 구현을 사용하고 있습니다. ICustomDependencyProvider
및 NotifyExtensibleDependency
사용 가능한 GitHub의.
NCache 세부 정보 사용자 지정 종속성 구성 GitHub 저장소
클라이언트 애플리케이션에 배포
예를 들어 전자 상거래 상점의 데이터베이스로 Mongo DB를 사용하고 내부에서 자주 사용하는 데이터를 캐시하려고 합니다. NCache. 상점에는 백만 개 이상의 제품 데이터가 포함되며 매일 수백만 건의 거래가 발생합니다. NCache Mongo DB 데이터베이스의 로드를 줄이는 데 도움이 되지만 캐시 내부의 데이터는 부실해지기 쉽습니다.
캐시 내부에 오래된 데이터가 있으면 귀하와 귀하의 고객에게 문제가 발생할 수 있습니다. 다행스럽게도 알림 기반 확장 가능 종속성 기능은 NCache 오래된 데이터 문제를 완화하여 전자 상거래 상점의 최적 기능을 보장합니다.
다음 예에서는 해당 ID를 기반으로 데이터베이스에서 제품이 로드됩니다. 그 다음에 NotifyExtensibleDependency
가져온 제품에 대해 생성 및 등록됩니다. 마지막으로 제품의 형태는 캐시 아이템 지정된 키와 함께 캐시에 삽입됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Product product = LoadProductFromDatabase(productId); //This is the name of your provider deployed on a cache server string providerName = "MongoDbNotifyExtensibleDependencyProvider"; string key = "Product:" + product.Id ; IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("ConString", "mongodb://**.**.**.**:27017"); parameters.Add("DatabaseName", "productscollection"); parameters.Add("CollectionName", "products"); CacheItem item = new CacheItem(product); item.Dependency = new CustomDependency(providerName, parameters); _cache.Insert(key, item); |
NCache 세부 정보 NotifyExtensibleDependency 캐시 작업 NCache
Read-Through 공급자 사용
의 또 다른 두드러진 특징 NCache 이다 판독 제공자. 이 기능을 사용하면 캐시에서 찾을 수 없는 경우 Mongo DB 내부의 데이터를 직접 찾을 수 있습니다. 항목이 데이터베이스 내부에서 발견되면 캐시 내부에도 자동으로 저장됩니다. 따라서 귀중한 시간을 절약할 수 있습니다. Mongo DB 애플리케이션에서 이 기능을 사용하여 성능을 더욱 향상시킬 수 있습니다.
다음 코드 예제는 지정된 키 "Product:1001"에 해당하는 읽기가 활성화된 항목을 검색합니다. Get<>
방법.
1 2 3 4 5 6 7 8 9 |
// Specify the key of the item string key = "Product:1001"; // Specify the readThruOptions for read through operations var readThruOptions = new ReadThruOptions(); readThruOptions.Mode = ReadMode.ReadThru; // Retrieve the data of the corresponding item with reads thru enabled Product product = cache.Get(key, readThruOptions); |
NCache 세부 정보 캐싱을 통해 읽기 캐시 작업 NCache
결론
요약하자면, NCache Mongo DB와 캐시 간에 데이터를 동기화하여 데이터 불일치를 방지하는 유연한 솔루션을 제공합니다. NCache인 메모리 분산 캐싱 솔루션인 는 Mongo DB가 빠른 액세스 및 처리를 위해 최신 데이터를 유지 관리하는 데 이상적인 매개체가 될 수 있습니다.