我们有不定期的数据流和数量,我无法预测。我目前将commit-interval设置为1,因为我们希望在收到数据后立即写入数据。我们有时会一次获得大量的项目(一秒钟内大约1000-50000个项目),我想用更大的块来提交,因为单独编写这些项目需要一段时间。有没有办法在commit-interval上设置超时?
目标:我们将commit-interval设置为10000,我们获得9900个项目,1秒后它会提交9900个项目,而不是等到它再收到100个项目。
目前,当我们将commit-interval设置为大于1时,我们只看到等待写入的数据,直到达到commit-interval指定的数量。
答案 0 :(得分:0)
您的数据如何流入?是否被加载到工作台?添加到队列?通常,您只需将工作表或队列排干,然后执行最佳的提交间隔,然后定期重新运行作业以检查是否已收到新的一批入站记录。
无论哪种方式,我通常会利用流量控制来使您的作业循环,并且只处理准备好在给定时间间隔内处理的记录:
<job id="job">
<decision id="decision" decider="decider">
<next on="PROCESS" to="processStep" />
<next on="DECIDE" to="decision" />
<end on="COMPLETED" />
<fail on="*" />
</decision>
<step id="processStep">
<!-- your step here -->
</step>
</job>
<beans:bean id="decider" class="com.package.MyDecider"/>
然后你的决策者会做这样的事情:
if (maxTimeReached) {
return END;
}
if (hasRecords) {
return PROCESS;
} else {
wait X seconds;
return DECIDE;
}