我需要为这个案子制定一个解决方案。我有一个这样的表,我必须将共享产品+服务+原产地的寄存器数量减少到可能的最小范围:
ID | PRODUCT | SERVICE | ORIGIN | STARTDATE | ENDDATE |
---|---|---|---|---|---|
1 | 100001 | 500 | 1 | 10/01/2023 | 15/01/2023 |
2 | 100001 | 500 | 1 | 12/01/2023 | 18/01/2023 |
我必须阅读所有记录,并在此过程中检查日期间隔,以统一它们:
- 记录A(2023年1月10日-2023年01月15日)记录B(2023月1日-2022年1月18日)这将导致使用ID1日期更新寄存器,从而在两个日期和寄存器之间留下较大的范围:2023年10月1日-2023年01月18日(必要时扩展到其中一个范围的“右”或“左”)
其他情况:|ID|PRODUCT|SERVICE|ORIGIN|STARTDATE|ENDDATE||--------|--------|--------|---------|---------|--------|1|100001|500|1|2023/10/2023|15/01/2023||2|100001|500|1 |2023/12/01/2023|12/01/2023 |14/01/2023|
- 在这种情况下,Record1的日期范围最大,我们应该删除Record2。
- 当然,删除重复的日期范围
现在,我们已经实施了一个分块步骤,使之成为可能:
- 读卡器:按公共字段读取数据排序(产品服务来源)
- 处理器:保存在HashMap<;字符串,列表>;在工作上下文中,所有的寄存器,而“产品+服务+原产地”的组合是相同的。当检测到新的组合时,获取当前列表并进行大量比较,将记录辅助财产标记为“delete”或“update”,并将完整列表发送给编写器(之前在映射中使用新的公共字段组合开始创建其他列表)
- 编写者:将要删除和更新的记录分组,并调用子编写者执行句子。
好吧,这是几年前的软件,但很快我们必须控制每个案例的大量记录,在JobContext中使用地图的“解决方案”必须改变。
我在想SpringBatch是否有一些我可以使用的特性来处理这类情况。
无论如何,我正在考虑更改插入所有这些记录的步骤,并在处理器中进行一对一的日期范围检查,但我认为这里的提交间隔必须为1,以允许每个寄存器检查所有先前处理的寄存器(当我们执行此作业时,表基本为空)。提交间隔中的其他值将在bbdd中进行检查,但不会在先前处理的项目中进行检查。
- 所有这些案例都可以有0-n条记录共享产品+服务+原产地。
对不起,我的英语,很难用其他语言解释。