9.11. 基于密钥的 rehash aware operators


迭代器拆分 器和 各方面 都与其他终端操作员不同,重新哈希意识必须跟踪正在处理的每个网段的哪些键,而不是只是片段。这是为了保证,即使在集群成员资格更改下,也要保证一次(iterator 和 spliterator)或至少一次的行为(用于每个)。

当远程节点上调用时, 迭代 器和拆分 器操作器将返回条目批处理,其中下一个批处理仅在最后一次被完全使用后发回。执行此批处理来限制给定时间内存中有多少个条目。用户节点将保存它已处理哪些密钥,并且当给定片段从内存释放这些密钥时。这就是为何优先处理迭代器方法,因此仅一次性在内存中保存一个片段键子集,而不是从所有节点保存。

forEach () 方法也会返回批处理,但它会在处理至少批量键后返回批处理密钥。这样,原始节点可以知道已处理哪些密钥已经被处理,以减少再次处理同一条目的几率。不幸的是,当节点意外停机时,至少可以有一次行为一次。在这种情况下,节点可能已被处理,尚未完成一个,并且在重新哈希失败操作时会再次运行那些在已完成的批处理中未完成的批处理中。请注意,添加节点不会造成这个问题,因为在收到所有响应前不会发生 rehash 故障转移。

这些操作批处理大小均由相同的值控制,可以通过调用 CacheStream 上的 distributedBatchSize 方法来配置。这个值默认为在状态传输中配置的 chunkSize。不幸的是,这个值会因内存使用量和至少一次性能而换取,而您的错误性可能有所不同。

迭代器 与复制和分布式缓存结合使用

当某个节点是分布式流中所有请求片段的主要或备份所有者时,Data Grid在本地执行 迭代器分割 器终端操作,这会在远程迭代更密集的情况下优化性能。

这个优化适用于复制和分布式缓存。但是,当使用 共享 并启用了 write-behind 的缓存存储时,Data Grid 远程执行迭代。在本例中,远程执行迭代可确保一致性。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat