2012-05-04 2 views
1

これはおそらく不可能ですが、私はそれを試してみると思っていました。私はいくつかのデータを処理するいくつかの仕事を持っています。それは、保持する、捨てる、変更する/再処理する(それがわからない/捨てるという)それぞれのデータで3つの決定を下します。再処理によってデータが多くの異なる部分に分割される可能性があるため、非常に大量のデータが生成されます。ハードドライブにダンプしてメモリ使用量を低く抑えるJavaローカルキューライブラリがありますか?

私の最初の方法は、データを処理していたexecutionserviceに送信することでしたが、処理するアイテムの数が多かったため、非常に速くメモリが使い果たされることになりました。それから、うまく動作するメッセージングサーバー(rabbitmq)にキューをオフロードすることにしましたが、今はネットワークIOに縛られています。 rabbitmqについて私が気に入っているのは、メッセージを一定のレベルまでメモリに保存してから古いメッセージをローカルドライブにダンプすることです。サーバーに8ギガバイトのメモリがあれば、まだ100ギガバイトのメッセージキューを持つことができます。

私の質問は、Javaに似た機能を持っているライブラリはありますか?私は、(アイテム数またはサイズの数で)キュー内のX項目のみを保持し、残りの部分をローカルドライブに書き込むノンブロッキングキューとして使用できます。

注:今は、これを1台のサーバーでのみ使用するように求めています。将来的にはサーバーを追加するかもしれませんが、各サーバーがデータを自己生成しているので、あるキューからメッセージを取り出し、あるサーバーのキューが空の場合は別のキューにメッセージをプッシュしようとします。ライブラリはネットワークにアクセスする必要はありませんが、別のJavaプロセスからキューにアクセスする必要があります。私はこれが長いショットであることを知っていますが、誰もがそうであることを知っていれば思った。

+0

Apache ActiveMQはオープンソースでJavaで書かれた別のMQサーバです。私は組み込みサービスとして使用できると信じています。 –

答えて

1

あなたが探しているアプローチがわかりませんが、hsqldbのような軽量データベースとhibernateのような永続性レイヤーを使用しないのはなぜですか?メッセージをメモリに保存し、ディスクに保存するためにdbにコミットし、後で便利なSQLクエリを使用してメッセージをクエリすることができます。

0

実際、Cuevasが書いたように、HSQLDBは​​解決策になる可能性があります。提供された「キャッシュテーブル」を使用する場合は、使用するメモリの最大量を指定することができ、データを超えるとハードドライブに送信されます。

0

ファイルシステムを使用してください。それは古い学校ですが、多くのエンジニアが怠け者であるため図書館で噛まれてしまいます。 HSQLDBは​​多くの付加価値機能を提供していますが、軽量であるという文脈では.......

関連する問題