動的コンパクトシリアル化の実装
NCache アプリケーション データをシリアル化された形式で保存します。アプリケーション データは、キャッシュに追加される前にキャッシュ クライアント上でシリアル化されます。したがって、キャッシュに追加するデータもシリアル化可能としてマークする必要があります。ネイティブ バイナリ シリアル化をサポートしており、JSON の情報はネットワーク上を移動せず、ネットワーク上のオブジェクト サイズが削減されます。オブジェクト サイズが小さくなると、ネットワーク トリップが速くなり、最終的にはコストが削減されるため、アプリケーション全体のパフォーマンスが向上します。
コンパクトなシリアル化はバイナリ シリアル化でもあり、次の利点があります。
コンパクトなデータサイズ
In NCache バイナリ データであるため、シリアル化されたオブジェクトのサイズはコンパクトです。 特定のシナリオでは、データ サイズがネイティブ シリアル化の 10 分の XNUMX になる場合があります。 シリアル化されたオブジェクトが小さいほど、ネットワーク上を移動する時間が短縮され、スループットが向上します。 これは、キャッシュ サーバーのメモリ消費量の削減にも役立ちます。 このように、 NCache パフォーマンスが向上し、時間とコストが削減されます。 オブジェクトのサイズが小さく、ネットワーク トラフィックが高速であるため、アプリケーションのパフォーマンスが向上します。
ネイティブシリアル化よりも高速
コンパクトなシリアル化は、ネイティブのシリアル化ほどリフレクションに依存しないため、ネイティブのシリアル化より高速です。 ネイティブ シリアル化では、属性情報のリフレクションを使用します。 この反射は次のように回避されます。 NCacheのコンパクト連載。 コンパクト型の型情報は、キャッシュの初期化時に 5 回だけロードされるため、ネイティブ シリアル化を使用すると発生するオーバーヘッドが軽減されます。 ベンチマークでは、特定の使用例ではネイティブ シリアル化より 10 ~ XNUMX 倍高速であることが示されています。
コード変更なし
クラスをコンパクトにシリアル化可能にするためにコードを変更する必要はありません。 必要な唯一の手順は、管理ツール ( NCache Management Center またはそのコマンド ライン ツール)。
選択的シリアル化: NCache 選択的なシリアル化を可能にします。 シリアル化不可としてマークするクラスのデータ メンバーを選択できます。 キャッシュされたオブジェクトの除外属性は、null になるか、デフォルト値 (割り当てられている場合) になります。 この機能は、データベースの接続オブジェクトなど、特定の属性についてキャッシュする必要がないシナリオで役立ちます。 この選択的なシリアル化により、プロセスはさらに効率的かつコンパクトになります。
コンパクトなシリアル化のきめ細かい制御: このために、あなたは実装することができます
ICompactSerializable
。 このインターフェイスにより、コンパクトなシリアル化をよりきめ細かく制御でき、ビジネス ニーズに応じてどのデータ メンバーをシリアル化し、どれを除外するかを制御できます。ネイティブシリアル化のサポート: NCache ネイティブバイナリシリアル化をサポートします。 データはシリアル化された形式でキャッシュに保存され、クライアント ネイティブのシリアル化は .NET クライアントと Java クライアントの両方でサポートされます。 NCache.
オブジェクト型のコンパクト シリアル化の実装
コンパクト シリアル化を使用するには、コンパクト シリアル化されるオブジェクト タイプを、 NCache 管理センター. NCache 登録されたクラスのシリアル化/逆シリアル化を内部で処理するため、ユーザーが明示的にコーディングする必要はありません。
重要
クラス属性は、シリアル化されたのと同じ順序で逆シリアル化する必要があります。そうしないと、シリアル化されたストリームを逆シリアル化できません。
しかしながら、 NCache の明示的な実装も可能になります。 ICompactSerializable
インタフェース。
このインターフェイスを実装するには、DemoObject クラスを実装する必要があります。 Serialize
& Deserialize
によって呼び出されるメソッド NCache このオブジェクトのシリアル化/逆シリアル化中。 このインターフェイスを実装するサンプル コードを以下に示します。
重要
パラメーター化されたコンストラクターを必要とするクラスをコンパクトなシリアル化用にマークする場合は、そのクラスにデフォルトのコンストラクターが含まれていることを確認してください。
前提条件
- すべてを使用するために必要な標準的な前提条件について学習するには NCache サーバー側の機能については、指定されたページを参照してください サーバー側 API の前提条件.
- キャッシュが実行されている必要があります。
- アプリケーションは キャッシュに接続 操作を実行する前に。
- APIの詳細については、以下を参照してください。 ICompactSerializable, シリアライズ, デシリアライズ, CheckIfSerializable, IGenericTypeProvider.
デモオブジェクトの作成
public class DemoObject : ICompactSerializable
{
private string _attribute1;
private int _attribute2;
private bool _attribute3;
public DemoObject()
{ }
public DemoObject(string attrib1, int attrib2, bool attrib3)
{
_attribute1 = attrib1;
_attribute2 = attrib2;
_attribute3 = attrib3;
}
#region ICompactSerializable Members
public void Deserialize(CompactReader reader) {
_attribute1 = reader.ReadObject() as string;
_attribute2 = reader.ReadInt32();
_attribute3 = reader.ReadBoolean();
}
public void Serialize(CompactWriter writer){
writer.WriteObject(_attribute1);
writer.Write(_attribute2);
writer.Write(_attribute3);
}
#endregion
}
ジェネリック型ハンドラーの実装
NCache コンパクト シリアル化にジェネリック型を登録することもできます。 このためには、各タイプを NCache 管理センター。 「ジェネリック型ハンドラー」を使用してジェネリックのコンパクト型を登録する別の方法もあります。 ジェネリック型ハンドラーを使用すると、ユーザーは次のメソッドを実装することで、すべてのジェネリック型を一度に追加できます。 IGenericTypeProvider
インターフェース。 これにより、ユーザーが多数の種類を登録したい場合に、時間と労力を大幅に節約できます。
重要
インターフェイスを利用するには、アプリケーションに次の名前空間を含めます。 Alachisoft.NCache.Runtime.GenericTypesProvider
これを実装するには、ユーザーは以下を実装する必要があります。 GetGenericTypes
メソッドを使用して、必要なジェネリック型を返します。 Type
配列。 この後、このクラス アセンブリを NCache 管理センターを選択します。 NCache Management Center は、 Type
配列。 サンプルコードを以下に示します。
重要
パラメーター化されたコンストラクターを必要とするクラスをコンパクトなシリアル化用にマークする場合は、そのクラスにデフォルトのコンストラクターが含まれていることを確認してください。
public class CustomGenericType<T, K, V>
{ }
public class SetGenerics : IGenericTypeProvider
{
Type[] types = new Type[6];
Type[] IGenericTypeProvider.GetGenericTypes()
{
types[0] = typeof(Dictionary<string, Customer>);
types[1] = typeof(List<int>);
types[2] = typeof(CustomGenericType<Employee, Product, Customer>);
types[3] = typeof(CustomGenericType<Employee, Product, int>);
types[4] = typeof(CustomGenericType<Employee, string, byte>);
types[5] = typeof(CustomGenericType<string, Customer, bool>);
return types;
}
public bool CheckIfSerializable(Type type, FieldInfo fieldInfo)
{
// Implement logic
}
}
トラブルシューティング
コンパクトシリアル化の例外
CompactSerializableタイプが登録されていないノードでSerialization例外が発生する場合があります。
回避方法
コンパクトシリアル化可能を登録 クラスター内のすべてのノードでタイプします。
も参照してください
。ネット: Alachisoft.NCache。ランタイム 名前空間