如何使用文件持久化 Chronicle Map 实现事务行为
How to achieve transaction behaviour with file persisted Chronicle Map
所有,
我正在尝试将时间序列存储在 Chronicle Map 中。该系列被分成块,每个块都是一个单独的地图条目。我想知道是否有人知道如果当前正在将条目写入 Chronicle Map 时 JVM 退出会发生什么(当 BytesMarshaller 正在序列化时)?
内存映射文件会以损坏的数据结束吗?有解决办法吗??
将新条目放入 Chronicle Map 时,这是通过单个原子操作提交的。 IE。如果 JVM 在任意时刻退出,在 put 操作期间,您可能会遇到以下影响:
map.size()
如果与实际数据同步,+- 1
- 内存泄漏(用于存储条目的内存)
但你保证不会拥有:
- 损坏的条目(在 JVM 退出时被放置)、错误的键或为正确的键放置的错误值,可以通过任何方式观察到:既不是通过查询键也不是通过迭代
- JVM 退出时已经存在于映射中的任何其他条目已损坏。
- 对于任何 Chronicle Map 实例没有 contract/behavioral 更改,映射到同一个文件,与退出的 JVM 中的实例并行,或者仅在退出之后映射(例如,当 JVM 再次启动时) ).特别是,您将能够毫无问题地放入带有密钥的条目,该密钥在 JVM 退出时被放入。
另一方面,关于 Chronicle Map 版本 3.x,有一件重要的事情是,在这样的 JVM 退出之后,一个 Chronicle Map 段(条目被放入其中)将被锁定.您可以手动清除锁定状态,或等待 when corresponding API is added。 Chronicle Map2.x不是这样,等待2秒后抢锁
所有,
我正在尝试将时间序列存储在 Chronicle Map 中。该系列被分成块,每个块都是一个单独的地图条目。我想知道是否有人知道如果当前正在将条目写入 Chronicle Map 时 JVM 退出会发生什么(当 BytesMarshaller 正在序列化时)?
内存映射文件会以损坏的数据结束吗?有解决办法吗??
将新条目放入 Chronicle Map 时,这是通过单个原子操作提交的。 IE。如果 JVM 在任意时刻退出,在 put 操作期间,您可能会遇到以下影响:
map.size()
如果与实际数据同步,+- 1- 内存泄漏(用于存储条目的内存)
但你保证不会拥有:
- 损坏的条目(在 JVM 退出时被放置)、错误的键或为正确的键放置的错误值,可以通过任何方式观察到:既不是通过查询键也不是通过迭代
- JVM 退出时已经存在于映射中的任何其他条目已损坏。
- 对于任何 Chronicle Map 实例没有 contract/behavioral 更改,映射到同一个文件,与退出的 JVM 中的实例并行,或者仅在退出之后映射(例如,当 JVM 再次启动时) ).特别是,您将能够毫无问题地放入带有密钥的条目,该密钥在 JVM 退出时被放入。
另一方面,关于 Chronicle Map 版本 3.x,有一件重要的事情是,在这样的 JVM 退出之后,一个 Chronicle Map 段(条目被放入其中)将被锁定.您可以手动清除锁定状态,或等待 when corresponding API is added。 Chronicle Map2.x不是这样,等待2秒后抢锁