組織が同じクラスの異なるバージョンを使用する異なるアプリケーションを持っているのは現実です。なぜなら、それらは異なる時点で開発され、追いつくことができないからです。 また、これらのアプリケーションが相互にデータを共有する必要があることも事実です。
これはデータベースを介して行うことができます。 ただし、これは低速でスケーラブルではありません。 あなたが本当に望んでいるのは、 分散キャッシュ これは高速でスケーラブルです。 ただし、実行時のオブジェクト共有では、バージョンの互換性の問題がすぐに発生します。
これを行うXNUMXつの方法は、あるバージョンのオブジェクトを別のバージョンに変換できるXMLを使用することです。 しかし、それは非常に遅いです。 もうXNUMXつの方法は、あるオブジェクトバージョンを取得し、それを別のバージョンに変換する独自のカスタム変換を実装することです。 しかし、これを維持する必要があり、それはあなたにとって多大な努力です。
分散キャッシュがバージョンの互換性を何らかの形で処理してくれたら素晴らしいと思いませんか? 上手、 NCache まさにそれをします。 NCache 異なるバージョン間のバイナリレベルのオブジェクト変換を提供します。 XML構成ファイルを介してさまざまなバージョンをマップできます。 NCache あるバージョンから別のバージョンに変換する方法を理解しています。
さらに、 NCache これらのさまざまなバージョンをすべて(XMLではなく)バイナリ形式で保存するため、データサイズは非常にコンパクトで小さいため、高速に保たれます。 トラフィックの多い環境では、オブジェクトサイズが合計されると、帯域幅が大量に消費され、それには独自のコストがかかります。
以下はその例です NCache クラスバージョンマッピングを使用したconfig.ncconf:
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 |
<cache-config name="myInteropCache" inproc="False" config-id="0" last-modified="" type="clustered-cache" auto-start="False"> ... <data-sharing> <type id="1001" handle="Employee" portable="True"> <attribute-list> <attribute name="_Name" type="System.String" order="1"> <attribute name="_Age" type="System.Int32" order="2"> <attribute name="_Address" type="System.String" order="3"> <attribute name="_ID" type="System.String" order="4"> <attribute name="_PostalAddress" type="System.String" order="5"> </attribute></attribute></attribute></attribute></attribute></attribute-list> <class name="DataModel.Employee:1.0.0.0" handle-id="1" assembly="DataModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="_Name" type="System.String" order="1"> <attribute name="_Age" type="System.Int32" order="2"> <attribute name="_Address" type="System.String" order="3"> </attribute></attribute></attribute></class> <class name="DataModel.Employee:2.0.0.0" handle-id="2" assembly="DataModel, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="_ID" type="System.String" order="4"> <attribute name="_Name" type="System.String" order="1"> <attribute name="_Age" type="System.Int32" order="2"> <attribute name="_PostalAddress" type="System.String" order="3"> </attribute></attribute></attribute></attribute></class> </type> </data-sharing> ... </cache-config> |
どのように NCache それ?
上記のconfig.nconfファイルでは、Employeeクラスに最初に定義された一連の属性があることがわかります。 これらはバージョンに依存しない属性であり、すべてのバージョンに表示されます。 これは実際には、さまざまなバージョンで表示されるすべての属性のスーパーセットです。 その下で、バージョン固有の属性を指定し、それらを上記のバージョンに依存しない属性にマップします。
Employeeバージョン1.0.0.0のサブセットを含むEmployeeバージョン2.0.0.0を保存したとします。 これで、別のアプリケーションが同じ従業員をフェッチしようとしたが、バージョン2.0.0.0として表示したい場合、 NCache データを入力するバージョン2.0.0.0の属性と、空白のままにする属性を認識しています。
次に、上記のサンプル構成では、バージョン2.0.0.0にアドレスフィールドが含まれていても、従業員バージョン1.0.0.0にはアドレスフィールドが含まれていないことがわかります。 したがって、この場合、 NCache キャッシュに保存されているEmployee1.0.0.0を読み取ろうとし、それをEmployeeバージョン2.0.0.0に変換しようとします。この新しいバージョンにはアドレスフィールドがないため、アドレスフィールドをコピーしないことがわかります。
他にも多くのシナリオがあります NCache シームレスに処理します。 詳細については、オンラインの製品ドキュメントをお読みください。
最後に、このすべての最良の部分は、これを使用するためにシリアル化コードを記述したり、アプリケーションにコードを変更したりする必要がないことです。 NCache 特徴。 NCache は、実行時にクラスのメモリ内シリアル化および逆シリアル化コードを生成し、非常に高速なコンパイル済みフォームを使用するランタイムコード生成メカニズムを実装しました。
要約すると、 NCache アプリケーションコードを変更することなく、アプリケーション間で異なるオブジェクトバージョンを共有できるようになりました。