多语言展示
当前在线:603今日阅读:162今日分享:23

java 大数据插入解决方案

java 大数据插入怎么解决呢?下面就跟小编一起来看一看吧。
工具/原料

PC

方法/步骤
1

java 大数据插入怎么解决呢?下面就跟小编一起来看一看具体的操作吧。

2

比如批量单次插入1000条和单次插入200条,其实是五倍性能差距。

3

但是这个批量插入的条数是根据数据库缓存大小设置而决定的,数据库缓存不可能太大,比如一个8G的服务器,数据库缓存建议最大200M等,单次插入条数最大上限是2000条每次,如果有5000w行数据,那么需要多少次数据连接呢?答案是:2.5万次连接,我天,可想而知,能不慢吗?连接数据库,每次都有通过网络访问,然后数据库有行级锁,再提交事务,单次连接如果1s,那么2.5万次连接就是2.5万s,一小时是3600s,那么需要多少个小时呢

4

1,多线程多线程就是,将串行的方式,改成并行,比如:排队去食堂打饭,就一个窗口,这是串行排队去食堂打饭,但是有多个窗口共同执行,你可以在任何一个窗口排队,并行。并行增加了效率,提高了打饭速度,随之而来的问题也很多。那就是并发问题。A人付款了,准备拿饭缸接住饭,这时候,由于并发,B人的没有付款,但是售货员把饭打到了B人的饭缸,造成了A付了款而没有收到饭,或者A可能收到了C人的饭,C收到了D的饭,乱套了。解决这个方法,java当然也有解决方案,呵呵。Synchronized神方法,不错,但是有一个问题,我们要对非原子的逻辑都要加Synchronized,所以方法块,或者干脆加到方法上。言归正传,拥多线程并不能解决我们的问题,因为我们这个读取的方法,就这么一个,里面大多数都是非原子的逻辑,加载方法上,不管你启多少个线程,效果和串行一样,因为只有一个线程获取了锁,并且执行,而且速度也不快,所以这个方法解决不了问题

5

2,多进程这个方法咋拥,其实就是把上面的方法,比如A 我们复制多个,分别叫A A1 A2 A3这里就有了4个方法,但是不能同时读取一个文件吧,这样数据会重复,有人会说数据库强加唯一索引,我说如果数据杂乱无章,没有主键呢?这样就考虑将大文件切割,切割拥linux的split命令,见我下一篇文章,会有详细的解释比如我们把文件F切割成 F1 F2 F3 F4然后A方法读F1 入库A1 读F2入库A2 读F3入库A3 读F4入库这样我们可以启动4个进程,代码虽然缀余,但这不是我们讨论的重点,我们是讨论如何解决之,那么我们发现,这样的话,效率会增大,但是不会太明显,为什么,此时虽然说2.5万次连接,分了4个进程去连接,一个进程去执行2.5w除以4次连接,同时进行,相当于多线程,但他是多线程,但为什么效果不明显,原因是数据库有行级锁,虽然同时连接的效率高了,但是对于数据库来说,处理插入是按照队列来的,是吧。这样瓶颈就在数据库的行级锁,那么此时就没有办法了。

注意事项

如果看不懂,请教专业人员。

推荐信息