0

全て、

クロニクル マップに時系列を保存しようとしています。シリーズはチャンクに分割され、各チャンクは個別のマップ エントリです。エントリが Chronicle Map に現在書き込まれている間 (BytesMarshaller がシリアル化されている間)、JVM が終了するとどうなるか誰かが知っているかどうか疑問に思っています。

メモリ マップされたファイルは破損したデータになってしまいますか?? 回避策はありますか??

4

1 に答える 1

0

新しいエントリが Chronicle Map に配置されると、これは単一のアトミック操作によってコミットされます。私はe。put 操作中に任意の時点で JVM が終了すると、次の影響が発生する可能性があります。

  • map.size()out 実際のデータと同期する場合は +-1
  • メモリ リーク (エントリの格納に使用されるメモリ)

しかし、あなたが持っていないことが保証されています:

  • 破損したエントリ (JVM が終了したときに配置されていた)、間違ったキーまたは正しいキーに対して間違った値が配置された、どのような方法でも観察可能: キーのクエリでも繰り返しでもありません
  • JVM が終了する時点ですでにマップに存在していたその他のエントリはすべて破損しています。
  • 同じファイルにマッピングされた Chronicle Map インスタンスのコントラクト/動作の変更はありません。JVM 内のインスタンスと並行して終了するか、その後 (JVM が再起動されたときなど) にのみマッピングされます。特に、JVM の終了時に配置されていたキーを使用してエントリを問題なく配置できます。

一方、Chronicle Map バージョン 3.x に関して重要なことは、そのような JVM が終了した後、エントリが配置されていた Chronicle Map セグメントがロックされることです。ロック状態を手動で消去するか、対応する API が追加されるまで待つことができます。これは Chronicle Map 2.x の場合ではなく、 2 秒間待機してロックを取得します。

于 2015-08-17T18:02:35.917 に答える