最近闲来无事。提到并发的数据量的问题,便想亲自动手进行测试一下,以便对系统的并发量大小能有一个大概的概念。于是搭建出了简易的测试环境对hibernate的缓存进行性能的测试,了解缓存在实际项目中所起的作用。
测试依据:对表的某条记录进行查询效率高低
准备环境: DB: mysql LR :100虚拟用户并发:
测试场景1:无背景数据
I. 加hibernate缓存
II 未加hibernate缓存
分析:可以看出。在无数据的情况下,100虚拟用户并发,hibernate是否添加缓存并没有影响到系统的性能。处理的数据相差并不算太大。
8万数据以下左右,mysql的处理速度相对比较快,并不会构成什么瓶颈。所以,mysql的处理数据能力还是很强大的。
测试场景2:12万背景数据情况下
批量导入数据的时候,记得及时提交事务或者使用addBatch()方法,可以提交插入速度。
I.加hibernate缓存
II.未加hibernate缓存:
服务器CPU使用率短时间内窜到100%。可以大概推测出系统的资源没有及时的释放。排除其它影响因素后,得出数据库查询一块,单个查询花费的时间过长。因此导致请求不断的被阻塞,系统的资源开销突然增大。
分析:有背景数据情况下,两者的处理速度完全不在同一个级别上面的。
在这个时候,就需要对mysql进行监控了,对mysql数据库或代码进行相关的优化。比如使用存储过程代替部分复杂的业务、增加索引、增大线程连接数、临时表空间、数据库的缓存大小‘修改不必要的逻辑等来提升数据库处理方面 的性能。
结论: 查询情况下,对于数据量比较大的系统,尽量多使用hibernate的缓存。对于系统的性能提升,效果非常明显。
扩展:如果对数据的操作(增删改),是否也需要使用hibernate缓存呢。使用缓存会不会有什么作用呢,另外,并发的插入数据呢,是否会造成脏数据呢。这些需要再进行扩展测试,需要验证一下,才能得出结论。