由于我们要做一个功能,因为数据的获取,并不是匀速的,而是不定的,数据会不停的,非匀速的,
类似无界流,不停的过来数据,我们需要让数据在队列中,每个一个固定的时间,或者固定的数量,来保存一次,而每次保存会根据endofbatch,disruptor的endofbatch来进行保存一次,当endofbatch是true的时候就需要进行一次,数据的保存,生成一个数据文件.
那么虽然是数据每隔一段时间过来的,或者是每隔固定数量的数据过来的,这里,出现了一个问题,
就是如果数据是每隔一定固定数量过来的,那么出现了问题,如果比如数据是每100条就会存一次,也就是,如果数据:dataIndex - ringbuffer.getCursor,这个游标是100了,大于等于100了,就进行,publish.
ringBuffer.publish(ringBuffer.getCursor,dataIndex).发布一次数据,数据消费端就会立刻进行数据保存,但是如果数据,每隔100,每隔100,来的数据太快了,那么就会出现,一个文件,保存了200条数据的情况,也就是,本来每隔100,过来100条的,也就是每隔100,endofbatch就是true一次,但是虽然每隔100进行发布一次数据,但现在出现了,200条才endofbatch才是true一次.这是什么原因呢?
是什么决定了endofbatch的,true还是false,经过多次测试,知道,就是发布数据publish数据的,间隔,如果时间间隔太近,比如小于300毫秒,那么可能这个过程,虽然是分了两次publish的数据,但是这个过程中,endofbatch可能一直都是false,所以修改办法很简单,就是在publish数据的时候,先进行,
TimeUnit.MILLISECONDS.sleep(300),测试过了,必须大于等于300毫秒,才能区分开,不同机器配置可能不一样,需要自己配置.
关于我们设计的这个自动保存数据的disruptor的结构会在另一个文章中说.
编辑
留言与评论(共有 0 条评论) “” |