들었어? 이베이 사용 MongoDB의 그들의 기본 데이터베이스로? 이제 eBay와 같은 다국적 전자 상거래 회사가 전통적인 RDBMS가 아닌 MongoDB를 사용하는 이유는 무엇입니까? MongoDB는 분산형 키-값 저장소와 문서 중심으로 개발자들 사이에서 화제가 되었기 때문이다. NoSQL 특징. 그리고 eBay에서 사용하고 있다면 전자 상거래 애플리케이션도 MongoDB를 사용한다고 확신합니다.
eBay는 잊어버리세요. 전자 상거래 애플리케이션에서 기본 데이터 및 성능 요구 사항을 분석해 보겠습니다. 이제 .NET/.NET Core 초당 요청이 제한되어 있어 성능이 저하되었다고 느낀 적이 있습니까? 디스크 기반 데이터베이스에 대한 읽기/쓰기 호출의 시간 지연을 확인하셨습니까? 모든 훌륭한 기능에도 불구하고 MongoDB에는 애플리케이션을 영광스럽게 만들 수 있는 특정 링크가 여전히 부족하다는 느낌이 들었습니까?
내 친구여, 이것은 누군가(나)가 당신을 찌르고(가상으로만) 소개하는 곳입니다. NCache 당신의 인생에서. NCache 인 메모리, 분산 및 확장 성이 뛰어난 항상 애플리케이션 바로 옆에 있는 캐시; 트랜잭션 속도를 개선하여 모든 캐싱 요구 사항에 대한 완벽한 솔루션이 됩니다. 다음을 사용하여 애플리케이션을 최대한 활용할 수 있는 방법에 대해 간단히 살펴보겠습니다. NCache.
NCache 세부 정보 데이터베이스와 캐시 동기화 NCache NoSql 데이터 스토어
사용 NCache MongoDB의 분산 캐시로
다중 서버 환경에서 실행되는 귀하의 것과 같이 트랜잭션이 많은 전자 상거래 애플리케이션을 사용하면 모든 데이터 요청을 처리하는 단일 서버 캐시를 가질 여유가 없습니다. 애플리케이션의 로드가 클수록 요청에 대한 캐시 질식 가능성이 높아집니다.
애플리케이션을 실행하는 동안 애플리케이션에 대한 트랜잭션 로드가 증가하고 초기에 설정된 캐시 서버 수가 수신 요청을 처리하기에 충분하지 않은 시간이 올 수 있습니다. 여기가 어디야 NCache 애플리케이션을 원활하게 확장 당신이 할 수 있도록함으로써 런타임 시 추가 캐시 서버 추가 따라서 캐시는 애플리케이션의 병목 현상이 되지 않습니다. 따라서 .NET/에서 최적의 성능을 보장합니다..NET Core 응용 프로그램.
정확한 위치에 대한 적절한 이미지를 얻으려면 NCache 애플리케이션 스택 내에 있으므로 기본 아키텍처를 살펴보겠습니다.
MongoDB는 관계형 데이터베이스에 비해 확장성이 뛰어난 것으로 간주되지만 디스크 기반 데이터 저장소라는 사실은 여전히 단점입니다. 그래서, 사용 NCache 앱의 VNet 내부 또는 외부(완전히 귀하의 호출)에 머무르는 동안 메모리 기반 데이터 캐싱을 제공합니다. 이렇게 하면 애플리케이션 프로세스가 원하는 것보다 훨씬 빨라지므로 대기 시간이 줄어듭니다.
이것이 당신에게 더 많은 이유를 제공하지 않습니까? NCache 데이터베이스 데이터 캐싱을 위해? 여기서 멈추지 말고 조금 더 깊이 파고들자. NCache 테이블에 가져옵니다.
NCache 세부 정보 데이터베이스와 캐시 동기화 NCache NoSql 데이터 스토어
MongoDB로 캐싱하는 방법
MongoDB를 사용한 캐싱은 매우 쉽습니다. 캐시에서 특정 데이터를 검색할지 여부 또는 필요한 데이터를 가져오기 위해 데이터베이스 자체를 쿼리또는 단순히 데이터베이스에 새 데이터 추가, 그것은 모두를 사용하여 최대한 쉽게 할 수 있습니다 NCache.
다음 스니펫은 전자상거래 애플리케이션에서 앞서 언급한 모든 작업을 수행하는 방법을 설명합니다. 여기에서 우리는 당신의 매우 충성스럽고 지능적인 고객을 찾고 있습니다. 아인슈타인, 수행할 캐시에서 CRUD 작업 그 위에. 캐시에 요청한 고객이 없는 경우 데이터베이스에서 검색합니다. 일단 검색되면 해당 고객을 캐시에 추가합니다. 만료 5분. 이는 캐시에는 오래된 데이터가 없습니다.. 따라서 데이터 일관성을 보장합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var customer = cache.Get("Customer:CustomerID:EINSTEIN"); if (customer == null) { MongoClient mongoClient = new MongoClient("mongodb://20.200.20.10:27017"); IMongoDatabase mongoDatabase = mongoClient.GetDatabase("DemoDatabase"); IMongoCollection <Customer> mongoCollection = mongoDatabase.GetCollection<Customer>("Customers"); response = mongoCollection.FindAsync<Customer>(x => x.Id == "EINSTEIN").GetAwaiter().GetResult().ToList<Customer>(); customer = (Customer)response.FirstOrDefault(); var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); var cacheItem = new CacheItem(customer) { Expiration = expiration }; cache.Insert($"Customer:CustomerID:{customer.Id}", cacheItem); } |
NCache 세부 정보 데이터베이스와 캐시 동기화 NCache NoSql 데이터 스토어
데이터베이스 항목 수집 캐싱
소개의 가장 큰 특전 NCache 애플리케이션과 데이터베이스에 대한 액세스는 특히 데이터베이스로의 이동이 읽기 작업 불필요한 네트워크 호출을 줄이고 성능을 향상시킵니다. 이 논리적 배치의 유일한 이유는 데이터베이스에서 항목을 검색하고 작업을 수행할 때마다 캐싱 계층에서 모든 작업을 수행할 수 있기 때문입니다.
이를 달성하기 위해, NCache MongoDB 컬렉션을 캐시 아이템 또는 개별 항목을 하나의 캐시 항목으로. 항목을 키-값 쌍으로 캐시하는 방법을 살펴보겠습니다. NCache 몽고DB에서.
단일 항목으로 캐시 수집
항목 모음을 단일 항목으로 캐싱 캐시 아이템 항목이 유사하거나 동일한 범주에 속할 때 유용합니다. 예를 들어 응용 프로그램의 데이터베이스에 전 세계에 퍼져 있는 고객 목록이 있지만 독일에 거주하는 고객을 쿼리하려고 한다고 가정해 보겠습니다(항상 좋아하는 Einstein은 독일 출신이기 때문). 이 쿼리는 이 목록을 캐시에 추가할 수 있도록 단일 목록 형식으로 이러한 모든 고객을 반환하려고 합니다. 방법은 다음과 같습니다.
1 2 3 4 5 6 7 |
var customersInGermany = mongoCollection.FindAsync(x => x.Country == 'Germany').GetAwaiter().GetResult().ToList(); if(customersInGermany > 0) { var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); var cacheItem = new CacheItem(customersInGermany) { Expiration = expiration }; cache.Insert("CustomersInGernamy", cacheItem); } |
수집 항목을 별도로 캐시
다음과 같은 각 항목에 추가 정보를 연결하려는 경우 태그, 이름표및 그룹 데이터 검색을 더 쉽게 하려면 고유 식별자를 사용하여 각 항목을 개별적으로 캐시해야 합니다. 이렇게 하면 논리 태그를 기반으로 여러 항목을 검색할 수 있습니다. 예를 들면 다음과 같습니다. 독일에 거주하는 모든 고객.
독일에 거주하는 모든 고객을 캐시하려면 태그를 추가할 수 있습니다. Customer:Country:Germany
쿼리의 데이터 세트와 함께. 다음은 "Germany" 태그가 있는 모든 독일 고객을 캐시하는 방법의 예입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var customersInGermany = mongoCollection.FindAsync(x => x.Country == 'Germany').GetAwaiter().GetResult().ToList(); if(customersInGermany > 0) { var expiration = new Expiration(ExpirationType.Absolute, TimeSpan.FromMinutes(5)); foreach (var customer in customersInGermany) { cacheItem = new CacheItem(customer) { Tags = new[] { new Tag("Customer:Country:Germany") }, Expiration = expiration }; cache.Add($"Customer:CustomerID:{customer.Id}", cacheItem); } } |
지금까지 다음을 사용하여 애플리케이션과 MongoDB 간에 데이터를 저글링하는 방법에 대해 자세히 논의했습니다. NCache. 다음을 수행하여 데이터에 액세스하고 조작하는 것이 얼마나 쉬운지 알 수 있습니다. CRUD 작업 그것 때문에 NCache. 이제 방법에 대한 간략한 둘러보기를 안내해 드리겠습니다. NCache 접시에 효율성을 가져옵니다. 당신이 할 수 있다면 위에 체리.
다음은 몇 가지 기능입니다. NCache MongoDB를 사용하는 전자 상거래 애플리케이션 성능을 향상시키기 위해 제공합니다.
NCache 세부 정보 데이터베이스와 캐시 동기화 NCache NoSql 데이터 스토어
JSON 직렬화 캐시로 직렬화 비용 제거
MongoDB는 다음 형식으로 데이터를 저장합니다. 바이너리 JSON(BSON), JSON과 유사한 문서의 이진 인코딩 직렬화입니다. 이것은 완벽하게 잘 작동합니다 NCache 를 지원하므로 개체의 JSON 직렬화. 이 MongoDB-NCache 협업은 데이터를 직렬화/역직렬화할 필요성을 방지하여 애플리케이션의 성능 시간을 향상시킬 뿐만 아니라 데이터의 정확성을 유지합니다.
1 2 3 4 5 |
var response = mongoCollection.FindAsync<Customer>(x => x.Id == "EINSTEIN").GetAwaiter().GetResult().ToList<Customer>(); Customer customer = (Customer)response.FirstOrDefault(); JObject customerJson = JObject.Parse(JsonSerializer.Serialize(customer)); cache.Insert($"Customer:CustomerID:{customer.Id}", customerJson); customer = cache.Get<Customer>($"Customer:CustomerID:EINSTEIN "); |
리소스 최적화를 위한 데이터 소스 공급자
NCache 제공 데이터 소스 공급자 애플리케이션의 데이터 액세스 계층에 대한 단일 지점 진입을 보장합니다. 진입점은 캐시입니다. 캐시에서 데이터를 사용할 수 없는 경우 전체 읽기 공급자는 데이터베이스 액세스, 필요한 데이터 검색 및 가져오기, 향후 사용을 위해 캐싱, 애플리케이션에 제공하는 일을 담당합니다.
1 |
var customer = cache.Get<Customer>( "EINSTEIN", new ReadThruOptions(ReadMode.ReadThru, "mongoDBReadThroughProvider")); |
마찬가지로, 당신은 연속 기입 데이터베이스에서 쓰기 작업을 실행하려는 경우를 위한 공급자입니다. 캐시에서 필요한 작업을 수행하기만 하면 캐시가 자동으로 데이터베이스에 데이터를 기록합니다. 다음을 사용하여 데이터베이스에 좋아하는 고객의 2 버전을 추가하도록 캐시에 "Einstein 2.0"를 추가해 보겠습니다. WriteThru
.
1 2 3 4 |
Customer customer = new Customer(); customer.Id = "EINSTEIN2"; ... cache.Insert(customer.Id,new CacheItem(customer),new WriteThruOptions(WriteMode.WriteThru,"mongoDBWriteThroughProvider"); |
NCache 세부 정보 데이터베이스와 캐시 동기화 NCache NoSql 데이터 스토어
쿼리 캐시 데이터
사용시 NCache .NET 애플리케이션과 MongoDB 사이의 중간 캐싱 계층으로, NCache 할 수 있는 능력을 제공합니다 쿼리를 통해 인덱싱된 캐시 데이터 검색. 메모리 내 캐시 데이터를 쿼리하면 일반적으로 쿼리가 네트워크를 통해 처리해야 하는 이동 비용이 직접적으로 줄어듭니다.
인덱싱된 데이터 쿼리 사용을 설명하는 예제 코드 스니펫 NCache 여기에 표시됩니다 :
1 2 3 4 5 6 7 8 9 10 11 12 |
string query = "SELECT * FROM Models.Customer WHERE Country == ?"; var queryCommand = new QueryCommand (query); queryCommand.Parameters.Add("Country", "Germany"); ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand); if (reader.FieldCount > 0) { while (reader.Read()) { string result = reader.GetValue("ContactName"); // Perform operations } } |
결론짓기
모든 것을 고려하여 기능 및 특징 NCache 당신을 제공합니다, 보다 더 나은 일치를 만들 수 없다는 결론을 내리는 것이 안전합니다. NCache MongoDB 캐싱. 이유는 다음과 같습니다. MongoDB는 애플리케이션에서 멀리 떨어져 있습니다. 성능 향상을 위해 긴밀하게 유지되는 솔루션이 필요합니다. NCache 메모리에 존재함으로써 이를 제공합니다. 런타임 시 원하는 만큼의 서버를 추가할 수 있는 솔루션이 필요합니다. 선형적으로 확장 가능 NCache 당신에게 그것을 제공합니다. 데이터를 동적으로 자동 재조정하는 유연한 솔루션을 찾고 있습니다. NCache 클라이언트 간섭 없이 정확히 그 플러스를 수행합니다.
NCache 성능, 비용 절감, 유연성, 확장성이라는 형태로 너무 많은 것을 제공합니다. 그러면 다른 무엇을 찾고 계십니까? 가서 가져와 NCache 그리고 캐싱을 즐기십시오!