求大神分享大数据批量导入校验提案

求大神分享大数据批量导入校验方案
需求:从TXT文件导入到数据库表A。A表数量级1000W,有主键ID,等其他10个字段。每个TXT文件约1000-10000条记录,导入需要校验主键ID重复及其他字段合法性。对于不合法和重复的数据,生成另一个文本Err.TXT供用户下载。

目前遇到的问题:
导入数据的时间很小(1秒内),但校验使用的时间太大(50秒以上),使用内存较多,性能太差。
------解决方案--------------------
感觉校验重复ID不用自己去查数据库校验,LZ将可以插的记录都像数据库进行插入,ID如果有重复数据库自己会报错

还有另一块就是校验的合法性 可能要看具体情况,比如有些数据由范围限制,就那么几个量的话  LZ可以把合法的数据存入缓存,以后针对该数据的校验直接判断缓存就好了
------解决方案--------------------
在新建一个临时表   SqlBulkCopy 大批量导入、瞬秒
------解决方案--------------------
先批量导入到数据库的临时表中,临时表的结构和目标表相同,然后分析临时表的数据,如果有问题都能精确到提示哪一行有错。
------解决方案--------------------
主键ID重复及其他字段合法性用数据库里的唯一索引(主键必然是唯一的)和表约束来做
这样你程序只管往数据库里插就好了,完成后接收出错信息,再进行后续操作
------解决方案--------------------
其它字段的合法与否不敢保证,但找出主键或某个字段数据重复是可以的

表的ID先把主键去掉,然后先不用考虑对与错,都直接导入到表中,最后再去用

row_number() OVER(PARTITION BY 主键或其它字段) as rownum 进行查找rownum>=2的数据为重复数据
------解决方案--------------------
引用:
Quote: 引用:

其它字段的合法与否不敢保证,但找出主键或某个字段数据重复是可以的
表的ID先把主键去掉,然后先不用考虑对与错,都直接导入到表中,最后再去用
row_number() OVER(PARTITION BY 主键或其它字段) as rownum 进行查找rownum>=2的数据为重复数据


目前也是先导入一个Pre表,是用INTERSECT校验系统ID的重复,用group by having count来判断导入数据自身的ID重复,你的方法也是可以的。对于其他字段的校验,我目前也是用数据库脚本批量检查,这是我所能想到的最快方法了,但感觉还不够好。


还有数据可以都先保存到DataTable中,DataTable设置主键,内存的话要比数据库快得多,就是对于1千W的数据就不好说了
------解决方案--------------------
好贴,顶起,加分
------解决方案--------------------
建个临时表,先把数据放到另是表中,在根据自己的业务逻辑处理