在每次迭代时序列化地图

时间:2017-11-28 12:54:25

标签: java serialization

我有一个ConcurrentHashMap,它存储更新此ID时的ID和时间戳。 这个数据是持久的,因为应用程序重启时应该知道调用关闭时数据的先前状态。 我目前正在将映射序列化为关闭时的文件,并在应用程序重新启动时将其加载回来。

但是我可以预见,当磁盘已满时,关闭时的序列化会失败。这意味着数据丢失是不可接受的。 我想过使用数据库来存储数据,但是每次更新都会增加网络权重。

现在我唯一想到的是在每次更新时序列化地图。这样可以确保即使在意外关闭的情况下磁盘已满,大多数数据也是持久的。

我知道这是一项繁重的操作,并且对替代解决方案持开放态度。

另请注意,此地图可能包含超过1200K条目......

提前致谢

1 个答案:

答案 0 :(得分:1)

如果您的方案允许一些数据丢失,则可以使用一个解决方案

1.定期保存哈希映射的快照,以便最多可以在该时间间隔内丢失数据。

2.对于严格的情况,您可以记录您的操作,以便您可以重播并获取原始值。并且当日志添加结束并且读取较少可能不是性能命中。日志基础技术用于像zookeper for meta数据存储。

3.或者你可以通过批量使用队列和进程异步地持久化到某种数据库。