データベースとキャッシュは密接に関連しており、長い間密接に関連しています。 中間層としてのキャッシュは、処理を高速化するためにデータをキャッシュに保持することにより、データベースへの負荷を軽減します。 NCache は、.NETおよびJavaアプリケーション用のメモリ内分散キャッシュソリューションです。 長年、 NCache データベースの負荷を軽減することにより、高いパフォーマンスとスケーラビリティを提供してきました。 また、ミッションクリティカルなアプリケーションの応答時間を短縮します。
JSONの 現代のアプリケーション間の最も有名なデータ交換フォーマットのXNUMXつです。 それは、そのパターン化された性質のために、プラットフォームに依存せず、軽量で、非常に読みやすく、理解しやすい言語です。 これは非常に高速で、最新のプログラミング言語で使用でき、すべての主要なJavaScriptフレームワークでサポートされています。
上記のXNUMXつのことについて別々に話すと、ここでの議論のトピックになります。これは、JSONのサポートです。 NCache. NCache 非常にスケーラブルで分散されているため、データのJSONシリアル化とともにキャッシュ内のJSONデータストレージがサポートされます。 JSONドキュメントをキャッシュに保存して、すばやく簡単に操作できます。 NCache プロパティに基づいて抽象クラスJsonValueBaseから派生した、JSONデータストレージ用の独自のクラスを提供します。 これらのクラスは次のとおりです。
- JsonValue
- Jsonオブジェクト
- 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データを追加します。 これらのクラスをXNUMXつずつ詳しく見ていきます。
1.JsonValue
JsonValue JSONの規則でプリミティブデータ型を表します。 キャッシュ内のJsonValueとして、.NETの文字列、DateTime、decimalなどの他のプリミティブ型の値を追加できます。
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.Jsonオブジェクト
Jsonオブジェクト は順序付けられていない名前/値ペアのコンテナです。ここで、nameまたはkeyは属性の名前であり、valueは任意のプリミティブデータ型にすることができます。 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
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.JsonNull
このクラスは、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 マスターデータソースで直接操作を実行するためのサーバー側の機能がいくつかあります。 これらの機能は、マスターデータソースとの間でデータを読み書きしたり、キャッシュにデータをプリロードしたりする柔軟性を提供します。 これらの機能のXNUMXつは バッキングソース 次のような使いやすさを提供します。
- 読み過ごし: 読み通す データがキャッシュストアに存在しない場合に備えて、データソースからデータをフェッチします。
- ライトスルー:ライトスルー キャッシュストアを更新した後、データソース(任意の書き込み操作)を更新します。
NCache マスターデータソースからデータをロードしたり、マスターデータソースにデータを書き込んだりするためのカスタムロジックを使用して、ユーザーが作成したプロバイダーを呼び出します。 プロバイダーは 展開 NCache リードスルー/ライトスルーを使用するWebマネージャー。
Cosmos DBなどのJSONベースのマスターデータソースの場合、キャッシュでJSONデータを使用するという追加の利点があります。 .NETとは異なり、JSONの場合、JSONですべてのアプリケーションの汎用プロバイダーを記述して、データベースからデータを直接ロードするためにキャッシュにデプロイできます。 JSONはプラットフォームに依存しないため、これらの汎用プロバイダーを使用することで、より高い永続性を実現できます。 .NETでは、データをシリアル化してから逆シリアル化する必要があるため、アプリケーションごとに異なるプロバイダーを作成する必要があります。 キャッシュとデータベースの両方がJSONストアである場合、これらの機能は非常に高レベルの永続性を提供し、アプリケーションのパフォーマンスを向上させます。 以下に、ライトスルーが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でデータをシリアル化する主な利点の1つです。 JSONは非常に簡単で理解しやすく、複雑なライブラリがないため、データを逆シリアル化する必要があるタイプを提供できます。 逆シリアル化するときに属性が同じであることを考えると、シリアル化のための非常に柔軟なスキーマがあります。 それだけでなく、JSONでシリアル化された同じクラスのXNUMXつの異なるバージョンをマップすることもできます。 .NETクラスからデータをJSONシリアル化でき、Javaアプリケーションはname属性を使用してシリアル化されたデータにアクセスできます。 図XNUMXは、キャッシュでJSONシリアル化を使用して.NETアプリケーションとJavaアプリケーション間でデータを共有する方法を示しています。
まとめ
これで、ブログの最後になります。 NCache JSONストアとして。 NCache はメモリ内の分散キャッシュであり、キャッシュ内でJSONドキュメントを使用できます。 これにより、永続データをキャッシュに保持でき、JSONシリアル化と.NETとJavaアプリケーション間のデータ共有の利点が追加されます。