Java 加载和持久化Hazelcast分布式映射

Java 加载和持久化Hazelcast分布式映射,java,hazelcast,Java,Hazelcast,我正在使用Hazelcast(3.8.1)作为应用程序中的缓存服务。在经历了这个过程之后,我对它没有什么疑问: 如果我们使用Write-Behind Persistence,这是对其本地队列的异步调用,最终我们将其持久化到db。 我的问题是,如果所有节点都宕机,那么在这种情况下会有数据丢失吗? 注意:据我所知,队列的一个副本也保存在备份节点中。但我的设想是,当所有节点都关闭时,我们会丢失数据吗 hazelcast是否在停机时维护脱机持久性,并在启动时(针对所有节点)加载该持久性 感谢您的回答。对

我正在使用Hazelcast(3.8.1)作为应用程序中的缓存服务。在经历了这个过程之后,我对它没有什么疑问:

  • 如果我们使用Write-Behind Persistence,这是对其本地队列的异步调用,最终我们将其持久化到db。 我的问题是,如果所有节点都宕机,那么在这种情况下会有数据丢失吗?
  • 注意:据我所知,队列的一个副本也保存在备份节点中。但我的设想是,当所有节点都关闭时,我们会丢失数据吗

  • hazelcast是否在停机时维护脱机持久性,并在启动时(针对所有节点)加载该持久性
    感谢您的回答。

    1的回答是显而易见的,适用于任何具有异步写入的内存系统。如果集群中的所有节点都宕机,那么是的,因为系统最终是一致的,所以有可能会丢失数据

    对于问题2:Hazelcast是一种内存缓存,其主要优点就在于此。写入持久性存储或从持久性存储加载应该是次要的,因为它与缓存系统的一些主要属性(速度,我猜…)冲突

    话虽如此,它允许您同步(直写)或异步(后写)

    如果使用Hazelcast的主要原因是复制和分区(持久、一致的数据),那么最好使用NoSql数据库,如Mongodb。这在很大程度上取决于你的使用模式,因为如果你期望读的比写的多得多,这仍然是有意义的


    另一方面,如果您使用它的主要原因是速度,那么您需要的是更好地管理容错,这与您的群集拓扑(可能您应该使用跨数据中心复制)比持久性更相关。除非您有很强的一致性或事务要求,否则关注DC中的“所有节点都将消亡”是一种非典型现象。

    是的,如果数据尚未持久化到数据库中,您将丢失内存中的数据


    OTOH,Hazelcast在企业版中提供了持久化到磁盘的功能。这有助于防止整个集群计划关闭或集群范围内的突然崩溃,例如断电。

    感谢您的回答,它是否确保没有数据丢失?是的,对于计划关闭整个集群或集群范围内的突然崩溃的情况。请注意,对于部分崩溃,将利用内存中备份(或Maploader/MapStore),并且不会采取热重启操作。感谢您的回复。我的场景是,当集群重新启动(最后一个节点死亡)时,Hazelcast中的内容是否会保留在磁盘中的某个位置?