2012-08-13 8 views
7

私は、JavaアプリケーションのJSONメッセージの一時記憶域としてシンプルな永続バッファーを探しています。メモリ使用量は比較的一定で、バッファ内のメッセージ数に依存してはいけません。過去のある時点からのメッセージを再生できるのはいいことです。古いメッセージの削除は効率的でなければなりません。 1mメッセージ/ hを処理できる必要があります。Javaのシンプルな永続メッセージバッファーを探しています

現在のところ、私のアプリケーションは、リモートのRabbitMQブローカにメッセージをシャベルするローカルのRabbitMQブローカを使用しています。リモートブローカが停止しているか、メッセージを受け付けていない場合、ローカルのRabbitMQブローカのメモリ使用量はキューの長さとともに増加し、最終的にはメッセージの受け入れを停止します。リモートのRabbitMQブローカにメッセージをコピーしているローカルディスクベースのバッファとスレッドのためにこれを交換したいと思います。

誰もが考えている?私はカフカを見てきましたが、私のユースケースでは過度のようです。 MongoDBは可能ですが、私はそのメモリ使用量が心配です。

+0

わかりませんが多分Redis?それはパブ/サブもサポートしています... –

+0

redisは速いですが、非常に多くのメモリが必要です。これをチェックしてください。 http://nosql.mypopescu.com/post/1010844204/redis-memory-usage –

+0

https://github.com/peter-lawrey/Java-Chronicleのようなものを考えてみてください。毎秒10Mを超えるメッセージをサポートするように設計されていますが、それらを削除するためにファイルを回転させる必要があります。 –

答えて

2

私はMongoDBをプロダクションに使用しています。同様のソリューション(CouchDB、CouchBase、redis.io)と比較すると、MongoDBはメモリ管理と実装が容易です。しかし、私はRiakをもっと詳しくテストする機会はなかったことを認めています。

メッセージングサービスを使用する残りの/ WebサービスAPIの背後に4つのインデックスフィールドとすべてのユーザーセッションを持つ5.000.000のユーザーレコードを保存しています。

私のメッセージングサービスは、同じサーバー上の別のdbインスタンスを使用します。 私のユーザーレコードには少なくとも20のフィールドがあり、セッションレコードには5フィールドしかありません。 私のubuntuサーバーは、負荷の高いプロセスでも10 GB以上のRAMを使用していませんでした。

これがわかりやすくなることを願っています。

ps:データモデルとインフラストラクチャの実装方法によって異なります。

よろしく、

EDIT:

私はthisメッセージングのためにMongoDBを使用しての良いスライドショーだと思います。

とMongoDBとメッセージングについてはarticleです。

テストコードを使用して、ソリューションに問題がないことを確認できます。 テストの結果を共有することを忘れないでください。

+1

私は必要なリプレイのもので永続的なメッセージキューサーバーを作成しました。チェックアウトhttp // qdb.io / –

関連する問題