데이터베이스와 캐시는 밀접하게 연관되어 있으며 오랫동안 긴밀한 관계를 유지해 왔습니다. 중간 계층으로서의 캐시는 더 빠른 처리를 위해 데이터를 캐시에 보관함으로써 데이터베이스에 대한 부담을 줄입니다. NCache .NET 및 Java 애플리케이션을 위한 메모리 내 분산 캐싱 솔루션입니다. 수년간, NCache 데이터베이스의 부하를 줄여 고성능과 확장성을 제공하고 있습니다. 또한 미션 크리티컬 애플리케이션에 대한 더 빠른 응답 시간을 보장합니다.
JSON 현대 응용 프로그램 간의 가장 유명한 데이터 교환 형식 중 하나였습니다. 패턴화 된 특성으로 인해 플랫폼 독립적이고 가볍고 매우 읽기 쉽고 이해하기 쉬운 언어입니다. 매우 빠르며 최신 프로그래밍 언어에서 사용할 수 있으며 모든 주요 JavaScript 프레임워크에서 지원됩니다.
위에서 언급한 두 가지에 대해 별도로 이야기하면 여기에서 JSON을 지원하는 토론 주제로 이동합니다. NCache. NCache 확장성이 뛰어나고 분산되어 데이터의 JSON 직렬화와 함께 캐시에 JSON 데이터 저장을 지원합니다. 빠르고 쉬운 조작을 위해 캐시에 JSON 문서를 저장할 수 있습니다. NCache 속성을 기반으로 추상 클래스 JsonValueBase에서 파생된 JSON 데이터 저장을 위한 자체 클래스를 제공합니다. 이러한 클래스는 다음과 같습니다.
- 제이슨값
- JsonObject
- JsonArray
- JsonNull
.NET과 Java 간의 빠른 JSON 예제
우선 JSON 데이터의 사용을 보여주는 빠른 예를 살펴보겠습니다. NCache. .NET 애플리케이션을 사용하여 캐시에 JSON 문서를 추가할 수 있으며 이 데이터는 JSON이 플랫폼에 독립적이므로 Java 애플리케이션에서 검색할 수 있습니다.
아래 주어진 예는 .NET을 사용하여 캐시에 JSON 문서를 JsonObject로 추가하는 것을 보여줍니다.
1 2 3 4 5 6 7 8 9 10 |
// Pre-Condition: Cache is JSON serialized // The data provided in the string is a jsonObject string jsonString = "{ 'ProductID' : 1001, 'ProductName' : 'Chai', 'Category': 'Beverages', 'UnitPrice' : 500, 'UnitsInStock' : 2000 }"; // Populate an instance of the JsonObject by passing the string var jsonProduct = new JsonObject(jsonString); // Insert the jsonObject in the cache with a key string key = “Product:ProductID:1001”; cache.Insert(key, jsonProduct); |
위에서 추가한 JSON 문서는 Java 애플리케이션을 사용하여 검색할 수 있습니다. 아래의 코드는 Java를 통해 동일한 JSON 문서를 검색하는 방법을 보여줍니다. JsonObject의 속성을 추가로 제거한 다음 캐시에 JsonObject를 다시 삽입합니다.
1 2 3 4 5 6 7 |
JsonObject jsonProduct = cache.get(key, JsonObject.class); // Remove the attribute UnitPrice from the JsonObject boolean result = jsonProduct2.removeAttribute("UnitPrice"); // Re-insert the item in the cache with the removed attribute cache.insert(key, jsonProduct); |
JSON 지원 NCache
NCache 캐시에 사용자 지정 데이터를 추가하고 JSON 형식으로 검색할 수 있는 기본 캐싱 솔루션입니다. 마찬가지로 캐시에 JSON 데이터를 추가하고 사용자 지정 데이터 개체로 검색할 수 있습니다.
앞서 언급 한 바와 같이, NCache JsonValueBase에서 파생된 자체 클래스를 제공하고 이러한 클래스는 캐시에 다양한 형식의 JSON 데이터를 추가하는 데 추가로 사용됩니다. 이러한 클래스를 하나씩 자세히 살펴보겠습니다.
1. 제이슨밸류
제이슨값 JSON 규칙의 기본 데이터 유형을 나타냅니다. 캐시의 JsonValue로 .NET의 문자열, DateTime 또는 XNUMX진수와 같은 다른 유형을 포함한 모든 기본 유형의 값을 추가할 수 있습니다.
1 2 3 4 5 |
string keyInt = $"Product:{product.ProductID}"; JsonValue jsonValue = 1001; // Insert a JsonValue in the cache with the key cache.Insert(keyInt,jsonValue); |
2. 제이슨오브젝트
JsonObject 이름 또는 키는 속성의 이름이고 값은 기본 데이터 유형 중 하나일 수 있는 정렬되지 않은 이름/값 쌍의 컨테이너입니다. JSON 데이터가 포함된 전체 문자열을 구문 분석하고 여기에서 JsonObject를 채울 수 있습니다. 마찬가지로 사용자 정의 개체는 JsonObject로 검색할 수 있으며 그 반대의 경우도 마찬가지입니다. 아래의 예는 속성과 값이 있는 JsonObject를 생성한 다음 캐시에 추가하는 방법을 보여줍니다. 그런 다음 특정 속성 제거와 같은 JsonObject에 대한 추가 작업을 보여줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
string key = "jsonKey"; // Create a new JsonObject with the attributes and insert in the cache JsonObject jsonProduct = new JsonObject(); jsonProduct.AddAttribute("ProductID", 1001); jsonProduct.AddAttribute("ProductName", (JsonValue)"Chai"); cache.Insert(key, jsonProduct); // Retrieve the jsonObject previously added the attribute from jsonObject var jsonProduct2 = cache.Get<JsonObject>(key); // Remove the attribute from jsonObject without changing the entire object bool result = jsonProduct2.RemoveAttribute("UnitPrice"); cache.Insert(key, jsonProduct2); |
3. 제이슨어레이
JsonArray 항목 모음이며 다음에서 JArray를 나타냅니다. NCache의 도메인입니다. JsonObject와 마찬가지로 JsonValueBase에서 파생된 모든 값이나 개체를 지정할 수 있습니다. 지정된 인덱스의 JsonArray에서 값을 추가, 검색 또는 제거할 수도 있습니다.
1 2 3 4 |
string jsonProductIds = " ['ProductIDs', { 'ProductID' : 1001 }, { 'ProductID' : 1002 }, { 'ProductID' : 1003 } ]"; // Create a JsonArray with from the JSON document provided var jsonArray = new JsonArray(jsonProductIds); |
4. 제이슨널
이 클래스는 JSON 표준에서 null 값을 나타냅니다. 주어진 예제는 JsonObject의 속성에 대한 null 값을 보여줍니다. null 값으로 속성을 추가로 검색하면 예외가 발생합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Create a new JsonObject with attributes and insert in the cache var jsonProduct = new JsonObject(); jsonProduct.AddAttribute("ProductID", product.ProductID); jsonProduct.AddAttribute("ProductName", (JsonValue)product.ProductName); jsonObject.AddAttribute("Category", null); cache.Insert(key, jsonProduct); // Retrieve the same jsonObject previously created var jsonProduct2 = cache.Get<JsonObject>(key); var productCategory = jsonObject.GetAttributeValue("Cateogry"); // Check if the attribute value is null if(category.DataType == Runtime.Enum.JsonDataType.Null) { // Throw category null Exception } |
NCache 세부 정보 JSON 문서로 데이터 캐시 JSON 직렬화
JSON 문서 인덱싱 NCache
캐시가 JSON 저장소인 경우 다음 중 하나를 사용하여 데이터를 인덱싱할 수 있습니다.
- 그룹: 캐시에 있는 항목들 간에 관계가 있거나 유사한 범주에 속하는 항목을 그룹화할 수 있습니다. NCache 사용 NCache "그룹" 기능. 사용 그룹, 더 나은 효율성을 위해 데이터를 논리적으로 분할할 수 있습니다.
- 태그: 태그는 데이터와 연결된 문자열 기반 식별자입니다. 사용 태그, 키워드를 캐시 항목과 연결하면 해당 키워드를 사용하여 데이터에서 다양한 캐시 작업을 수행하는 데 도움이 됩니다.
- 명명된 태그: 명명된 태그 에서 제공하는 기능입니다 NCache 이는 태그의 향상된 형태입니다. 런타임 시 키-값 쌍의 형태로 특정 정보를 항목과 연결합니다.
JSON 문서는 이러한 식별자와 함께 캐시에 추가됩니다. NCache 이러한 식별자를 기반으로 데이터를 인덱싱합니다. 나중에 다음에서 제공하는 쿼리를 사용할 수 있습니다. NCache 작업을 수행합니다. 아래 예는 연결된 명명된 태그와 함께 캐시에 JSON 문서를 추가하는 방법을 보여줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
string jsonString = "{'ProductID' : 1001, 'ProductName' : 'Chai', 'Category': 'Beverages', 'UnitPrice' : 500, 'UnitsInStock' : 2000 }"; // Populate an instance of the JsonObject by passing the string var jsonProduct = new JsonObject(jsonString); string key = $"Products:{product.ProductID}"; var item = new CacheItem(jsonProduct); var productNamedTag = new NamedTagsDictionary(); // Add NamedTag 'Discount' to the dictionary with the value productNamedTag.Add("Discount", 0.5); item.NamedTags = productNamedTag; // Add CacheItem with the NamedTag associated cache.Insert(key, item); |
SQL로 JSON 문서 검색하기 NCache
NCache 데이터를 검색하고 제거하기 위한 쿼리와 같은 SQL을 제공합니다. 인덱싱된 데이터에 대한 쿼리를 사용하여 다음에서 제공하는 형식으로 JSON 데이터를 가져올 수 있습니다. NCache.
주어진 예는 명명된 태그가 추가된 JSON 문서인 위의 예에서 인덱싱된 데이터를 쿼리하는 것을 보여줍니다. 쿼리는 할인 값이 0.5인 캐시에서 모든 JsonObject를 검색합니다.
1 2 3 4 5 6 7 |
// Create a query for fetching item with NamedTag string query = "Select * FROM Alachisoft.NCache.Runtime.JSON.JsonArray WHERE Discount = ?"; QueryCommand queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("Discount", 0.5); var queryResult = cache.SearchService.ExecuteReader(queryCommand); // QueryResult contains all the keys and metadata of result |
JSON 문서 유지
NCache 마스터 데이터 원본에서 직접 작업을 수행하기 위한 여러 서버 측 기능이 있습니다. 이러한 기능은 마스터 데이터 소스에서 데이터를 읽거나 쓸 수 있는 유연성을 제공할 뿐만 아니라 캐시에 데이터를 미리 로드합니다. 이러한 기능 중 하나는 백업 소스 다음과 같은 편의성을 제공합니다.
- 전체 읽기: 읽기 완료 캐시 저장소에 없는 경우 데이터 소스에서 데이터를 가져옵니다.
- 연속 기입:연속 기입 캐시 저장소를 업데이트한 후 데이터 소스(모든 쓰기 작업)를 업데이트합니다.
NCache 마스터 데이터 소스에서 데이터를 로드하거나 마스터 데이터 소스에 데이터를 쓰는 사용자 지정 논리를 사용하여 사용자가 작성한 공급자를 호출합니다. 공급자는 다음 배포 사용 NCache Read-Through/Write-Through를 사용하는 Web Manager.
Cosmos DB와 같은 JSON 기반 마스터 데이터 원본의 경우 캐시에서 JSON 데이터를 사용하는 추가 이점이 있습니다. .NET과 달리 JSON의 경우 JSON의 모든 애플리케이션에 대한 일반 공급자를 작성하여 캐시에 배포하여 데이터베이스에서 데이터를 직접 로드할 수 있습니다. JSON은 플랫폼에 독립적이므로 이러한 일반 공급자를 사용하여 지속성을 높일 수 있습니다. .NET에서는 데이터를 직렬화한 다음 역직렬화해야 하므로 각 애플리케이션에 대해 다른 공급자를 작성해야 합니다. 캐시와 데이터베이스가 모두 JSON 저장소인 경우 이러한 기능은 애플리케이션 성능을 높이는 매우 높은 수준의 지속성을 제공합니다. 아래는 write-through가 JSON과 어떻게 작동하는지 보여주는 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
string jsonString = "{ 'ProductID' : 1001, 'ProductName' : 'Chai', 'Category': 'Beverages', 'UnitPrice' : 500, 'UnitsInStock' : 2000 }"; // Populate an instance of the JsonObject by passing the string var jsonProduct = new JsonObject(jsonString); string key = $"Products:{product.ProductID}"; // Enable write through for the cacheItem created var writeThruOptions = new WriteThruOptions(); writeThruOptions.Mode = WriteMode.WriteThru; // Add the item in the cache with WriteThru enabled CacheItemVersion itemVersion = cache.Insert(key, cacheItem, writeThruOptions); |
에 대한 완전한 가이드를 얻을 수 있습니다. NCache님의 서버측 기능.
.NET 및 Java 객체의 JSON 직렬화
In NCache, 캐시에 추가된 모든 데이터는 직렬화됩니다. 직렬화는 바이너리 또는 JSON일 수 있습니다. 플랫폼 독립적인 언어이며 널리 지원되는 장점이 있습니다. 거의 모든 프로그래밍 언어는 표준 라이브러리에서 JSON 직렬화 및 역직렬화를 지원합니다. NCache 사용자 정의 개체를 가져오면 JSON은 이를 JSON으로 변환하여 직렬화한 다음 다시 사용자 정의 개체로 역직렬화합니다.
JSON 직렬화 귀하의 데이터 NCache JSON.NET을 사용하므로 많은 유연성을 제공하므로 여러 언어로 이식성이 뛰어나고 사용자 요구 사항에 따라 데이터를 역직렬화합니다. 코드 변경이 필요하지 않으며 직렬화할 수 없는 속성을 쉽게 지정할 수 있습니다.
.NET의 데이터에 대한 아래 예를 보고 JSON과 동일합니다.
. NET | JSON |
Product product = new Product(); |
{ |
데이터 공유는 데이터를 직렬화하는 JSON의 핵심 이점 중 하나입니다. JSON은 상당히 쉽고 이해하기 쉬우며 복잡한 라이브러리가 없기 때문에 데이터를 역직렬화해야 하는 유형을 제공할 수 있습니다. 역직렬화할 때 속성이 동일하다는 점을 감안할 때 직렬화를 위한 매우 유연한 스키마를 가지고 있습니다. 뿐만 아니라 JSON으로 직렬화된 동일한 클래스의 두 가지 다른 버전을 매핑할 수도 있습니다. JSON은 .NET 클래스에서 데이터를 직렬화할 수 있으며 Java 애플리케이션은 이름 속성을 사용하여 직렬화된 데이터에 액세스할 수 있습니다. 그림 1은 캐시에서 JSON 직렬화를 사용하여 .NET과 Java 애플리케이션 간에 데이터를 공유하는 방법을 보여줍니다.
결론
이것은 우리의 블로그의 끝을 이끈다. NCache JSON 저장소로. NCache 캐시에서 JSON 문서를 사용할 수 있게 해주는 인메모리 분산 캐시입니다. JSON 직렬화 및 .NET과 Java 애플리케이션 간의 데이터 공유의 추가 이점을 통해 캐시에 영구 데이터를 유지할 수 있습니다.