带有 allowOverwrite 的 IgniteDataStreamer 比 putAll 慢吗?
IgniteDataStreamer with allowOverwrite is slower than putAll?
我已经写了一些关于数据上传的基准。我希望 IgniteDataStreamer
比 putAll(...)
更快(或等于),而且确实如此,但这种情况除外:
- 服务器节点数:5
- 缓存备份:1
- 写同步模式:FULL_SYNC
- data streamer 允许覆盖:true
- 默认其余数据流设置
结果是:
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
这很容易解释。如果 allowOverwrite
为 true
,则数据流将通过 individual cache.put methods 发送数据。这种方法比标准 cache.putAll
慢得多。不确定为什么数据流在这种情况下不能使用 putAll
至少对于原子缓存(个人 cache.puts
对事务缓存有意义以避免死锁)。我将与社区一起检查可能的优化。
至于allowOverwrite
等于false
,流媒体reaches out all the nodes直接存储主备副本,并在地方进行更新。对于您的集群,如果所有数据都适合 5 个批次,它应该只会产生 5 个网络请求(从应用程序到每个节点)。
总体而言,使用 allowOverwrite=false
进行初始数据加载。至于allowOverwrite=true
,社区将看看是否有任何内部优化的空间,至少对于原子缓存。
我已经写了一些关于数据上传的基准。我希望 IgniteDataStreamer
比 putAll(...)
更快(或等于),而且确实如此,但这种情况除外:
- 服务器节点数:5
- 缓存备份:1
- 写同步模式:FULL_SYNC
- data streamer 允许覆盖:true
- 默认其余数据流设置
结果是:
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
这很容易解释。如果 allowOverwrite
为 true
,则数据流将通过 individual cache.put methods 发送数据。这种方法比标准 cache.putAll
慢得多。不确定为什么数据流在这种情况下不能使用 putAll
至少对于原子缓存(个人 cache.puts
对事务缓存有意义以避免死锁)。我将与社区一起检查可能的优化。
至于allowOverwrite
等于false
,流媒体reaches out all the nodes直接存储主备副本,并在地方进行更新。对于您的集群,如果所有数据都适合 5 个批次,它应该只会产生 5 个网络请求(从应用程序到每个节点)。
总体而言,使用 allowOverwrite=false
进行初始数据加载。至于allowOverwrite=true
,社区将看看是否有任何内部优化的空间,至少对于原子缓存。