上周接到了一个这样的需求,有几千个xml文件需要解析入库,每个文件里边有三万条数据。解析出来后要按表字段,重新组成需要的数据,不能直接将解析后的json入库。
一开始我觉得这个事挺简单的,直接动手写了个demo,用随机选了两个xml文件测一下,没问题,成功入库。从解压xml到最后的数据入库,一个文件大概花费300秒左右。直到我用多进程并发去执行的时候发现,事情并不是我想的那么简单,发现子进程会莫名其妙的结束,开始下个进程了。
突发奇想,我并不是非要用一个主进程下边多个子进程去执行,我可以采用将数据分块,分完之后把程序拷贝多份,单独启动多个程序处理不同的分块数据,这样也可以达到并发效果呀。说干就干,马上调整程序,让每个程序处理100份文件。当我采用这样的方式去并发执行的时候,发现了一个问题,xml文件数据可是并不统一,有些可能会缺少某个字段,有某个字段的数据类型会是另外一种类型,g关键我也不清楚到底哪些字段会缺少,哪些字段类型会有多个。只能采用最笨的办法了,让程序执行把,遇到问题,停下程序修改下字段解析时的容错机制,一步一步,让整个字段解析函数变的能容纳所有的异常,直到他能稳定运行。最后我还是用分别执行多程序去并发处理,没有选择主进程下有多个子进程的方式。
通过上边事情,得到了一个感悟,记录下来。
1.首先就是像对上边这种需要看护的程序,并不一定非亚用主进程下有多个子进程的方式去执行并发,可以选择一个代码逻辑更简单的多个程序分别执行的方式去并发。因为对于子进程处理的事情,总会有意想不到的意外的时候,主进程加子进程的这种方式排查问题的时候并不方便。
2.还有个就是在处理大批量数据的时候,最好是把数据分成多块,分别去执行,不要1将全部数据一起执行。分开执行的一个好处是要是某块数据的处理有问题的时候,我可以单独去调整这一部分,并不会影响到全部,降低影响范围。还有一个就是因为每块数据的数据量比较少,给人的主观感受处理的会比较快。
好了,就这样吧~。
标签:xml,解析,并发,大批量,博客,进程,数据处理,执行,数据 From: https://www.cnblogs.com/yimeimanong/p/17437874.html