0

all,

I am trying to store time series in Chronicle Map. The series are split into chunks, and every chunk is a separate map entry. I am wondering if anybody knows what is going to happen if JVM exits while an entry is currently being written to the Chronicle Map (while a BytesMarshaller is serialising)??

Would the memory mapped file end up with corrupt data?? Is there a work around??

4

1 回答 1

0

当将新条目放入 Chronicle Map 时,这是由单个原子操作提交的。IE。如果 JVM 在任意时刻退出,在 put 操作期间,您可能会遇到以下影响:

  • map.size()out 如果与实际数据同步,+- 1
  • 内存泄漏(用于存储条目的内存)

但你保证没有

  • 损坏的条目(在 JVM 退出时被放置)、错误的键或为正确键放置的错误值,可通过任何方式观察到:既不是通过查询键也不是通过迭代
  • 在 JVM 退出时已经存在于映射中的任何其他条目已损坏。
  • 任何 Chronicle Map 实例都没有契约/行为变化,映射到同一个文件,与 JVM 中退出的实例并行,或仅在此之后映射(例如,当 JVM 再次启动时)。特别是,您将能够将条目与 JVM 退出时放置的键一起放置,而不会出现任何问题。

另一方面,关于 Chronicle Map 3.x 版,有一件重要的事情是,在这样的 JVM 退出后,将要锁定条目所在的 Chronicle Map 段。您可以手动清除锁定状态,或等待添加相应的 APIChronicle Map 2.x 不是这种情况,它会等待 2 秒并获取锁。

于 2015-08-17T18:02:35.917 回答