シリアル化形式 - バイナリおよび JSON シリアル化
ネットワーク経由で送信されるキャッシュ データはシリアル化する必要があります。シリアル化プロセスでは、既存のオブジェクトを走査し、データを抽出して、シリアル化されたデータに変換します。その後、データがネットワーク経由で送信され、逆シリアル化のプロセスによってシリアル化されたデータが読み取られます。このシリアル化/逆シリアル化のプロセス全体には、時間、メモリ、パフォーマンスなどの多くの要素が必要です。シリアル化の形式を選択するときは、これらの要素を念頭に置く必要があります。
Note
この機能は以下でも利用できます NCache Professional.
によって提供されるシリアル化形式にはXNUMXつのタイプがあります NCache:
- バイナリ シリアル化
- JSONシリアル化
Note
ASP.NET 5.0以降を使用している場合は、JSONシリアル化を使用することをお勧めします。 詳細については、をクリックしてください こちら.
バイナリ シリアル化
バイナリ形式では、ユーザー オブジェクト (製品オブジェクトなど) がクライアント側からシリアル化され、同じ形式でサーバー側に保存されます。 サーバーから項目が要求されるたびに、クライアントは項目のバイナリ形式を受け取り、ローカルで Product オブジェクトに逆シリアル化されます。 さらに、シリアル化/逆シリアル化はクライアント側でのみ行われ、データのフェッチ中または追加中に XNUMX 回だけ実行されます (フェッチ中にデシリアライズされ、追加中にシリアル化されます)。 これにより、シリアル化/逆シリアル化のコストが節約されます。これは、特に大量のデータがキャッシュに追加またはキャッシュからフェッチされる場合に顕著です。
処理の大部分がクライアント側で行われ、実行される操作が追加、更新、フェッチ、キャッシュからの削除などである場合、バイナリ形式が有益です。 たとえば、シリアル化された Product オブジェクトがキャッシュからフェッチされて、その内容が表示されます。 バイナリ形式を使用すると、項目はクライアントに到着した後でのみ逆シリアル化する必要があるため、処理コストが最小限に抑えられます。 オブジェクト形式が使用されている場合、サーバーは Product オブジェクトをシリアル化してクライアントに送信し、クライアントで逆シリアル化されます。 これにより、シリアル化と逆シリアル化の全体的なオーバーヘッドとコストが増加します。
同様に、オブジェクトがバイナリ形式を使用してキャッシュに追加されている場合、オブジェクトはネットワーク経由で送信される前にシリアル化され、そのまま保存されます。
JSONシリアル化
Note
この機能は NCache Enterprise & 専門.
JSONの データを保存および交換するためのテキストベースの構文です。これは、マシンにとって解析しやすく、ユーザーにとっても理解しやすい形式です。 JSON シリアル化を使用すると、オブジェクトはシリアル化時に同等の JSON に変換され、逆シリアル化時にカスタム オブジェクトに変換されます。
.NETを検討してください プロダクト 製品のデータを含むクラス。これには、さまざまな属性が含まれます。 商品名, 商品ID, 商品の有効期限 等々
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Sizes = new string[] { "Small" };
このデータは、次のJSON文字列にシリアル化されます。
{
"Name": "Apple",
"Expiry": "2008-12-28T00:00:00",
"Sizes":
[
"Small"
]
}
使用されるシリアライザーは、 ニュートンソフト サードパーティのシリアライザー。これは、データをコンパクトで便利にシリアル化するための好ましいアプローチとなります。 JSON シリアル化は、次の理由からバイナリ シリアル化よりも優先される場合があります。
メモリー効率: メモリは、大規模なデータ セットを使用するときに留意すべき主要なパラメータの 1 つです。より大きなメモリの消費は、他のパフォーマンス測定に影響を与えます。 JSON シリアル化は、オブジェクトを保存するためのメモリに影響を与えません。データ セット全体が JSON としてシリアル化され、サイズが大幅に小さくなるためメモリの消費量が削減され、ネットワーク通信が向上します。
移植性: JSON シリアル化により、さまざまなテクノロジーのデータを同じ標準に簡単にシリアル化できるため、移植性が高まります。 JSON シリアライザーは、すべてのタイプのデータをシリアル化します。たとえば、ユーザーが Java クラスを使用している場合、JSON シリアライザーはデータを文字列の形式でシリアル化し、ユーザーが定義した型で逆シリアル化します。このレベルの移植性は、バイナリ シリアル化では提供されません。
コード変更なし: JSON 形式に従ったシリアル化は完全に自動化されているため、独自のロジックに従ってコードを変更する必要がない限り、ユーザーによるコードの変更は必要ありません。
シリアル化できない属性: クラスで「JsonIgnore」と呼ばれるメソッドを使用して、選択した属性をシリアル化するか、選択した属性をシリアル化しないで維持するかを選択することもできます。これは、シリアライザーがデータのシリアル化中にこれらの属性を無視し、残りをシリアル化することを意味します。これはカスタム クラスの属性を使用してのみ実行できます。を参照してください。 ニュートンソフト 詳細についてはドキュメントを参照してください。たとえば、ユーザーが属性を保持したい場合、 パスワード シリアル化されていないものとして、
JsonIgnore
シリアル化不可能としてマークされます。
using Newtonsoft.Json;
[JsonIgnore]
public String Password()
{
get;
set;
}
以下に示すのは、シリアル化できないマークされた属性を持つカスタムクラスの例です。 パスワード 。 シリアル化後、シリアル化された JSON 文字列には、シリアル化されていない属性の値は含まれません。
Account account = new Account
{
FullName = "Joe User",
EmailAddress = "joe@example.com",
Password = "VHdlZXQgJ1F1aWNrc2lsdmVyJyB0byBASmFtZXNOSw=="
};
上記のデータは、次のJSON文字列にシリアル化されます。
{
"FullName":"Joe User",
"EmailAddress":"joe@example.com"
}
上記の要素を念頭に置くと、JSON シリアル化により、より高いレベルのパフォーマンスを達成できる可能性があります。ただし、より高いレベルの精度を取得したい場合は、バイナリ シリアル化されたデータの方がより正確に逆シリアル化されるため、JSON シリアル化ではなくバイナリ シリアル化を使用してください。
も参照してください
コンパクトなシリアル化
コンパクトなシリアル化のためのレジスタクラス
WANレプリケーション用のブリッジ
データ負荷分散