1

これは不可能かもしれませんが、私はそれを試してみるかもしれないと思いました。私はいくつかのデータを処理するいくつかの仕事を持っています、それはそれが処理する各データで3つの決定をします:保持、破棄または変更/再処理(保持/破棄することが確実でないた​​め)。再処理によってデータが多くの異なる部分に分割される可能性があるため、これにより非常に大量のデータが生成されます。

私の最初の方法は、データを処理していた実行サービスにデータを送信することでしたが、処理するアイテムの数が多かったため、メモリがすぐに不足していました。次に、キューをメッセージングサーバー(rabbitmq)にオフロードすることにしました。これは正常に機能しますが、現在はネットワークIOに拘束されています。私がrabbitmqで気に入っているのは、メッセージを特定のレベルまでメモリに保持し、古いメッセージをローカルドライブにダンプするため、サーバーに8ギガのメモリがある場合でも、100ギガのメッセージキューを保持できることです。

だから私の質問は、Javaで同様の機能を持つライブラリはありますか?X個のアイテムのみを(アイテムの数またはサイズのいずれかで)キューに保持し、残りをローカルドライブに書き込む非ブロッキングキューとして使用できるもの。

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

4

3 に答える 3

1

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

于 2012-05-04T15:48:56.513 に答える
0

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

于 2012-05-04T16:07:44.757 に答える
0

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

于 2017-10-02T23:11:35.740 に答える