我编写了一些运行Ignite服务器节点并附加到它的EventListener代码。然后,我将10个元素放入缓存中,并为每个元素记录了在放置元素和捕获其创建事件之间的时间增量。
--当我创建一个服务器节点并在IgniteCache中放置10个元素时,我得到了很好的结果。对于10个元素,它是(millis中的时间差):
ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异- 51 ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异-2 ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异-1 ruslangm.sample.ignite.listener.EventListener与侦听器之间的时间差异-1 ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异-1 ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异-2 ruslangm.sample.ignite.listener.EventListener -时间差异在put和listener之间-2 ruslangm.sample.ignite.listener.EventListener - put与listener之间的时间差异-2 ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异-2 ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异-1
当我添加一个节点时,结果是相同的(拓扑快照为: ver=2、servers=2、clients=0、CPUs=4、heap=3.6GB)。
,但当我将setBackups(1)应用于IgniteCache时,结果变得很奇怪:
ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异- 573 ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异- 573 ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异- 570 ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异- 571 ruslangm.sample.ignite.listener.EventListener - 571 ruslangm.sample.ignite.listener.EventListener - put与侦听器之间的时间差异- 571 ruslangm.sample.ignite.listener.EventListener -时间差异-时间差异在put和listener之间- 571 ruslangm.sample.ignite.listener.EventListener - put和listener之间的时间差异- 561 ruslangm.sample.ignite.listener.EventListener - put和listener之间的时间差异- 560
我创建IgniteCache并附加到它的代码非常简单:
Ignite ignite = Ignition.start("ignite.xml"))
CacheConfiguration<String, Long> cfg = new CacheConfiguration<>();
cfg.setCacheMode(CacheMode.PARTITIONED);
cfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
cfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_ASYNC);
cfg.setName("myCache");
cfg.setBackups(1);
IgniteCache<String, Long> cache = ignite.getOrCreateCache(cfg);
ContinuousQuery<String, Long> query = new ContinuousQuery<>();
query.setLocalListener(new EventListener());
query.setLocal(true);
QueryCursor<Cache.Entry<String, Long>> cursor = cache.query(query);在我的听众中,我只需打印一条消息:
ruslangm.sample.ignite.listener.EventListener - Time diff between put and listener 您可以在github上查看它,它非常简单。
我的问题是:我做错什么了吗?还是Ignite在使用现有备份侦听事件方面真的很慢?
发布于 2018-02-12 15:44:46
由于速度太慢,原因是query.setLocal(true)调用。我只想从同一台机器上的服务器节点接收事件,但这并不是实现性能的最佳方式。
我添加了RemoteFilter并将实现更改为:
final Set<ClusterNode> nodes = new HashSet<>(ignite.cluster().forDataNodes("myCache")
.forHost(ignite.cluster().localNode()).nodes());
qry.setRemoteFilterFactory(new Factory<CacheEntryEventFilter<String, Long>() {
@Override
public CacheEntryEventFilter<String, Long> create() {
return new CacheEntryEventFilter<String, Long>() {
@Override
public boolean evaluate(
CacheEntryEvent<? extends String, ? extends Long> event) throws CacheEntryListenerException {
return nodes.contains(ignite.cluster().localNode());
}
};
}
}); 一切都变得完美了。
https://stackoverflow.com/questions/48712101
复制相似问题