これは不可能かもしれませんが、私はそれを試してみるかもしれないと思いました。私はいくつかのデータを処理するいくつかの仕事を持っています、それはそれが処理する各データで3つの決定をします:保持、破棄または変更/再処理(保持/破棄することが確実でないため)。再処理によってデータが多くの異なる部分に分割される可能性があるため、これにより非常に大量のデータが生成されます。
私の最初の方法は、データを処理していた実行サービスにデータを送信することでしたが、処理するアイテムの数が多かったため、メモリがすぐに不足していました。次に、キューをメッセージングサーバー(rabbitmq)にオフロードすることにしました。これは正常に機能しますが、現在はネットワークIOに拘束されています。私がrabbitmqで気に入っているのは、メッセージを特定のレベルまでメモリに保持し、古いメッセージをローカルドライブにダンプするため、サーバーに8ギガのメモリがある場合でも、100ギガのメッセージキューを保持できることです。
だから私の質問は、Javaで同様の機能を持つライブラリはありますか?X個のアイテムのみを(アイテムの数またはサイズのいずれかで)キューに保持し、残りをローカルドライブに書き込む非ブロッキングキューとして使用できるもの。
注:現在、これを1台のサーバーで使用することのみを求めています。将来、サーバーを追加する可能性がありますが、各サーバーは自己生成データであるため、あるサーバーのキューが空の場合は、あるキューからメッセージを取得して別のキューにプッシュしようとします。ライブラリはネットワークにアクセスする必要はありませんが、別のJavaプロセスからキューにアクセスする必要があります。私はこれがロングショットであることを知っていますが、誰かがそれを知っていればそうなるだろうと思いました。