不同形式的数据插入时间效率问题的测试,如何高效率插入数据
来源:互联网 发布: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条数据。
算了。。我还是去测试吧。测完了在回来补上
- 不同形式的数据插入时间效率问题的测试,如何高效率插入数据
- 批量插入数据的效率问题
- Hibernate插入数据效率测试
- sqlite3插入数据效率问题
- mysql 插入更新多条数据的效率问题
- 简单的jdbc操作数据库例子,高效率插入数据
- sql插入数据的方法以及效率
- SQL中往表中插入数据的几种不同形式的小结
- C# 事务高效率插入数据
- 数据插入不成功的问题
- Android 往Sqlitedatabase中插入大量数据效率问题,40倍效率加速你的操作
- 批量插入数据解决我的问题 3G数据插入
- oracle index 大量数据插入效率问题
- 海量数据的插入时间对比
- JDBC批量插入数据的性能测试
- 插入数据sql使用“insert into set”形式的理解
- 提升SQLite数据插入效率低、速度慢的方法
- SQL SERVER 插入大批量数据有无索引的效率对比
- Windows内核原理与实现--Windows进程线程基本概念(1)
- scrollview grid 坑爹的经历
- shell程序设计(3)
- 关于UIView的横竖屏自适应
- 走迷宫
- 不同形式的数据插入时间效率问题的测试,如何高效率插入数据
- openstack中安全方面基础知识介绍及keystone的PKI
- OpenGLES 顶点及纹理缓存绑定的目标是在客户机CPU端还是在服务器GPU端 - 有助于真正理解 OpenGLES 各操作的实质
- 如何完成支付宝的支付功能?
- 黑马程序员_学习笔记第14天集合(一)_List、Set
- ACMjava求解最大连续和的三种方法 暴力枚举,S前缀,回溯法
- C++界面库
- 无限级分类之循环家谱树
- 你可能不知道的编程小问题:预处理、sizeof