我想知道 initial-mode =" LAZY / EAGER" 如何在分区丢失时表现。
根据在线文件 EAGER - 同步加载条目。发生这种情况时,对getMap()的调用被阻止
我需要知道在以下场景中如何加载丢失的分区......
1)当另一个节点中存在备份时,节点崩溃并丢失分区
2)当另一个节点中没有任何备份时,节点崩溃并丢失分区
当初始模式=" LAZY" , 分区丢失后,我可以看到它在另一个节点中重新定位,我认为只有分区创建没有数据
在此图像中,您可以看到分区ID 87丢失,并且即时分区夏季显示它在另一个节点中重新定位
62-(LOM:FE44) = partionID - (分区键)
答案 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”如何影响地图加载? 它再次确定将加载多少地图数据,如果您有一个地图存储,则表示将在您的数据库上调用多少加载(密钥)。
希望这有帮助,