发表于: 2018-03-18 22:27:37
1 460
今天完成的事情:
好吧,今天把任务的第27步做完了
做了多次试验
第一次,单条数据插入,插入1w条数据,有索引和没有索引各插入了一次,
有索引的时候平均一秒12条数据,没有索引的时候平均一秒11条
第二次,批量数据插入,因为mybatis的批量插入没弄好,报了好多次BindingException错误
进行了几次10条数据插入,没有索引,总用时分别是18秒,4秒,22秒
第三次,批量数据插入,插入1w条数据,没有索引,分别是28秒和5.9秒
第四次,批量数据插入,插入100w条数据,有索引的情况下176秒,没有索引是163秒
第五次,本地测试批量插入100w数据,有索引的情况下98秒,没有索引42秒
结论:
首先,倒着看,本地插入数据的时候,没有索引的情况下比有索引的情况要快一倍,
再看远程连接的时候,可以看到每次的速度波动都非常大,应该是本地与远程服务器连接的波动太大(免费的服务器....).
印证了mysql的索引是影响插入效率的,但是索引却能够加快查找的速度,在之前的日报中提到(有索引查询本地1000w数据时是0.01秒,没有索引12秒)
遇到的问题:
今天遇到十分多的问题,有编写错误的,有内存爆掉的
首先说BindingException错误,这个是在编写mybatis批量插入的时候出现的问题,这个其实是粗心大意犯下的(学得也不够全面)
首先看看正确的代码
在看看错误的代码
很容易发现,是因为漏了item.当然,parameterType和Collection也是非常重要,这两个属性写错了同样会导致BindingException错误
第二个是内存爆掉 java.lang.OutOfMemoryError
一开始写的循环是循环添加100w个学生信息,再批量提交,运行了两遍都是内存溢出.
后来做了两个循环,循环一万条数据提交一次,循环100次,同样是插入100万的数据,但是就不会再出现内存溢出了.
收获:
虽然是用Spring+mybatis来写的dao,但是今天主要的操作是mybatis,所以说是对mybatis的使用更加了解了,
以及,索引的原理理解更深刻:建立索引相当于mysql自建一张索引表,所以插入的时候有索引的话就等于在插入两张表,所以会比没有索引的时候要慢许多,
但是查询的时候却会快很多,因为可以直接搜索引表,搜该条数据再链原来的表中获得数据,就不用整个表去查找数据,大量数据的时候速度就会明显不一样
明天计划的事情:
1.测试一下连接DB中断后TryCatch是否能正常处理。
2.测试一下不关闭连接池的时候,在Main函数里写1000个循环调用会出现什么情况。
3.添加数据返回ID,删除或更新数据返回True/False
然后整理下思路,因为从17步起,好像把任务步骤乱了,所以理清自己对哪些步骤已经彻底完成,哪些还需要完善,哪些还没动手
评论