如何在不丢失保存在内存中的TreeMap的情况下重新启动应用程序



在Spring Boot应用程序中,我在内存中保存一个TreeMap。我每秒大约做10000次手术,而且可能还会增加。为了提高性能,我将数据保存在内存中。我希望我的应用程序能够在应用程序重新启动时从相同的状态启动。

我可以找到一些方法。

  1. 保持Hazelcast的数据。在这种情况下,除非Hazelcast死了,否则我不会冒丢失数据的风险,但如果Hazelccast死了,我就无法恢复数据。此外,我认为在Hazlecast上同步这么多操作是没有意义的。

  2. 正在将事件同步到数据库。在这里,我的数据丢失风险非常低。但是,我需要在每次操作之后执行一个查询。这可能会影响性能。此外,我需要处理数据库更新的异常。

  3. 批量同步数据我在这里只能找到一个现成的解决方案,MapDB。我打算试试,但我还没试过。如果有一个更可靠、优化的接收器解决方案也使用db而不是文件,我更喜欢使用它

有解决这个问题的建议吗?

您需要Map还是TreeMap?排序顺序与存储、访问或两者都不相关。

对于Hazelcast,数据丢失的机会是可配置的。你建立了一个具有你想要的弹性水平的集群。这与磁盘相同,如果您有一个磁盘出现故障,则会丢失数据。如果你有两个,其中一个离线,你不会丢失数据。您可以根据所需的弹性级别分配硬件。三个是建议的最小值。

(每秒10000也不令人担忧,已经完成了1000000000。与外部存储的同步可以是立即的,也可以是批量的(

免责声明,我为Hazelcast工作,但我认为你的问题更根本——你如何保持你的商店可用。

简单地说,不要重新启动。集群解决方案就是答案。如果您有多个节点,即使有几个节点离线,服务也会作为一个整体保持运行。做滚动弹跳。

如果必须一次重新启动所有内容,重要的是您的服务恢复所有数据的速度有多快,以及当恢复完成50%时(50%的数据可见吗?(该怎么办。只有当您的群集解决方案没有针对恢复能力进行配置时,才真正需要立即复制到其他位置。如果你已经解决了弹性问题,间歇性储蓄是可以的。

因此,配置您的存储,使其不会脱机,从而使备份/恢复的解决方案选项更加容易。

相关内容

最新更新