前言

我这里我使用的默认公共镜像Huawei Cloud EulerOS,因为这里有个标识说是可以对数据库添加加速功能,例如Redis和MySQL数据库都可以加速,我这里先测试一下MySQL数据库的读写效率如何。使用Python语言来测试写入与读取速度。

目录

前言

购买服务配置

配置表

连接服务器

查看系统信息

MySQL安装与启动

yum安装MySQL

启动MySQL

连接MySQL

设置密码操作

密码登录

设置外网访问MySQL

操作命令

默认安全组已经添加了3306的端口号——连接成功

设置安全组操作

创建测试数据库与测试数据表

创建测试数据库

创建测试表

Python写入测试——连续1万条

最终数据呈现

Python读取测试——连续1万条

最终呈现效果

更换其它品牌RDS数据库——1万条数据测试

写入100条测试

读取100条测试

总结


购买服务配置

这里使用的是4vCPUs与14GIB的内存,镜像选择的是默认的公共镜像。这个镜像有两个选项,一个是10GiB与40GiB,我就默认选择10GiB了。

配置表

连接服务器

获取公网连接地址,这个地址在购买的时候就能看到有购买记录的。

使用XShell链接成功。

查看系统信息

lsb_release -a

MySQL安装与启动

yum安装MySQL

yum install mysql

通过yum安装直接安装了:

mysql-common、mysql-cofig、mysql-errmsg和mysql-server但是少了mysql-client 

启动MySQL

启动命令

systemctl start mysqld

查看状态命令

systemctl status mysqld

连接MySQL

基本连接

mysql -u root -p

这里由于没设置密码,故而直接连接成功,那么为了设置个密码我们还要进行一些操作。

设置密码操作

下面是操作的语句

# 使用mysql库

use mysql;

# 修改root的密码为root
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

# 刷新权限

flush privileges;

# 退出

exit;

密码登录

这里使用刚才设置的密码登录,可以看到登录成功。

设置外网访问MySQL

环境还是很安全的,如果没有对应的端口号允许是不能访问的,我们先安装一下,再通过有无安全组看看效果。

操作命令

# 切换数据库

use mysql;

# 修改host的值为%

update user set host='%' where user='root' and host='localhost';

# 刷新权限

flush privileges;

# 退出数据库

exit;

默认安全组已经添加了3306的端口号——连接成功

设置安全组操作

操作路径

进入配置详情页

在这里我们可以看到3306的端口号已经添加过了所以可以直接访问的,如果没有的话是无法访问的,安全性是可以信赖的。

创建测试数据库与测试数据表

先创建必要的库与测试表。

创建测试数据库

一般我们也都会选择utf8的字符集。

创建测试表

CREATE TABLE `test_table` (
  `id` int NOT NULL AUTO_INCREMENT,
  `createDate` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  `userName` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `pwd` varchar(36) COLLATE utf8mb4_general_ci NOT NULL,
  `age` int NOT NULL,
  `introduce` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

Python写入测试——连续1万条

测试代码

import mysql.connector
import random
import string
import time

# 数据库连接信息
config = {
    'user': 'root',
    'password': 'root',
    'host': 'change your ip',
    'database': 'mysql_insert_select_test',
    'raise_on_warnings': True
}

# 生成随机数据
def generate_random_data():
    username = ''.join(random.choices(string.ascii_lowercase + string.digits, k=10))
    createDate = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
    pwd = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
    age = random.randint(18, 60)
    introduce = ''.join(random.choices(string.ascii_lowercase + string.digits + ' ', k=50))
    return (username, createDate, pwd, age, introduce)

# 创建连接
cnx = mysql.connector.connect(**config)

# 获取游标
cursor = cnx.cursor()

# 开始时间
start_time = time.time()

# 插入数据
for i in range(10000):
    data = generate_random_data()
    query = "INSERT INTO test_table (userName,createDate, pwd, age, introduce) VALUES (%s, %s, %s, %s, %s)"
    cursor.execute(query, data)
    cnx.commit()

# 结束时间
end_time = time.time()

# 总时间
total_time = end_time - start_time

# 平均时间
average_time = total_time / 10000

# 打印结果
print("总时间: ", total_time, "秒")
print("平均时间: ", average_time, "秒")

# 关闭游标和连接
cursor.close()
cnx.close()

最终数据呈现

总时间:  371.0781352519989 秒
平均时间:  0.03710781352519989 秒

刚好1万条,平均秒数是3.7毫秒。

我们插入个100条再测测。

100条的平均时间是39毫秒,这就代表连续插入的速度还是比较快的呢。

Python读取测试——连续1万条

测试代码

import random
import mysql.connector
import time

# 数据库连接信息
config = {
    'user': 'root',
    'password': 'root',
    'host': 'your ip',
    'database': 'mysql_insert_select_test',
    'raise_on_warnings': True
}

# 创建连接
cnx = mysql.connector.connect(**config)

# 获取游标
cursor = cnx.cursor()

# 开始时间
start_time = time.time()
count = 10000
# 插入数据
for i in range(count):
    # 随机生成id
    rand_id = random.randint(1, 10100)
    query = "SELECT * FROM test_table WHERE id = %s"
    cursor.execute(query, (rand_id,))
# 结束时间
end_time = time.time()

# 总时间
total_time = end_time - start_time

# 平均时间
average_time = total_time / count

# 打印结果
print("总时间: ", total_time, "秒")
print("平均时间: ", average_time, "秒")

# 关闭游标和连接
cursor.close()
cnx.close()

最终呈现效果

效果还是不错的。1万次平均下来每次19毫秒

一万的平均读取时间是:19毫秒,已经可以了。

单条直接查询使用工具是13毫秒,我们使用代码再测试一下。

代码测试是17毫秒。 

更换其它品牌RDS数据库——1万条数据测试

测试数据库地址:

rm-bp1zq3879r28p726lco.mysql.rds.aliyuncs.com

这个地址相对来说慢一些,但是如果相差太多就能说明相对的性能那个更好一些了。 

写入100条测试

我先测试了个100的,毕竟如果时间太长就超级难等待了,结果91毫秒,要是1万条没得等了,型号先测试了一下。

读取100条测试

平均下来是81毫秒读取一次。

总结

总结一下,华为的这个镜像应该是对MySQL加速了,而且加速效果还是比较客观的,在对比中发现比其它的RDS的时间比是1:4,这个时间比就比较大了,模糊掉链接时间还是相差很多,所以这样来说【华为云Flexus X实例】对MySQL的加速实锤的可以,也建议大家使用一下,效果只有测试了才会真正的体验到。

最近华为云的828 B2B企业节正在举办中,其中Flexus X实例的促销也非常给力,可以去瞅瞅。特别是有算力需求的,对自建MySQL、Redis、Nginx的性能有要求的小伙伴,一定不要错过活动。

活动地址:https://bbs.csdn.net/topics/619275275

Logo

欢迎加入华为云数据库社区,在这里可以找到志同道合的朋友,共同探索数据库的奥秘

更多推荐