我已经为数据上传编写了一些基准。我希望IgniteDataStreamer
比putAll(...)
更快(或相等),但确实是,但这种情况除外:
结果是:
[putAll(...)
速度:126630 /秒
[data streamer
速度:每秒30430]
[如果不允许覆盖或0个备份+ PRIMARY_SYNC数据流传输器的速度比预期的要快(大约两倍)。
因此,Ignite的性能提示使用了数据流传输中断?有什么可能的原因以及如何避免数据流传输速度变慢?
基准代码段:
for (int i = 0; i < size; i++) {
pojoMap.put(String.valueOf(i), pojo);
}
cache.putAll(pojoMap);
vs
igniteDataStreamer.allowOverwrite(false);
for (int i = 0; i < size; i++) {
igniteDataStreamer.addData(String.valueOf(i), pojo);
}
igniteDataStreamer.flush();
Gridgain CE 8.7.6
很容易解释。如果allowOverwrite
为false
,则数据流媒体将通过individual cache.put methods发送数据。这种方法比标准cache.putAll
慢得多。不知道为什么数据流处理程序至少在这种情况下不能对原子高速缓存使用putAll
(对于事务高速缓存避免死锁,单独cache.puts
是有意义的)。我将与社区一起检查可能的优化方案。
与allowOverwrite
等于true
一样,直接存储主副本和备份副本并在适当位置进行更新的流媒体reaches out all the nodes。对于您的群集,如果所有数据都适合5批,则应仅导致5个网络请求(从应用程序到每个节点)。
总体上,使用allowOverwrite=true
进行初始数据加载。对于allowOverwrite=false
,社区将至少在原子缓存方面查看是否有进行内部优化的空间。