2012-05-09 13 views
0
  • いくつかの大規模な文書(20〜50メガバイト)は、サーバー側に保存されています。
  • サードパーティ製のプログラムを使用して、ドキュメントを読み込んで照会することができます(約3秒かかる)。
  • サードパーティ製のプログラム(特定のスレッド)によって1つのドキュメントしか読み込めません。
  • クライアントは、ロードされたドキュメントの1つのクエリ結果を表示するよう要求できます。

各クライアントのHTTP要求に応じて文書を読み込み回避する最善の方法は何ですか? これらの読み込まれたドキュメントをすべてメモリに保存するのは理にかなっていますか? 「はい」の場合は、各スレッドがドキュメントを保持しているスレッドプールが必要ですか? いいえの場合、他のオプションは何ですか?処理大きな文書

(ジャワでの作業 - Tomcatの - Ubuntuの)

答えて

1

私はいくつかのキャッシングを行うためにあなたのTomcatの前に別のサーバを置きます。これを自分で実装すれば、問題にぶつかるはずです。セットアップは、次のようになります。あなたはHTTPSが必要な場合は(私が思い出したように)それがSSLをサポートしていないよう

ClientVarnish Caching ServerApache HTTP ServerTomcat

は、あなたはニスの前に別のサーバを置くことを検討してください。そして、それはこのようなことがあります

ClientPoundVarnish Caching ServerApache HTTP ServerTomcat

あなたは、ルール言語のいくつかの種類で広範囲にニスを設定することができます。それはあなたに非常にきれいに役立つでしょう。

ポンドはあなたがSSLおよび/または負荷分散を終了させるために使用できるだけの小さなリバースプロキシです。

リンク:

アパッチ:http://httpd.apache.org/

ニス:https://www.varnish-cache.org/

ポンド:http://www.apsis.ch/pound

0

あなたが外部プログラムによって文書を処理する場合には、テレは、あなたがすることができるということはあまりないです キャッシュ処理の結果はどこかにあります。もう1つの選択肢は、文書を前処理し、すべての可能なクエリー結果を保存して後で取り出すことです。

すべての要求に対して外部プロセスをフォークすることは明らかに最悪の選択です。

データがinsiede web applicatonで処理され、不変の場合、 ファイルをバイトバッファにmmapして再度処理できます。この方法で、ロードを節約し、 のデータをJVMに割り当てます。

そして、あなたのクエリがデータを変更しないので、スレッドを分離するためにそれらをプッシュする必要はありません - 彼らは

+0

直接HTTPリクエストを提供する別のスレッドからのデータにアクセスすることができ、それは時にあるように私は、結果をキャッシュすることはできませんリクエスト:ex :(私にポジション30-40に関する情報を入手してください) これは外部プログラムではなく、 と最終的には と呼ばれるライブラリです。考えられる各ドキュメントについてスレッドを考えています。これらのスレッドは常に稼働しています.HTTPリクエストが来ると、クライアントが要求しているドキュメントに基づいて正しいスレッドを検索します。 – Betamoo

関連する問題