腾讯云TDSQL-C Serverless 产品体验

关于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 版按每小时存储实际使用量计费。支持包年包月,即预购存储空间,未使用部分仍然计费。

开启外网访问权限

开启外网可访问,方便后续测试验证,业务使用不建议开启
在这里插入图片描述

数据库实例压测

  1. sysbench安装

我们通过sysbench做个简单的压测,看下数据库的一些性能指标

安装,通过如下命令

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh |bash 

yum install -y sysbench

通过如下命令进行检验:

sysbench --version

  1. 压测数据写入

通过执行如下命令,新建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
  1. 整体的读写测试

测试数据库的综合读写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

控制台压测数据:

  1. 只读性能测试

测试数据库的只读性能,使用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
  1. 插入性能测试

测试数据库的数据插入性能,使用模式: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 版是一个强大而灵活的数据库解决方案,它汇集了业界领先的技术,为您的数据提供了卓越的性能、可靠性和安全性。无论是在性能需求上,还是在数据迁移上,它都能够满足您的各种需求。

评论 50
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值