java项目有一个需求:需要读取并解析xml文件里面的文本内容,抽取出来形成数据库表的数据格式的数据(有40多张表),在插入到数据库的过程中有一部分表要获取前面记录的id作为父id,整个数据条数会达到一万以上级别的水平。我现在做的功能程序就是简单的将读取到的文本信息通过不断循环的方式往数据库里面插入,整个过程很慢,起码要5分钟以上。有没有大神有好的处理方法或建议能够尽量缩短处理数据过程的时间,希望分享一下,不胜感激。
首先采取多线程的方式,批量处理1万的数据,让他们解析为对象放入list中,然后mysql 直接操作一次批量查询即可。有性能 也减少了数据库连接io
一万也不多吧。。。看看是不是代码有问题。比如有很多string+=这样的操作,有就换成stringbuilder。有没有地方的循环没必要或者太多了。不然的话就把文本分成好几份,分多个线程同时做
插入数据本来耗时很少,问题出在你的数据处理逻辑上。本人建议如下:
1、不要把数据处理与数据插入同时进行;
2、id不可采用数据库自增,采用java生成;
3、先过滤一遍数据,在过滤数据时将父id放入子关系数据里;
4、将所有数据采用批量插入的方式添加到数据库
另外还有一种方式多线程,将数据分成多份,分别开启线程执行。
如有问题,可随时交流。
数据不多,数据先全部读到内存再批量写数据库
方法太多了,先说核心点
1. 插入一定采用批量操作,降低IO
2. 数据的读取应该是按需读取,也就是说一个业务操作只读取该业务所需的数据
第一条不用多说,重点是第二条读取。插入的相关表多达40多张,不可能一个业务涉及这么多表,所以按业务,进行表分割。然后从xml或非关系型数据库中读取
具体实现:
方案1:引入mongodb 先将xml读取到mongo中,然后按需查询数据,再执行插入,然后清空mongo
方案2:将xml数据一次性读取到内存中,通过java进行组织处理,然后批量插入
数据体量10万以内应该不会超过5秒
数据体量1万左右应该不会超过1秒
java处理很快的,你的慢估计是出在操作数据库上,你试试不要一条一条的去插入,
试试批量插入,比如每1000条插入一次