这里写自定义目录标题
关于serverless
serverless应该是最近几年的最火的技术之一了,而serverless版本的数据库也是云原生数据库的选择之一。腾讯云作为国内领先的云服务厂商,更是在serverless数据库上发力。最近上线的这款serverless数据库提供了更加多样化的选择,可以在资源优化,使用效率等方面有长足的发展。
本文将从头到尾带大家体验下腾讯云TDSQL-C MySQL 版,将会体验其核心功能,并且引入实际 项目对这款数据库进行测试。
腾讯云TDSQL-C Serverless简介
TDSQL-C MySQL 版(TDSQL-C for MySQL)是腾讯云自主研发的全新一代云原生关系型数据库解决方案。它融合了传统数据库的稳定性、云计算的弹性扩展能力以及新一代硬件技术的优势,为用户提供了卓越的数据库服务。TDSQL-C MySQL 版以高弹性、高性能、海量存储和卓越的安全性闻名。
这个创新性的数据库解决方案完全兼容 MySQL 5.7 和 8.0 版本,因此您可以毫不费力地将现有的 MySQL 数据库迁移到 TDSQL-C MySQL 版上。它实现了超过百万级的每秒查询(QPS)吞吐量,提供了PB级别的智能存储,为您的数据提供了坚实的安全保障。
TDSQL-C MySQL 版采用了存储和计算分离的架构,这意味着所有计算节点可以共享一份数据,从而实现了秒级的配置升级和降级。它还能够在秒内恢复故障,单一节点能够支持百万级别的查询吞吐量。此外,它还能够自动进行数据维护和备份,并且可以以惊人的GB/秒速度进行并行回档。
TDSQL-C MySQL 版继承了商业数据库的稳定性、高性能和可扩展性,同时也拥有开源云数据库的灵活性和高效迭代的优势。这意味着您可以轻松将现有的 MySQL 数据库迁移到 TDSQL-C MySQL 版上,而无需修改应用程序代码和配置。
体验准备工作
TDSQL-C Serverless 实例购买
点击如下地址跳转购买页
TDSQL-C MySQL 版购买页
部分配置说明:
配置项 | 选择 |
---|---|
实例形态 | 选择预置资源。 |
数据库引擎 | 选择 MySQL。 |
地域 | 选择您的数据库部署地域。 |
主可用区 | 选择部署可用区,对应地域下的可用区分布。请参考实际购买页面。 |
多可用区部署 | 选择是否启用多可用区部署,选择是,会出现备可用区选项。 |
备可用区 | 默认关闭,多可用区部署开启后,可选择您的备可用区。 |
传输链路 | 默认为高 IO 版。 |
网络 | 出于性能和安全考虑,目前仅支持私有网络(VPC)。云服务器需要与 TDSQL-C 在同一 VPC 下方可通信(保障同一个地域,不限可用区)。 |
子网 | 子网是私有网络的一个网络空间,为逻辑概念。同一私有网络下可以创建不同可用区的子网,同一私有网络下不同可用区的子网默认可以内网互通。即使您选择同地域下其他可用区的子网,实际业务连接访问为就近逻辑,也不会增加网络时延。 |
兼容数据库 | 支持 MySQL 5.7、8.0。 |
计算实例(读写) | 选择读写实例的计算规格,仅支持配置一个读写实例。 |
计算实例(只读) | 选择只读实例的计算规格。请至少选择两个只读实例以保证集群高可用,集群创建后可通过增加只读实例扩展集群的读能力,同一集群下,您最多可以创建15个只读实例。 |
自动续费 | 账户余额足够时,设备到期后按月自动续费。 |
计算计费模式 | 支持包年包月和按量计费。 |
存储计费模式 | 支持按量计费,即购买时无需指定存储,TDSQL-C MySQL 版按每小时存储实际使用量计费。支持包年包月,即预购存储空间,未使用部分仍然计费。 |
开启外网访问权限
开启外网可访问,方便后续测试验证,业务使用不建议开启
数据库实例压测
- sysbench安装
我们通过sysbench做个简单的压测,看下数据库的一些性能指标
安装,通过如下命令
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh |bash
yum install -y sysbench
通过如下命令进行检验:
sysbench --version
- 压测数据写入
通过执行如下命令,新建20张表,并且每个表中构建出 100万条测试数据,具体的host、port、user、password根据实际情况进行修改,新建的表也可以根据自己需要去建立。
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=gz-cynosdbmysql-grp-d27hp6vl.sql.tencentcdb.com --mysql-port=25648 --mysql-user=root --mysql-password=password --mysql-db=experience-15 --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare
- 整体的读写测试
测试数据库的综合读写TPS,使用oltp_read_write模式
通过如下命令执行,可以看到控制台有压测数据输出,如果你想要输出到文件,也可以通过命令配置实现
因为目前实际访问是通过公网进行的,这里只是提供一个压测的思路,感兴趣可以自己在内网实践下
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=gz-cynosdbmysql-grp-kb212sal.sql.tencentcdb.com --mysql-port=25648 --mysql-user=root --mysql-password=password --mysql-db=experience-15 --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable run
控制台压测数据:
- 只读性能测试
测试数据库的只读性能,使用oltp_read_write模式,执行命令如下:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 -mysql-host=gz-cynosdbmysql-grp-kb212sal.sql.tencentcdb.com --mysql-port=25648 --mysql-user=root --mysql-password=password --mysql-db=experience-15 --tables=20 --table_size=1000000 oltp_read_only --db-ps-mode=disable run
- 插入性能测试
测试数据库的数据插入性能,使用模式:oltp_insert,命令如下:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 -mysql-host=gz-cynosdbmysql-grp-kb212sal.sql.tencentcdb.com --mysql-port=25648 --mysql-user=root --mysql-password=password --mysql-db=experience-15 --tables=20 --table_size=1000000 oltp_insert --db-ps-mode=disable run
Serverless 特性介绍
以下是提供的特性内容以Markdown表格形式整理:
特性项 | 说明 |
---|---|
资源扩缩范围(CCU) | 可调整 CCU 弹性扩缩容的范围。Serverless 集群会在该范围内根据实际业务压力自动增加或减少 CCU。 |
弹性策略 | Serverless 集群会持续监控用户的 CPU、内存等 workload 负载情况,根据一定的规则触发自动扩缩容策略。 |
自动启停 | Serverless 服务支持自定义实例自动暂停时间,无连接时实例会自动暂停。当有任务连接接入时,实例会秒级无间断自动唤醒。 |
资源扩缩范围(CCU)说明 | CCU(TDSQL-C Compute Unit)为 Serverless 的计算计费单位,一个 CCU 近似等于1个 CPU 和 2GB 内存的计算资源,每个计费周期的 CCU 使用数量为:数据库所使用的 CPU 核数 与 内存大小的1/2 二者中取最大值。 |
弹性策略说明 | Serverless 服务的弹性策略是利用监控计算层实现的。通过监控业务负载情况,系统对计算资源进行自动扩缩容,并对该时刻所消耗的资源进行计费。当没有数据库请求时,监控服务会触发计算资源的回收,并通知接入层。当用户再次访问时,接入层则会唤醒集群,再次提供访问。 |
自动启停说明 | 暂停服务:您可根据业务需要,自助开启或关闭自动暂停设置,该设置可在 控制台 进行修改。开启状态下,需要设定自动暂停时间,默认为1小时。数据库在该时间内没有连接和 CPU 使用时,将自动暂停,暂停后计算不计费,存储仍然按实际使用量计费。关闭状态下,数据库会保持持续运行,在没有连接和 CPU 使用时,按用户配置的最小 CCU 算力进行计费,适用于业务有心跳连接的应用场景。 |
关于计费的介绍
应该很多同学都经历过降本增效的事情吧,如果用了severless,那么这个就会变得很简单了。
项目体验–python调用数据库生成词云图
使用 Python 向 TDSQL-C 添加读取数据 实现词云图
整个实践步骤如下:
准备pyton环境,安装依赖包
pip install PyMySQL==1.1.0
pip install pandas==2.0.1
pip install wordcloud==1.9.1.1
pip install numpy==1.23.5
pip install matplotlib==3.7.2
pip install Pillow==9.5.0
配置数据库连接信息
db_config = {
'host': "gz-cynosdbmysql-grp-kb212sal.sql.tencentcdb.com", # 主机名
'port': 25648, # 端口
'user': "root", # 账户
'password': "Tpassword", # 密码
'database': 'database',
}
创建读取excel文件的函数
def excelTomysql():
path = '词频' # 文件所在文件夹
files = [path + "/" + i for i in os.listdir(path)] # 获取文件夹下的文件名,并拼接完整路径
for file_path in files:
print(file_path)
filename = os.path.basename(file_path)
table_name = os.path.splitext(filename)[0] # 使用文件名作为表名,去除文件扩展名
# 使用pandas库读取Excel文件
data = pd.read_excel(file_path, engine="openpyxl", header=0) # 假设第一行是列名
columns = {col: "VARCHAR(255)" for col in data.columns} # 动态生成列名和数据类型
create_table(table_name, columns) # 创建表
save_to_mysql(data, table_name) # 将数据保存到MySQL数据库中,并使用文件名作为表名
print(filename + ' uploaded and saved to MySQL successfully')
根据excel文件名创建数据库表名
def create_table(table_name, columns):
# 建立MySQL数据库连接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 组装创建表的 SQL 查询语句
query = f"CREATE TABLE IF NOT EXISTS {table_name} ("
for col_name, col_type in columns.items():
query += f"{col_name} {col_type}, "
query = query.rstrip(", ") # 去除最后一个逗号和空格
query += ")"
# 执行创建表的操作
cursor.execute(query)
# 提交事务并关闭连接
conn.commit()
cursor.close()
conn.close()
将读取的excel 数据保存到数据库对应的表中
def excelTomysql():
path = '词频' # 文件所在文件夹
files = [path + "/" + i for i in os.listdir(path)] # 获取文件夹下的文件名,并拼接完整路径
for file_path in files:
print(file_path)
filename = os.path.basename(file_path)
table_name = os.path.splitext(filename)[0] # 使用文件名作为表名,去除文件扩展名
# 使用pandas库读取Excel文件
data = pd.read_excel(file_path, engine="openpyxl", header=0) # 假设第一行是列名
columns = {col: "VARCHAR(255)" for col in data.columns} # 动态生成列名和数据类型
create_table(table_name, columns) # 创建表
save_to_mysql(data, table_name) # 将数据保存到MySQL数据库中,并使用文件名作为表名
print(filename + ' uploaded and saved to MySQL successfully')
读取数据库中存入的数据
def query_data():
# 建立MySQL数据库连接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 查询所有表名
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()
data = []
dic_list = []
table_name_list = []
for table in tables:
# for table in [tables[-1]]:
table_name = table[0]
table_name_list.append(table_name)
query = f"SELECT * FROM {table_name}"
# # 执行查询并获取结果
cursor.execute(query)
result = cursor.fetchall()
if len(result) > 0:
columns = [desc[0] for desc in cursor.description]
table_data = [{columns[i]: row[i] for i in range(len(columns))} for row in result]
data.extend(table_data)
dic = {}
for i in data:
dic[i['word']] = float(i['count'])
dic_list.append(dic)
执行函数,并生成词云图
if __name__ == '__main__':
##excelTomysql()方法将excel写入到mysql
excelTomysql()
print("excel写入到mysql成功!")
# query_data()方法将mysql中的数据查询出来,每张表是一个dic,然后绘制词云
result_list, table_name_list = query_data()
print("从mysql获取数据成功!")
for i in range(len(result_list)):
maskImage = np.array(Image.open('background.PNG')) # 定义词频背景图
# 定义词云样式
wc = wordcloud.WordCloud(
font_path='PingFangBold.ttf', # 设置字体
mask=maskImage, # 设置背景图
max_words=500, # 最多显示词数
max_font_size=100) # 字号最大值
# 生成词云图
wc.generate_from_frequencies(result_list[i]) # 从字典生成词云
# 保存图片到指定文件夹
wc.to_file("词云图/{}.png".format(table_name_list[i]))
print("生成的词云图【{}】已经保存成功!".format(table_name_list[i] + '.png'))
# 在notebook中显示词云图
plt.imshow(wc) # 显示词云
plt.axis('off') # 关闭坐标轴
plt.show() # 显示图像
总结
总之,TDSQL-C MySQL 版是一个强大而灵活的数据库解决方案,它汇集了业界领先的技术,为您的数据提供了卓越的性能、可靠性和安全性。无论是在性能需求上,还是在数据迁移上,它都能够满足您的各种需求。