これはおそらく不可能ですが、私はそれを試してみると思っていました。私はいくつかのデータを処理するいくつかの仕事を持っています。それは、保持する、捨てる、変更する/再処理する(それがわからない/捨てるという)それぞれのデータで3つの決定を下します。再処理によってデータが多くの異なる部分に分割される可能性があるため、非常に大量のデータが生成されます。ハードドライブにダンプしてメモリ使用量を低く抑えるJavaローカルキューライブラリがありますか?
私の最初の方法は、データを処理していたexecutionserviceに送信することでしたが、処理するアイテムの数が多かったため、非常に速くメモリが使い果たされることになりました。それから、うまく動作するメッセージングサーバー(rabbitmq)にキューをオフロードすることにしましたが、今はネットワークIOに縛られています。 rabbitmqについて私が気に入っているのは、メッセージを一定のレベルまでメモリに保存してから古いメッセージをローカルドライブにダンプすることです。サーバーに8ギガバイトのメモリがあれば、まだ100ギガバイトのメッセージキューを持つことができます。
私の質問は、Javaに似た機能を持っているライブラリはありますか?私は、(アイテム数またはサイズの数で)キュー内のX項目のみを保持し、残りの部分をローカルドライブに書き込むノンブロッキングキューとして使用できます。
注:今は、これを1台のサーバーでのみ使用するように求めています。将来的にはサーバーを追加するかもしれませんが、各サーバーがデータを自己生成しているので、あるキューからメッセージを取り出し、あるサーバーのキューが空の場合は別のキューにメッセージをプッシュしようとします。ライブラリはネットワークにアクセスする必要はありませんが、別のJavaプロセスからキューにアクセスする必要があります。私はこれが長いショットであることを知っていますが、誰もがそうであることを知っていれば思った。
Apache ActiveMQはオープンソースでJavaで書かれた別のMQサーバです。私は組み込みサービスとして使用できると信じています。 –