2017-11-08 8 views
0

クロニクルキュー(SingleChronicleQueue)を使用してメッセージを記録する準備をしています。プロトタイプは今すぐ動作しています。しかし、私たちにはいくつかの問題があります。クロニクルキュー - 読者の変更msg

読者はメッセージを変更できますか?私たちはクロニクルマップを使用して、再起動後に重複したメッセージを削除するために読み取ったインデックスを記録します。これがうまくいかない場合は、読者側で読んだメッセージにタグを付ける必要があります。実際にはすでにそれを行っています。問題は現在時々、 "15c77d8be(62)was 8000003f was 3f"のようなエラーメッセージが表示されることがあります。キャッシュラインの境界を越えた書き込みが今や原子的ではないためです。それを解決するために推奨される方法は何ですか?現在、メッセージの前に1バイトのタグを追加し、3バイトのパディングを追加して問題を解決しますか?

独自のロールポリシーを使用できますか? 1時間ごとのポリシーを使用したいと考えています。しかし、1時間ごとのポリシーでは、2億5600万件未満のエントリを含むファイルが要求されています。カスタムロールサイクルを使用できますか?注意点はありますか?

答えて

0

一般的なアプローチの1つは、消費者の読み取りインデックスを別の出力キューに記録することです。再起動時には、単に出力キューの最後から読み込んで、各コンシューマの読み取りシーケンスを決定します。

コードが表示されていないと、既存のレコードを変更しようとすると何が問題になるかを特定するのは少し難しくなります。キューに挿入されたレコードは不変であることに注意してください。それらをリーダースレッドから変更することはサポートされていません。

https://github.com/OpenHFT/Chronicle-Queue/blob/master/src/main/java/net/openhft/chronicle/queue/RollCycles.java#L27

:あなたのRollCycle要件に関して

、LARGE_HOURLYサイクルは、最近〜できるように、サイクルあたり20億個のエントリを追加しました。

関連する問題