功能需求:网页上传csv文件通过DATAX导入数据库
环境:有主备文件同步
导入工具:DataX
问题日志:
验证寻找bug步骤:
1. datax导入1000w行有脏数据
2. 尝试500w,200w,100w,50w,只有50w的可以
3. 尝试减去不同类型文件,只要达到一定大小就会出现脏数据
4. 检查上传到服务器的文件,出现数据缺失
5. 检查python脚本处理替换空值后的文件,检查源文件,无误
6. 尝试scp传输处理完的文件到服务器用datax处理,无误
7. 推测上传时出现丢包
8. 尝试了系统里另一个业务相同的上传逻辑的功能,并没有丢包问题,继续排查
9. 开发排查到是由于文件同步过于频繁(1s/次),在linux中,同时对一个文件进行读写操作造成文件部分数据丢失。即写操作时发现文件被读操作占用,只能等待,但此操作可能失败,在读操作完成后该部分数据即已丢失。
处理方法:
1. 先将文件上传非同步文件的文件夹,再传输到同步文件夹,增加文件同步时间。
2. 对上传的文件进行处理,在未上传完成时处理为临时文件,对于文件同步设置正交条件,临时文件不进行同步,当上传完成后再变更为正常文件进行同步。