2

目前,我有一个支持 MapStore 的 IMap。此 IMap 在启动时加载并具有数百万个条目。当地图完全加载时,客户端使用 Imap.values() 和谓词检索条目。这种加载对我来说在启动时工作得很好。

现在,我必须定期重新加载所有数据(例如,每 2 小时)。我正在使用 IMap.loadAll(true) 强制重新加载。MapStore (loadAllKeys() + loadAll(keys)) 大约需要 4 分钟才能完成完整的加载。似乎在这 4 分钟内,所有通过谓词向 imap 发送查询的客户端都被阻塞,直到重新加载完成。

就我而言,我无法在 4 分钟内阻塞集群(实际上一秒钟都不会)。

  1. 真的是 Imap.loadAll 阻塞了谓词查询吗?
  2. 可以将 imap 配置为非阻塞或存在 IMap.loadAll() 的非阻塞替代方案。

我正在尝试使用 HC 3.7.2,有 2 个节点和 java 8。

4

1 回答 1

1

这是一个合理的用例,但由于几个原因,它目前不受支持。加载发生在分区线程上并因此阻塞它们 - 它提供了一致性,在加载完成之前地图不会提供任何请求。

对于您的“重新加载”用例,它必须不在分区线程上发生,以便可以服务请求。

你能在 github 上创建一个功能请求吗?看起来我们可以在下一个版本中解决。

于 2016-12-15T09:15:27.103 回答