2017-05-17 22 views
0

我想知道如何initial-mode =“LAZY/EAGER”行为在一个分区丢失。Hazelcast分区丢失行为初始模式=“LAZY/EAGER”

根据在线文档 EAGER - 同步加载条目。电话设置为getMap()被阻塞而发生这种情况

我需要知道丢失的分区是如何加载在下列情况下,...

1)节点崩溃和丢失的分区时,有在另一个节点

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

2)节点崩溃并且当存在的另一个节点

  • 在这种情况下丢失的分区数据没有任何备份将被从DB
  • 如何初始模式=“延迟加载丢失的分区/ EAGER“在没有任何备份时会影响地图加载?

当初始模式=“懒”, 后立即分区丢失,我可以看到它在另一个节点搬迁,我想这仅仅是分区创建不与数据

enter image description here

在该图像中可以看到的分区ID 87丢失的瞬间分区夏日示出了它的另一个节点重新定位

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

回答

1

首先让通过了解备份选项之间的根本差异开始: 同步 - 默认1备份数] 异步 - 默认0异步备份数]

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

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

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

如果这是从DB加载,初始模式=“LAZY/EAGER”如何影响地图加载? Lazy将仅加载分区数据(默认情况下为数据的1/271)与Eager,它将加载完整的映射(数据的271/271)

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

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

在这种情况下,丢失的分区数据将从DB加载 当没有任何备份时,初始模式=“LAZY/EAGER”如何影响映射加载? 它再次确定将加载多少地图数据,并且如果您有地图存储,则意味着将在您的数据库上调用多少加载(键)。

希望这会有所帮助,