我已经写了一些关于数据上传的基准。我希望IgniteDataStreamer
比putAll(...)
更快(或相等),但是,除了这种情况:
服务器节点数:5
缓存备份:1
写入同步模式:FULL_SYNC
数据流式传输允许覆盖: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
,社区将至少在原子缓存方面查看是否有进行内部优化的空间。