開発者は、ある時点でクライアントとサーバー間の通信を高速化するのに苦労したに違いありません。 ネットワークのオーバーヘッド、遅延、および遅延は常に大きな懸念事項であり、すべてがXNUMXつの質問に帰着します– どうすればリクエストをスピードアップできますか? 時間の経過とともに多くのソリューションが見つかりましたが、ここで焦点を当てている答えは、圧縮とコンパクトなシリアル化です。 あなたにとって幸運なことに、 NCache 効率的な圧縮と動的なコンパクトなシリアル化技術を提供します(参考までに、これらは両方とも異なるものです)。 このブログでは、両方の必要性とそれらの使用方法について説明します。
動的コンパクトシリアル化
NCache ネイティブの.NETシリアル化形式のサポートを提供しますが、独自のシリアル化フレームワークも提供します。 コンパクトなシリアル化。 コンパクトシリアル化もバイナリシリアル化ですが、 NCache このシリアル化フレームワークにより、より多くの柔軟性が提供されます。 コンパクトなシリアル化は、データ全体のサイズを縮小するのではなく、ネットワーク上を移動するデータのサイズを縮小するだけです。 ネットワークトリップが高速になり、コストが削減されるため、より優れた機能を実現できます。
次に、動的コンパクトシリアル化の利点と、ネイティブの.NETシリアル化よりも柔軟である方法を見てみましょう。
コンパクトなデータサイズ
In NCache、バイナリシリアル化されたデータはサイズがコンパクトです。 シリアル化すると、これらのオブジェクトは実際のデータサイズのXNUMX分のXNUMXになることがあります。 サイズが小さいほど、データがネットワーク上を移動する速度が速くなるため、パフォーマンスが向上します。 さらに、データがよりコンパクトになると、キャッシュサーバー上の占有スペースが少なくなり、メモリ効率も向上します。
コードを変更する必要はありません
データをコンパクトにシリアル化するために、コードを変更する必要はありません。 管理ツールを使用してシリアル化可能なデータを選択するだけです(NCache Webマネージャーまたは NCache PowerShellツール)。 NCache データのすべてのシリアル化を内部で処理するため、コードを変更する必要はありません。
選択的シリアル化
選択的シリアル化とは、どのデータをシリアル化する必要があり、どのデータを非シリアル化としてマークする必要があるかをユーザーがすべて制御できることを意味します。 クラス内で、シリアル化する属性を選択できます。たとえば、データベース接続オブジェクトを非シリアル化のままにしておきたいとします。 他の属性をシリアル化して、目的のデータをシリアル化しないようにすることができます。
シリアル化するデータをきめ細かく制御するために、ICompactSerializableインターフェイスが実装されています。 これにより、データと選択的なシリアル化を大幅に制御できます。 カスタムクラスには、によって呼び出されるシリアル化/逆シリアル化メソッドが必要です NCache オブジェクトをシリアル化/逆シリアル化します。 以下のコード例を見て、ICompactSerializableインターフェイスがどのように実装されているかを確認してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
public class Customers : ICompactSerializable { private string _name; private int _id; private string _company; public Customers() { } public Customers(string customerName, int customerID, string companyName) { _name = customerName; _id = customerID; _company = companyName; } #region ICompactSerializable Members public void Deserialize(CompactReader reader) { _name = reader.ReadObject() as string; _id = reader.ReadInt32(); _company = reader.ReadObject() as string; } public void Serialize(CompactWriter writer){ writer.WriteObject(_name); writer.Write(_id); writer.Write(_company); } #endregion } |
NCache コンパクトなシリアル化のためにジェネリッククラスを登録することもできます。 ジェネリッククラスを登録するには、XNUMXつの方法があります。 NCache WebManagerまたはIGenericTypeProviderインターフェイスを介して。
ステップ1: 介して NCache Webマネージャ
ジェネリッククラスは次を使用して登録できます NCache 以下に示すWebマネージャ:
ステップ2:IGenericTypeProviderを介して
これを実装するには、ユーザーはGetGenericTypesメソッドを実装し、目的のジェネリック型を配列として返す必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class CustomerPurchaseDetails<T, K, V> { // implement logic } public class CustomerPurchaseImpl : IGenericTypeProvider { Type[] types = new Type[6]; Type[] IGenericTypeProvider.GetGenericTypes() { types[0] = typeof(Dictionary<string, Customer>); types[1] = typeof(List); types[2] = typeof(CustomerPurchaseDetails<Order, Product, Customer>); types[3] = typeof(CustomerPurchaseDetails<Order, Product, int>); types[4] = typeof(CustomerPurchaseDetails<Order, string, byte>); types[5] = typeof(CustomerPurchaseDetails<string, Customer, bool>); return types; } public bool CheckIfSerializable(Type type, FieldInfo fieldInfo) { // implement logic } } |
この後、このクラスアセンブリをに展開します NCache Webマネージャー。 NCache Web Managerは、Type配列に入力されたすべての型を登録します。
コンパクトなシリアル化ドキュメント ジェネリッククラスを登録する 非ジェネリッククラスを登録する
圧縮
によって提供される別の効果的な技術 NCache is データ圧縮 ここで、圧縮形式のデータがキャッシュに追加されます。 最大の利点は、圧縮されたデータが非圧縮のデータよりも占有するスペースが少なく、多くのメモリを節約できることです。 これにより、読み取り/書き込み操作のネットワークコストが削減されます。 したがって、節約できるのは、圧縮を使用するだけで、ネットワークコスト、時間、およびメモリを効率的に使用できることです。
NCache GZip圧縮を使用してデータを圧縮します。 特定のしきい値を決定し、圧縮を有効にすると、しきい値を超えるすべてのアイテムが圧縮されます。 圧縮データと非圧縮データ、およびそれぞれのメモリ使用量を比較しました。 下のグラフで結果を見ることができます。 青い線は圧縮データを使用したメモリ消費量を示し、オレンジ色の線は非圧縮データを使用したキャッシュのサイズを示しています。
圧縮が有効になっている場合、圧縮は通常、サーバー側だけでなくクライアント側でも発生します。 両言語で サーバー側とクライアント側。
- クライアント側の圧縮 サーバーからクライアントによって要求されるすべてのアイテムに適用されます。 サーバーはデータを圧縮してクライアントに送信し、クライアントは圧縮されたデータを受信するとデータを解凍します。 同様に、しきい値を超えるアイテムの場合、クライアントからリモートサーバーに送信され、データは圧縮された形式で送信されます。
- サーバー側の圧縮 しきい値を超えるすべてのアイテムに対して発生し、キャッシュスタートアップローダーなどのサーバー側機能によってデータソースからロードされます。 これらのアイテムは、次の場所で圧縮されます。 NCache データソースからサーバーを受信した後。
圧縮を使用するには、圧縮を有効にするだけで、XNUMXつの効果的な方法があります。
方法1:NCaheWebManagerを使用する
以下のgifは、を使用して圧縮を有効にする方法を示しています NCache Webマネージャー:
方法2:構成を使用する
にインストールされている構成ファイル NCache 名前付きのインストールディレクトリ config.ncconf 圧縮を有効または無効にするタグが含まれています。 方法をお見せしましょう:
1 |
<compression enabled="true" threshold="500kb"/> |
enabledタグは、圧縮を有効にする場合はtrueに設定され、圧縮を無効にする場合はfalseに設定されます。 また、しきい値タグを提供し、提供された値を超えるデータのみが圧縮されます。
まとめ
結論として、圧縮とコンパクトなシリアル化は、アプリケーションのパフォーマンスを向上させるための非常に効果的な手法です。 これらの機能を使用して有効にすることも非常に簡単です NCache 管理ツール。 NCache コードを変更することなく、これらすべてを実現できます。 参照してください NCache 他のクールなものをチェックするためのドキュメント NCache 機能。