达梦库批量操作重复数据及唯一主键冲突问题解决思路

背景

实时数据需要批量入历史表,频率高,数据量大。无法保障数据重复问题。之前我们一直用MongoDB,解决重复问题可用唯一索引解决,MongoDB在批插操作时,可以跳过批插过程中失败的数据继续插入。本次系统建设用的是达梦库,当前遇到的问题是批插时,一条失败,无法执行整个批插。网上找了一些资料,Mysql有insert ignor into …做为相应的解决方案。达梦库未到类似操作,网上建议用merge into,即在执行插入时通过判断是否存在违反唯一性原则 ,从而决定用upsert。由 于系统特点历史表数据量大,批插操作频繁,考虑到性能问题,该方法不打算采用。

待解决问题

考虑到数据量问题,历史表禁有重复数据

难点

1.历史表数据量大,按月做了分区,每月量估测在千万级别
2.批插操作频繁,不高于20s一次

思路

引用本地缓存 ,缓存历史数据,每次在入库前通过缓存数据判断去掉重复数据。我们唯一主键是编码类型和实时时间。实时时间会重复。
(1)缓存设 计如 下:
key:code_type;value:realTime 。每次存历史之前可以先去map中找到realTime,如果时间小于等于realTime,则这条移除不保存。
(2)考虑到数据量比较大,可以做个二级缓存。不说了,被催工作了,先上代码供参考吧。

SpringBoot集成 JetCahc

你可能感兴趣的:(java)