1

私の Java ベースの Web アプリケーションは、リモートの WSDL Web サービスと対話しています。

サービス固有の WSDL リクエストを作成します。この WSDL リクエストを HTTP クライアントで発行すると、WSDL レスポンスが返されます。

私の状況では許容できるので、パフォーマンスと帯域幅の使用を最適化するために、WSDL 応答をキャッシュして、次に同じ要求を発行するときに、Web アプリケーションが持続データベースから応答を直接ロードできるようにしたいと考えています。

を使用するJAXB.marshalJAXB.unmarshal、シリアライズされた XML 形式と「Java オブジェクト表現」の両方で応答の表現を取得できます。そこで、整列化された XML 表現を永続化するデータベースをセットアップするというアイデアを思いつきました。しかし、典型的な応答の XML ファイル表現は、私の場合は簡単に 200 キロバイトになります。XML ファイルでわかっているように、このサイズは XML の冗長性に大きく関係しており、データベース容量の使用とデータベースの読み取り/書き込み速度の両方を最適化するために、おそらく大幅に削減できます。

WSDL 応答をキャッシュして永続化する効率的な方法はありますか? つまり、関数のマップを実装する良い方法を探しています f(someWSDLRequest) -> someWSDLResponse

4

1 に答える 1

2

キャッシュするには、キーと値が必要です。この場合、値は明らかに SOAP サービスからの応答です。

キーについては、パラメーターを文字列に連結するか (これは以前に何度も見たことがあります)、リクエストで MD5 ハッシュを実行してみませんか。これにより、キャッシュキーが小さくシンプルになり、リクエストが同じであれば常に同じになります。

キャッシュ内に応答がある要求が届いたら、それを処理します。

存在しない場合は、データベースから取得し、キャッシュに入れてから提供します。

基になるオブジェクト (キャッシュされた応答) が変更された場合は、キャッシュを無効にするか、有効期限を設定して時間の経過とともに発生させます。

于 2013-02-03T02:02:02.533 に答える