不同形式的数据插入时间效率问题的测试,如何高效率插入数据

来源:互联网 发布:linux 删除文件夹函数 编辑:程序博客网 时间:2024/05/22 04:58

今天闲来无事,忽然想起了多线程很并发的效率问题。于是测试了一下。

去年毕业到现在都没怎么接触多线程和高并发,在不接触说不过去了。

使用电脑环境 win7笔记本 i5处理器,2.5GHz,数据库mysql,spring mvc,采用事务自动管理

1.单线程的测试:简直惨不忍睹,10000条数据一条一条的插入,不停的commit,数据库不停的增加数据。。。。。耗时真的是我无法等下去了。。。。


2.控制层的多线程:10000条数据模拟并发,有操作就启动一个线程,由线程去执行插入操作,当然每启动一个线程之后都会对数据进行一次commit,每一次的commit都会消耗时间。10000条数据插入消耗时间45秒。


3.dao层多线程:10000条数据直接从控制层传到dao层,在dao层进行多线程操作。。。。。我本以为是快一点。。。没想到比上面的消耗的时间长。


4..还有一种效率比较高点,10000条数据。存在这么一种情况,就是当有9000个用户同时发起注册,需要进行数据提交,但是数据不满10000条,我们不进行数据insert,先暂时保存起来。等待1000个人来注册,然后10000条数据插入数据库。插入10000条数据时间为3秒。这样我们进行了一次的commit。

那么假如没有人注册了,那么一直9000条就不提交了嘛?那肯定不行,可以这样操作。当数据满10000条的时候去insert,然后commit。如果不满10000条,那么每10秒去insert,然后去commit。

那么这样还存在一个问题,假如数据存在问题,假如因为没有处理一些null的数据,而数据库不允许有空的数据,无法insert,那么这10000条或者9000条数据全部都需要rollbck吗?那么如何去处理这些数据?为避免出现问题,首先肯定要对数据进行严格的校验,保证数据100%的能插入数据库。那假如出现了roolback的问题,那么怎么解决?不晓得大笑

在上面的基础上,是否可以这样:我们手动来开启和关闭事务,先将10000条数据加载进来,然后来一条数据我们去开一个线程,或许我们可能会开启5个线程去insert,当数据全部都insert之后,然后手动去commit。这样效率会不会更高点?我觉得应该会吧。方法4用的是单线程的insert,然后commit。我想效率应该会高很多。


当然还有很多的细节没有考虑到。比如10000条数据3秒插入,那么假如在3秒中又有10000条数据产生,那么怎么办?还是用多线程去处理这些?我觉得可行,那如何暂时去保存着另外的10000条数据。

算了。。我还是去测试吧。测完了在回来补上



0 0
原创粉丝点击