今日の多くの組織は、さまざまな.NETおよびJavaテクノロジーを使用して、さまざまなトラフィックの多いアプリケーションを開発しています。 同時に、これらの組織は、実行時に.NETアプリケーションとJavaアプリケーションの間でデータを共有する必要があります。
データを共有するXNUMXつの方法はデータベースを使用することですが、それは低速であり、拡張性もあまり高くありません。 より良いアプローチは、複数のアプリケーション間の共通データストアとしてメモリ内分散キャッシュを使用することです。 高速で、線形にスケーリングします。
ご存知のように、Javaタイプと.NETタイプには互換性がありません。 したがって、共有するためにデータをXMLに変換することになります。 さらに、ほとんどの分散キャッシュは、.NETとJavaアプリケーション間でデータを共有するための組み込みメカニズムを提供しないか、XMLベースのデータ共有のみを提供します。 キャッシュに組み込みのデータ共有メカニズムがない場合は、XMLスキーマを定義し、サードパーティのXMLシリアル化を使用してすべてのXMLデータを作成および読み取る必要があります。
しかし、 XMLシリアル化 非常に遅く、リソースを大量に消費するプロセスです。 XMLシリアル化には、XMLの検証、解析、変換が含まれます。これは、アプリケーションのパフォーマンスを実際に妨げ、メモリとCPUの観点から追加のリソースを使用します。
分散キャッシュ 設計上、アプリケーションのパフォーマンスとスケーラビリティを向上させるために使用されます。 これにより、アプリケーションはアプリケーションデータをキャッシュし、スケーラビリティのボトルネックを引き起こしている高価なデータベーストリップを減らすことができます。 また、XMLベースのデータ共有は、アプリケーションのこれらのパフォーマンスとスケーラビリティの目標に反します。 アプリケーションのトランザクション負荷を増やすと、XML操作がパフォーマンスのボトルネックになることがわかります。
はるかに優れた方法は、XML変換を行う必要がないバイナリレベルで.NETアプリケーションとJavaアプリケーションの間でデータ共有を行うことです。 NCache は、バイナリシリアル化を使用して.NETおよびJavaアプリケーションを共有するランタイムデータを提供する分散キャッシュです。
どのように NCache .NETとJavaの間でランタイムデータ共有を提供しますか?
その前に、ネイティブの.NETとJavaのバイナリシリアル化に互換性がない理由を理解する必要があります。 Javaと.NETには独自のバイナリシリアル化があり、オブジェクトを独自の方法で解釈します。これらは互いにまったく異なり、型システムも異なります。 さらに、オブジェクトのシリアル化されたバイトストリームには、完全修飾名としてデータ型の詳細も含まれます。これも.NETとJavaでは異なります。 もちろん、これは.NETとJavaの間のデータ型の互換性も妨げます。
この非互換性を処理するには、 NCache .NETとJavaの両方に共通する独自の相互運用可能なバイナリシリアル化を実装しました。 NCache 相互運用可能なバイナリシリアル化 テクノロジー固有の完全修飾名ではなく、.NETとJavaで一貫しているタイプIDに基づいてオブジェクトを識別します。 このアプローチは、相互運用性を提供するだけでなく、生成されるバイトストリームのサイズを削減します。 第二に、 NCache 相互運用可能なバイナリシリアル化は、.NETおよびJavaの実装が簡単に解釈できるような形式でバイトストリームを生成するカスタムプロトコルを実装します。
以下はその例です 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 30 31 |
<cache-config name="InteropCache" 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="Age" type="int" order="1"/> <attribute name="Name" type="java.lang.String" order="2"/> <attribute name="Salary" type="long" order="3"/> <attribute name="Age" type="System.Int32" order="4"/> <attribute name="Name" type="System.String" order="5"/> <attribute name="Salary" type="System.Int64" order="6"/> </attribute-list> <class name="jdatainteroperability.Employee:0.0" handle-id="1" assembly="jdatainteroperability.jar" type="java"> <attribute name="Age" type="int" order="1"/> <attribute name="Name" type="java.lang.String" order="2"/> <attribute name="Salary" type="long" order="3"/> </class> <class name="DataInteroperability.Employee:1.0.0.0" handle-id="2" assembly="DataInteroperability, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="Age" type="System.Int32" order="1"/> <attribute name="Name" type="System.String" order="2"/> <attribute name="Salary" type="System.Int64" order="3"/> </class> </type> </data-sharing> … </cache-config> |
結果として、 NCache 互換性のあるJavaクラスが利用可能である限り、.NETオブジェクトをシリアル化し、Javaで逆シリアル化することができます。 このバイナリレベルのシリアル化は、どのXML変換よりもコンパクトで、はるかに高速です。
最後に、このすべての最良の部分は、この機能をで使用するために、シリアル化コードを記述したり、アプリケーションにコードを変更したりする必要がないことです。 NCache. NCache は、実行時に相互運用可能なクラスのメモリ内シリアル化および逆シリアル化コードを生成するランタイムコード生成メカニズムを実装し、コンパイルされた形式を使用するため、超高速です。
要約すると、 NCache 非常に遅く、リソースを大量に消費するXMLシリアル化を回避することで、アプリケーションのパフォーマンスを拡張および向上させることができます。
だから、完全に機能する60日間の試用版をダウンロードしてください NCache Enterprise 自分で試してみてください。