带有allowOverwrite的IgniteDataStreamer比putAll慢?

问题描述 投票:1回答:1

我已经为数据上传编写了一些基准。我希望IgniteDataStreamerputAll(...)更快(或相等),但确实是,但这种情况除外:

  • 服务器节点数:5
  • 缓存备份:1
  • 写入同步模式:FULL_SYNC
  • 数据流化器允许覆盖:true
  • 默认的其他数据流传输器设置

结果是:

[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

java ignite gridgain
1个回答
0
投票

很容易解释。如果allowOverwritefalse,则数据流媒体将通过individual cache.put methods发送数据。这种方法比标准cache.putAll慢得多。不知道为什么数据流处理程序至少在这种情况下不能对原子高速缓存使用putAll(对于事务高速缓存避免死锁,单独cache.puts是有意义的)。我将与社区一起检查可能的优化方案。

allowOverwrite等于true一样,直接存储主副本和备份副本并在适当位置进行更新的流媒体reaches out all the nodes。对于您的群集,如果所有数据都适合5批,则应仅导致5个网络请求(从应用程序到每个节点)。

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

© www.soinside.com 2019 - 2024. All rights reserved.