带有 allowOverwrite 的 IgniteDataStreamer 比 putAll 慢吗?

IgniteDataStreamer with allowOverwrite is slower than putAll?

我已经写了一些关于数据上传的基准。我希望 IgniteDataStreamerputAll(...) 更快(或等于),而且确实如此,但这种情况除外:

结果是:

putAll(...)速度:126630每秒

data streamer速度:30430每秒

在不允许覆盖或 0 个备份的情况下+PRIMARY_SYNC 数据流比预期的更快(大约 2 倍)。

原来,Ignite 的性能提示使用数据流中断? 可能的原因是什么以及如何避免数据流变慢?

基准代码片段:

for (int i = 0; i < size; i++) {
    pojoMap.put(String.valueOf(i), pojo);
}    
cache.putAll(pojoMap);

igniteDataStreamer.allowOverwrite(false);
for (int i = 0; i < size; i++) {
    igniteDataStreamer.addData(String.valueOf(i), pojo);
}
igniteDataStreamer.flush();

Gridgain CE 8.7.6

这很容易解释。如果 allowOverwritetrue,则数据流将通过 individual cache.put methods 发送数据。这种方法比标准 cache.putAll 慢得多。不确定为什么数据流在这种情况下不能使用 putAll 至少对于原子缓存(个人 cache.puts 对事务缓存有意义以避免死锁)。我将与社区一起检查可能的优化。

至于allowOverwrite等于false,流媒体reaches out all the nodes直接存储主备副本,并在地方进行更新。对于您的集群,如果所有数据都适合 5 个批次,它应该只会产生 5 个网络请求(从应用程序到每个节点)。

总体而言,使用 allowOverwrite=false 进行初始数据加载。至于allowOverwrite=true,社区将看看是否有任何内部优化的空间,至少对于原子缓存。