有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

  1. 如果我们使用Write-Behind Persistence,这是对其本地队列的异步调用,最终我们将其持久化到db。 我的问题是,如果所有节点都宕机,那么在这种情况下会有数据丢失吗

注意:我知道队列的一个副本也在备份节点中维护。但我的设想是,当所有节点都关闭时,我们会丢失数据吗

  1. hazelcast是否在停机时维护脱机持久性,并在启动时(针对所有节点)加载该持久性

感谢您的回复


共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

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

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

    话虽如此,它允许您同步(直写)或异步(后写)地load from and write to persistent storage

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

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