14

複数のスレッドがオブジェクトをキューに入れるメモリ境界キューがあります。通常、キューは、キュー内のアイテムを処理する単一のリーダースレッドによって空にされる必要があります。

ただし、キューがいっぱいになる可能性があります。そのような場合、ディレクトリをスキャンしてそのようなファイルを探し、ファイル内のエントリを処理する別のバックグラウンドリーダースレッドによって処理される追加のアイテムをディスク上に保持したいと思います。私はActiveMQに精通していますが、より軽量なソリューションを好みます。「FIFO」に厳密に従わなくても問題ありません(永続化されたエントリが順不同で処理される可能性があるため)。

そこにオープンソースソリューションはありますか?何も見つかりませんでしたが、自分で実装に着手する前に、このリストにpingを送信して提案を求めたいと思いました。

ありがとうございました!

4

7 に答える 7

6

SQLLiteのようなものを使用してオブジェクトをに格納できます。

于 2010-06-30T23:06:21.833 に答える
6

http://square.github.io/tape/とその印象的な QueueFile を見てください。

(Brian McCallister の "The Long Tail Treasure Trove" を教えてくれてありがとう)。

于 2014-01-28T15:43:55.573 に答える
3

EHCacheはディスクにオーバーフローする可能性があります。それはまた非常に同時ですが、あなたは本当にそれを必要としません

于 2010-06-30T23:05:25.180 に答える
1

キュー要素をファイルに保持するために、berkleydbjavaエディションを埋め込むことができます。

ここで実際の例を見ることができます: http ://sysgears.com/articles/lightweight-fast-persistent-queue-in-java-using-berkley-db

お役に立てれば

于 2011-03-03T11:09:44.587 に答える
1

キューが制限されているのはなぜですか? 動的に拡張可能なデータ構造を使用しないのはなぜですか? これは、ディスクを使用するよりもはるかに簡単に思えます。

編集: より多くの文脈がなければ、あなたの質問に答えるのは難しいです.

「メモリ不足」の意味を明確にできますか? 行列の大きさは?どのくらいのメモリを持っていますか?

メモリが非常に少ない組み込みシステムを使用していますか? または、キューに 2 GB 以上のものがありますか?

どちらかが当てはまる場合は、BTree のような「スワップ可能な」データ構造を使用する必要があります。1 つのキューに 1 つの自分自身を実装するのはやり過ぎのように思えます。SQL lite のような組み込みデータベースを使用するだけです。

どちらも当てはまらない場合は、ベクターまたはリンクリストを使用してください。

編集 2: おそらく BTree やデータベースは必要ありません。リンクされたページのリストを使用できます。しかし、繰り返しますが、これは必要ですか?

または、物事を非シリアルに処理したい場合は、常に複数のリーダー スレッドを用意してみませんか?

最終的には、あなたの提案が正しいとは思いません。

于 2010-06-30T23:30:39.957 に答える
1

MapDB は、ディスク ストレージまたはオフヒープ メモリによってサポートされる同時マップ、セット、およびキューを提供します。高速で使いやすい組み込み Java データベース エンジンです。

https://github.com/jankotek/MapDB

http://www.mapdb.org/

于 2015-05-15T19:00:48.727 に答える