JSON 지원 NCache

NCache 구문 분석 및 데이터 공유를 위한 체계적이고 사람이 읽을 수 있는 경량 구문인 JSON 지원을 제공합니다. 제공되는 주요 용이성 NCache Cache Data as JSON을 통해 캐시에 있는 모든 사용자 지정 클래스의 데이터를 JSON으로 검색할 수 있는 유연성을 얻을 수 있습니다. 또한 데이터를 JSON으로 추가하고 사용자 지정 클래스로 검색 및 구문 분석할 수 있습니다.

NCache 다음을 통해 JSON을 지원합니다.

JSON API NCache

NCache JSON 형식으로 캐시 데이터를 추가하고 검색할 수 있습니다. NCache JSON 데이터를 효율적으로 삽입하고 가져오기 위해 여러 JSON 구조를 지원합니다. 이러한 구조는 다음과 같습니다.

  • JSON 객체
  • JSON 배열

이 두 구조는 이름으로 추상 클래스에서 파생됩니다. JsonValueBase.

다음 단락에서는 이러한 클래스와 그 사용법에 대해 설명합니다. NCache 데이터를 저장하고 검색합니다.

JSON 객체

JsonObject 대표 JObject JSON 표준에서 NCache 도메인입니다. JsonObject 순서가 지정되지 않은 이름-값 쌍을 보유하며 나중에 캐시 작업을 수행하는 데 사용되는 고유 키에 대해 캐시에 추가됩니다. 캐시 데이터를 JSON으로 검색하려면, NCache 모든 사용자 정의 클래스를 JsonObject.

캐시에 JsonObject 추가

당신은 삽입 할 수 있습니다 JsonObject 다음과 같은 방법으로 캐시에 저장합니다. 이 예는 JsonObject 직렬화된 문자열을 사용하여 캐시에 추가합니다.

var product = FetchProductFromDB("1001");
string jsonString = @$"{{ 
			""ProductID"" : ""{product.ProductID}"",
			""ProductName"" : ""{product.ProductName}"",
			""Category"" : ""{product.Category}"",
			""UnitsAvailable"" : ""{product.UnitsAvailable}""
			}}";
JsonObject jsonObject = new JsonObject(jsonString, "Alachisoft.NCache.Sample.Product");
string key = "Product:" + product.ProductID;

// Inserting object in cache
cache.Insert(key, jsonObject);
Product product = Product.fetchProductFromDB("Product:1001");
String jsonString = "{\"ProductID\":\"" + product.getProductID() + "\"," +
		    "\"ProductName\":\"" + product.getProductName() + "\"," +
		    "\"Category\":\"" + product.getCategory() + "\"," +
		    "\"UnitsAvailable\":" + product.getUnitsAvailable() +
		    "}";
JsonObject jsonObject = new JsonObject(jsonString, "com.alachisoft.ncache.sample.Product");
String key = "Product:" + product.getProductID();

// Inserting object in Cache
cache.insert(key, jsonObject);

캐시에서 JsonObject 검색

NCache 의 형태로 캐시된 사용자 정의 개체를 검색할 수 있습니다. JsonObject. 이렇게 하면 사용자 정의 클래스의 데이터가 포함된 JSON 문자열이 반환됩니다. NCache 또한 캐시할 수 있습니다. JsonObject 동일한 Get API를 사용하여 사용자 정의 개체로 가져옵니다. 다음은 사용자 정의 개체를 JSON 개체로 검색하는 방법의 예입니다.

var jsonObject = cache.Get<JsonObject>(key);
var jsonObject = cache.get(key, JsonObject.class);

JSON 배열

JsonArray in NCache 의 대표이다 JArray JSON 표준에서. JsonArray 정렬된 값 목록입니다. 이러한 값은 문자열, 숫자, 부울, 개체 또는 다른 배열일 수 있습니다.

캐시에 JsonArray 추가

당신은 추가 할 수 있습니다 JsonObject 또는 다른 JsonArrayJsonArray. NCache indexer 속성을 사용하여 JsonArray. 당신은 만들 수 있습니다 JsonArray 를 사용하여 JsonObject 다음과 같은 방법으로

var jsonArray = new JsonArray();
...                 
var jsonObject1 = new JsonObject(jsonString1 );
jsonArray.Add(jsonObject1);

var jsonObject2 = new JsonObject(jsonString2);
jsonArray.Add(jsonObject2);

string key = “JsonArrray:1001”;
cache.Insert(key, jsonArray);
var jsonArray = new JsonArray();
        //...
var jsonObject1 = new JsonObject(jsonString1, "com.alachisoft.ncache.sample.Product");
jsonArray.add(jsonObject1);
var jsonObject2 = new JsonObject(jsonString2, "com.alachisoft.ncache.sample.Product");
jsonArray.add(jsonObject2);

String key = "JsonArray:1001";

// Inserting JsonArray in Cache
cache.insert(key, jsonArray);

In NCache의 지정된 인덱스에 JSON 데이터를 추가할 수도 있습니다. JsonArray. 항목이 지정된 인덱스에 이미 있으면 덮어씁니다. 지정된 인덱스가 없으면 해당 인덱스에 항목이 추가되고 마지막으로 채워진 인덱스와 새 인덱스 사이의 모든 값이 다음으로 설정됩니다. JsonNull (JSON 표준에서는 null).

검색 JsonArray 또는 특정 지수 값

NCache 전체를 가져올 수 있습니다. JsonArray 캐시에서 또는 특정 색인에서 값을 검색합니다. JsonArray. 검색되면 데이터를 열거하거나 데이터에 대한 인덱스 기반 작업을 수행할 수 있습니다. 이것은 당신이 JsonArray 또는 캐시의 특정 값:

// Retrieve JsonArray from cache
string key = "JsonArray:1001";
JsonArray jsonArray = cache.Get<JsonArray>(key)

// Retrieve the value of the specified index
JsonValueBase value = jsonArray[2];
// Retrieve JSONArray from cache
String key = "JsonArray:1001";
JsonArray jsonArray = cache.get(key, JsonArray.class);

// Retrieve the value of the specified index
JsonValueBase value = jsonArray.getItem(2);

JSON 열거자

NCache 또한 캐시에서 JsonEnumerator를 사용하여 다음과 같은 방법으로 모든 JSON 개체 및 JSON 배열을 가져올 수 있습니다.

var enumerator = (IDictionaryEnumerator)_cache.GetJsonEnumerator();
while (enumerator.MoveNext())
{
	DictionaryEntry entry = (DictionaryEntry)enumerator.Current;
	JsonValueBase valueBase = (JsonValueBase)entry.Value;
	//...
}
var enumerator = cache.asJsonIterator();
while (enumerator.hasNext())
{
	Entry entry = (Entry) enumerator.next();
	JsonValueBase valueBase =  (JsonValueBase) entry.getValue();
	//...
 }

NCache JSON으로 지원되는 기능

NCache 데이터를 쉽게 저장하고 검색할 수 있도록 많은 기능을 제공하는 기능이 풍부한 분산 캐시입니다. 네이티브 및 커스텀 객체와 마찬가지로 NCache JSON 유형 데이터에도 이러한 기능을 지원합니다.

기능 역량 네이티브 객체 캐싱 NCache JSON 스토어
크로스 플랫폼 액세스 공유 클래스 라이브러리 또는 DTO가 필요합니다. 이식 가능한 JSON을 통한 원활한(.NET, Java, Node.js, Python) 호환성
데이터 조작 수정하려면 전체 역직렬화가 필요합니다. JsonObject API를 사용한 동적 조작
질의 접근 방식 객체 속성을 기준으로 인덱싱됨 스키마에 구애받지 않는 검색을 위해 JSON 유형별로 인덱싱됩니다.
스키마 진화 컴파일된 클래스 정의와 연결됨 유연성 - 코드 변경 없이 필드를 쉽게 추가하거나 제거할 수 있습니다.

캐시의 JSON 데이터 인덱싱

NCache 유형에 따라 JSON 데이터를 인덱싱할 수 있습니다.

Product product = FetchProductFromDB();
string jsonString = @$"{{ ""ProductID"" : ""{product.ProductID}"", ""ProductName"" : ""{product.ProductName}"", ""Price"" : {product.Price} }}";

JsonObject jsonObject = new JsonObject(jsonString, "Alachisoft.NCache.Sample.Product");
string key = "Product:" + product.ProductID;

cache.Insert(key, jsonObject);
Product product = Product.fetchProductFromDB("Product:1001");

String jsonString = "{\"productID\":\"" + product.getProductID() + "\", \"productName\" : \""+ product.getProductName() + "\", \"price\":\"" + product.getPrice() + "\"}";

JsonObject jsonObject = new JsonObject(jsonString,"com.alachisoft.ncache.sample.Product" );
String key = "Product:" +product.getProductID();
cache.insert(key, jsonObject);

캐시에서 JSON 데이터 쿼리

유형에 따라 JSON 데이터를 인덱싱한 후에는 SQL과 유사한 쿼리를 수행하여 캐시에서 데이터를 가져오거나 삭제할 수 있습니다. JSON 데이터를 쿼리하는 동안 검색 가능한 모든 속성을 사용하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요. JSON 데이터 쿼리.

string query = "Select * FROM Alachisoft.NCache.Runtime.JSON.JsonObject 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
 if (queryResult.FieldCount > 0) {
            while (queryResult.Read()) {
                // Perform operation according to your logic
            }
        }
else
{
	// No data
}
String query = "Select * FROM Alachisoft.NCache.Runtime.JSON.JsonObject WHERE Discount = ?";
QueryCommand queryCommand = new QueryCommand(query);
queryCommand.getParameters().put("Discount", 0.5);

var queryResult = cache.getSearchService().executeReader(queryCommand);
if (queryResult.getFieldCount() > 0) {
      while (queryResult.read()) {
      // Perform operation according to your logic
      }
}
else {
            // No data
        }

JSON 데이터를 데이터베이스와 동기화

NCache 휘발성 캐시 데이터와 영구적인 관계형 데이터베이스 간의 격차를 해소하여 데이터 무결성을 보장합니다. 이러한 동기화는 분산 환경에서 '단일 진실 소스'를 유지하는 데 매우 중요합니다. 캐시에 데이터를 저장할 때, NCache 작업 중인 데이터가 오래되지 않았는지 확인할 수 있습니다. 이를 보장하기 위해, NCache 캐시와 데이터베이스를 동기화하는 다음과 같은 기능을 제공합니다.

  • 캐시 종속성: NCache 데이터베이스에서 업데이트된 경우 캐시에서 데이터를 제거하는 JSON 데이터에 대한 캐시 종속성을 지원합니다. 자세히 알아보기 캐시 데이터 종속성 우리 문서의 데이터베이스에 있습니다.
  • 만료: 캐시가 데이터베이스와 동기화되도록 JSON 데이터에 시간 기반 만료를 추가할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요. 캐시의 데이터 만료 전략.
  • 이벤트 : NCache JSON 직렬 캐시 또는 JSON 데이터에 대해 등록된 작업이 수행될 때 트리거되는 이벤트 알림을 제공합니다. 자세한 내용은 다음 문서를 참조하세요. 캐시의 이벤트 알림.
  • 데이터 소스 제공자: NCache JSON 데이터를 마스터 데이터 원본에 유지하고 캐시에 데이터가 없으면 원본에서 직접 데이터를 가져옵니다. 다음 문서를 참조하세요. 캐시용 데이터 소스 공급자 이러한 공급자에 대한 자세한 도움을 받으십시오.
  • 캐시 시작 로더: 캐시 시작 로더를 사용하여 캐시가 시작되면 JSON 데이터가 캐시에 자동으로 추가될 수 있습니다. 자세한 내용은 다음 문서를 참조하세요. 캐시 시작 로더.

.NET 및 Java 객체의 JSON 직렬화

JSON 직렬화에서 개체는 직렬화될 때 해당하는 JSON으로 변환된 다음 역직렬화 시 사용자 지정 개체로 다시 변환됩니다.

NCache .NET 및 Java 개체 모두에 대한 JSON 직렬화 지원을 제공합니다.

  • .NET 클라이언트에서 JSON 직렬 캐시에 사용자 정의 개체를 저장하고 다음과 같이 Java 클라이언트를 통해 데이터를 가져올 수 있습니다. JsonObject.
  • Java 클라이언트의 JSON 직렬 캐시에 사용자 정의 개체를 저장하고 .NET 클라이언트를 통해 검색할 수 있습니다. JsonObject.
  • .NET 클라이언트에서 JSON이 아닌 직렬화된 캐시에 JSON 객체를 저장하고 Java 클라이언트를 통해 이를 검색할 수도 있습니다. JsonObject 그 반대.

이 자동 변환 기능은 수동 매핑이나 사용자 지정 DTO(데이터 전송 객체)의 필요성을 없애주어, 다양한 언어를 사용하는 마이크로서비스 아키텍처에서 원활한 데이터 이식성을 가능하게 합니다.

.NET에 다음과 같은 제품 특성이 있다고 가정해 보겠습니다. 아래와 같이 이 개체를 사용자 정의 개체로 캐시에 저장할 수 있습니다.

Product product = new Product();
product.Name = "Pizza";
product.Expiry = new DateTime(2020, 3, 28);
product.Sizes = new string[] { "Large", "Medium" };
Product product = new Product();
product.setName("Pizza");
product.setExpiry(new Date(2020, 3, 28));
product.setSizes(new String[] { "Large", "Medium" });

또는 JSON 직렬화를 사용하여 이 데이터를 직렬화합니다. JSON 직렬화를 선택하면 이 데이터가 다음 JSON 문자열로 직렬화됩니다.

{
   "Name": "Pizza",
   "Expiry": "2020-3-28T00:00:00",
   "Sizes": ["Large", "Medium"]
}

JSON 직렬화는 메모리 효율적이고 이식 가능하며 구현을 위해 코드를 변경할 필요가 없는 완전 자동화된 방식입니다. NCache 또한 직렬화하려는 속성과 그대로 둘 속성을 지정할 수 있습니다.

다음에 무엇을할지?

자주 묻는 질문 (FAQ)

NCache JSON 지원은 분산 데이터 관리를 위한 특수 프레임워크로, 개발자가 가볍고 사람이 읽기 쉬운 구문을 사용하여 구조화된 데이터를 저장, 검색 및 쿼리할 수 있도록 합니다. JSON 지원은 사용자 정의 .NET/Java 객체와 상호 운용 가능한 데이터 형식 간의 격차를 해소하여 기존 직렬화 방식의 오버헤드 없이 고속 액세스를 보장합니다.

JSON 지원 NCache JSON은 스키마 유연성과 플랫폼 간 상호 운용성을 제공합니다. 사전 정의된 클래스 라이브러리가 필요한 네이티브 객체와 달리 JSON 데이터는 언어에 구애받지 않습니다. 따라서 .NET, Java, Python 및 Node.js 애플리케이션은 수동 매핑이나 사용자 지정 DTO를 사용하는 번거로움 없이 캐시를 통해 데이터를 원활하게 공유할 수 있습니다.

NCache 자동화된 JSON 직렬화를 제공합니다. .NET 객체가 JSON 직렬화된 캐시에 저장될 때, NCache 자동으로 이식성이 뛰어난 JSON 형식으로 변환합니다. 이를 통해 Java 클라이언트는 원래 .NET 클래스 정의 없이도 동일한 데이터를 JsonObject로 가져올 수 있으므로 진정한 다국어 마이크로서비스 아키텍처를 구현할 수 있습니다.

네이티브 JSON API를 통해 개발자는 JsonObject 및 JsonArray 클래스를 사용하여 특정 속성을 프로그래밍 방식으로 조작한 후 캐시에 다시 삽입할 수 있습니다. 이를 통해 전체 객체 역직렬화 없이도 변화하는 데이터 모델과 복잡한 객체 그래프를 동적으로 처리할 수 있습니다.

바이너리 직렬화는 종종 더 간결하지만, JSON 캐싱은 이식성과 검색 용이성에 최적화되어 있습니다. 여러 언어가 동일한 데이터를 사용하는 최신 분산 환경에서는 크기 측면에서의 약간의 손실은 개발 속도 향상, 통합 용이성, 복잡한 서버 측 쿼리 수행 능력 향상이라는 엄청난 이점에 비하면 미미합니다.

문의하기

전화

+1 214-619-2601 (미국)

© 저작권 Alachisoft 2002 - . 판권 소유. NCache 는 Diyatech Corp.의 등록상표입니다.