Hazelcast分区丢失行为与初始模式=" LAZY / EAGER"

时间:2017-05-17 11:09:32

标签: java caching hazelcast hazelcast-imap

我想知道 initial-mode =" LAZY / EAGER" 如何在分区丢失时表现。

根据在线文件 EAGER - 同步加载条目。发生这种情况时,对getMap()的调用被阻止

我需要知道在以下场景中如何加载丢失的分区......

1)当另一个节点中存在备份时,节点崩溃并丢失分区

  • 会丢失从DB或备份加载的分区数据吗?
  • 如果这是从DB加载的,那么初始模式=" LAZY / EAGER"影响地图 加载?
  • 将丢失的分区迁移到其中的节点 备份可用,或者可以完全迁移 新节点?

2)当另一个节点中没有任何备份时,节点崩溃并丢失分区

  • 在这种情况下,将从DB
  • 加载丢失的分区数据
  • 初始模式=" LAZY / EAGER"当没有任何备份时影响地图加载?

当初始模式=" LAZY" , 分区丢失后,我可以看到它在另一个节点中重新定位,我认为只有分区创建没有数据

enter image description here

在此图像中,您可以看到分区ID 87丢失,并且即时分区夏季显示它在另一个节点中重新定位

62-(LOM:FE44) = partionID - (分区键)

1 个答案:

答案 0 :(得分:2)

首先让我们先了解备份选项之间的根本区别: 同步 - 默认1 [备份计数] 异步 - 默认为0 [async-backup-count]

默认情况下,我们有很强的一致性,因为: 客户端map.put(foo) - >主要两个线程:T1操作线程存储在主分区上,而T2存储在备份上。 T1和T2在返回客户端之前加入。因此,一旦从map.put返回,数据就会安全地存储在两个位置。

如果您将[backup-count]设置为0并且[async-backup-count]> 0,那么您将具有最终的一致性,因为在返回之前T1和T2将加入给客户;相反,一旦T1完成,服务器将返回客户端。

现在让我们来看看你的问题: 1)当另一个节点中有备份时,节点崩溃并丢失分区 会丢失从DB或备份加载的分区数据吗? 我们还没有讨论过MapStore(这是将数据存储到数据库的几种方法之一),但是如果你已经实现了Map Store,那么在高速缓存未命中时它将从那里恢复。

如果从DB加载,初始模式=“LAZY / EAGER”如何影响地图加载? Lazy只会加载分区数据(默认情况下是数据的1/2/17)而不是Eager,它会加载完整的地图(271/271的数据)

丢失的分区是否会迁移到备份可用的节点,还是可以迁移到全新的节点? 备份将立即从丢失的服务器恢复分区。现在是主要的备份将请求新的备份。

2)当另一个节点中没有任何备份时,节点崩溃并丢失分区 如果您未能设置[backup-count]和[async-backup-count]以及MapStore并且您没有使用HotRestart,那么您只是丢失了数据。但是你必须改变我们的默认值才能创造这种情况。

在这种情况下,将从DB加载丢失的分区数据 当没有任何备份时,initial-mode =“LAZY / EAGER”如何影响地图加载? 它再次确定将加载多少地图数据,如果您有一个地图存储,则表示将在您的数据库上调用多少加载(密钥)。

希望这有帮助,