9.11. 基于密钥的重新哈希了解操作符
迭代器、分割 器和每个 终端运算符都与重新哈希感知器不同的是,必须跟踪每个网段处理了哪些键,而不是仅段段。这是为了保证一次(迭代器和分割器)或至少一次行为(对于每个),即使在集群成员资格发生变化下也是如此。
在远程节点上调用时,迭代
器和 分割
器运算符将返回条目的回滚批处理,其中下一个批处理仅在最后一个完全被完全使用后发回。完成此批处理是为了限制给定时间在内存中有多少条目。用户节点将保存在其处理哪些密钥以及给定片段完成时,将从内存中释放这些密钥。这就是为什么在迭代器方法中使用顺序处理的原因,因此仅在内存中保存片段密钥的子集,而不是来自所有节点。
per ()
方法也会返回批处理,但在处理至少批处理后,它会返回批处理密钥。这样,原始节点可以知道已经处理了哪些密钥,以减少再次处理同一条目的几率。不幸的是,这意味着当节点意外停机时,至少有一次行为。在这种情况下,节点可能已经处理批处理,而还没有完成其中一个和这些条目,但还没有在完成的批处理中会在重新哈希失败时再次运行。请注意,在收到所有响应前,添加节点不会导致这个问题,因为重新哈希故障转移不会发生。
这些操作批处理的大小都由相同的值控制,这可以通过调用 CacheStream
上的 distributedBatchSize 方法进行配置。这个值将默认为在状态传输中配置的 chunkSize
。不幸的是,这个值会权衡内存用量与性能,至少一次,您的鼠标可能会有所不同。
将 迭代器
与复制和分布式缓存一起使用
当节点是分布式流的所有请求片段的主要或备份所有者时,Data Grid 在本地执行 迭代
或 分割
器终端操作,这会优化性能,因为远程迭代更为资源密集型。
此优化适用于复制和分布式缓存。但是,在使用 共享
并启用了 write-behind
的缓存存储时,Data Grid 会远程执行迭代。在这种情况下,远程执行迭代可确保一致性。