大量のRSSフィードを解析し、それぞれからタイトルと説明要素のテキストを抽出する時間的なバッチジョブがある状況がありますフィードあたりのアイテム数を文字列に変換します。JavaとLuceneのRSSフィードから多数の文字列を処理するベストプラクティス
ただし、1文字あたりのフィードまたはアイテムの数はわからないため、各文字列は数千語からなる可能性があります。
私が見てるの基本的な擬似コードは、このようなものであると仮定します
for each feed
for each item within date/time window
get text from title element, concatenate it to title_string
get text from description element,
concatenate it to description_string
calculate top x keywords from title_string
for each keyword y in x
calculate frequency of keyword y in description_string
誰でもメモリ使用量を減らすために、このデータを処理する方法を提案することができますか?これは、各フィードからデータが読み込まれるため、StringBuildersを使用することとは別です。
フィードの内容はデータベースに保存されますが、各フィードに独自のデータベーステーブルがある場合に必要なすべてのIOを避けるために、「オンザフライ」で単語の頻度を計算します。
ありがとうございました。しかしLuceneのフィードからのデータの保存は、このデータがデータベースから利用可能であるというビジネス要件のため、現時点では選択肢ではありません。したがって、Luceneは頻度の計算にのみ使用されます。 –
この場合、ディスクストレージを使用することはできますが、メモリ内ストレージの回答に記載されているようにフルテキストは保持しません。フィードのすべての統計情報にアクセスできると同時に、フルテキストをデータベースに保存する、つまりビジネス要件に合わせることができます。 – ffriend
私が現在計画しているのは、Luceneがメモリ内インデックスを使用してタイトルと説明文字列のテキストの頻度を計算し、ハッシュマップに格納することです。次に、タイトルハッシュマップから最も人気のあるx個のキーワードを使用して、説明ハッシュマップから頻度を取得し、これをキーワードごとの頻度として使用します。この段階では、各フィードの実際のデータはすでにデータベースに格納されています。しかし、Luceneを使用して周波数を保存することは、後で取り上げる必要があるため、依然として選択肢です。アドバイスをありがとう。 –