程序员程序猿阵线联盟-汇总各类技术干货

MySQL的百万级性能测试——(一)环境搭建与百万级数据插入

2017-11-16  本文已影响0人  志明丶

MySQL——全球最流行的数据库(没有之一,就使用量而言)。

            ——开源数据库。

            ——与mongoDB不同,MySQL是一门关系型数据库。

此系列文章,作者本人将推演至个人毕业设计之中。所以在毕设前,git项目不公开。若有真实的必要需求,请在文章底部联系本人。

转载文章需注明出处,thank you!PS.文章颇显粗糙稚嫩,承望不吝赐教!

性能测试灵感来源:

前几天在读的《深入NOSQL》时,引发一个思考,在庞大的数据中,是否应该思考一下MySQL关联查询的实用性!

深入NoSQL

举一个简单的例子,微博网站,A关注了100个人,B关注了100个人,A和B是好友,那么两个人共同关注了哪些人呢,然后查询显示出来?(在数据量是百万级千万级的情况下)

那么,是否这个时候,使用NOSQL来设计整个数据库更加优越呢?

研究方向:

1.使用批量插入数据快?还是循环一条条插入数据快?两者相差多少?

        (批量插入:关闭事务,等数据全部加入命令列表,再开启事务插入数据)

        (单一插入:一条一条数据插入)

2.数据池的加入对数据插入性能是否有影响?

3.远程数据库与本地数据库插入的差距?

测试环境:

本地机器:CPU:i5-4210U 双核四线程

                  内存:8GB,DDR3L 

                  系统:Windows10专业版 1709版本

本地渣渣本本

服务器:系统:CentOS7.4  64位

              CPU:Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz  单核

              内存:2GB

服务器配置

测试工具:

    开发工具:IDEA 2017.3

    本地MySQL版本:MySQL 5.7.17

    远程MySQL版本:MySQL 5.7.17

    其他:JDK1.8,阿里maven仓库,阿里druid连接池


百万级数据插入:

    ——为了保证数据的精确性,每次数据测试,都将进行三次测试

项目目录结构(后续将加入c3p0、dbcp以及hikaricp连接池的性能测试)

项目目录结构

数据库设计

数据库设计

万级数据的本地插入

    ——druid/local/批量数据插入

总耗时在2.1秒,循环占据0.8秒

万级数据的本地插入

——druid/local/一一数据插入

总耗时在26.5秒左右,循环即插入

总结:万级的数据的本地插入既可以看出,MySQL中用批量插入,性能是一条条数据插入的13倍!

因此在下一级的十万级数据插入,只进行一次一一插入数据的测试。

十万级数据的本地插入

——druid/local/批量数据插入

耗时9秒左右,10倍的数据量,4.5倍性能消耗

十万级数据的本地插入

——druid/local/一一数据插入

耗时265秒!10倍数据量,10倍的性能消耗

总结:十万级的数据本地插入即可以看出,MySQL中用批量插入,性能消耗和数据量插入应该不是成正比的,同时一条条数据插入完全可以淘汰!

万级数据的远程插入

——druid/remote/一一数据插入

未完待续!待补:

1.远程数据库连接 插入数据(万级、十万级、百万级)

2.本地数据库连接 插入数据(百万级)

3.不用数据库连接 插入数据(本地+远程 (万,十万,百万)级)

4.打包项目,在服务器模拟服务器本地数据库插入,打印日志,进行测试

5.购买阿里的云数据库RDS,插入比较

6. c3p0、dbcp以及hikaricp连接池的性能测试

关于查询

1.建立索引查询与纯粹关联查询差距

2.使用nosql的插入数据性能测试

3.使用nosql的查询数据性能测试

(后续测试不会基本不会测试单一数据插入,毕竟是不推荐的技术,性能差距太大。后续应该基本采用数据库连接池查询,因为实际开发中项目都是需要数据库连接池的开进行高效复用)

个人博客:写过诗的程序猿(https://www.hezhiming.xin)

个人邮箱:hezhimingabc@qq.com

个人微信:hezhiming_

如果您喜欢请点击一波关注,谢谢你的支持!

上一篇 下一篇

猜你喜欢

热点阅读