赞
踩
serverless应该是最近几年的最火的技术之一了,而serverless版本的数据库也是云原生数据库的选择之一。腾讯云作为国内领先的云服务厂商,更是在serverless数据库上发力。最近上线的这款serverless数据库提供了更加多样化的选择,可以在资源优化,使用效率等方面有长足的发展。
本文将从头到尾带大家体验下腾讯云TDSQL-C MySQL 版,将会体验其核心功能,并且引入实际 项目对这款数据库进行测试。
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 MySQL 版购买页
部分配置说明:
配置项 | 选择 |
---|---|
实例形态 | 选择预置资源。 |
数据库引擎 | 选择 MySQL。 |
地域 | 选择您的数据库部署地域。 |
主可用区 | 选择部署可用区,对应地域下的可用区分布。请参考实际购买页面。 |
多可用区部署 | 选择是否启用多可用区部署,选择是,会出现备可用区选项。 |
备可用区 | 默认关闭,多可用区部署开启后,可选择您的备可用区。 |
传输链路 | 默认为高 IO 版。 |
网络 | 出于性能和安全考虑,目前仅支持私有网络(VPC)。云服务器需要与 TDSQL-C 在同一 VPC 下方可通信(保障同一个地域,不限可用区)。 |
子网 | 子网是私有网络的一个网络空间,为逻辑概念。同一私有网络下可以创建不同可用区的子网,同一私有网络下不同可用区的子网默认可以内网互通。即使您选择同地域下其他可用区的子网,实际业务连接访问为就近逻辑,也不会增加网络时延。 |
兼容数据库 | 支持 MySQL 5.7、8.0。 |
计算实例(读写) | 选择读写实例的计算规格,仅支持配置一个读写实例。 |
计算实例(只读) | 选择只读实例的计算规格。请至少选择两个只读实例以保证集群高可用,集群创建后可通过增加只读实例扩展集群的读能力,同一集群下,您最多可以创建15个只读实例。 |
自动续费 | 账户余额足够时,设备到期后按月自动续费。 |
计算计费模式 | 支持包年包月和按量计费。 |
存储计费模式 | 支持按量计费,即购买时无需指定存储,TDSQL-C MySQL 版按每小时存储实际使用量计费。支持包年包月,即预购存储空间,未使用部分仍然计费。 |
开启外网可访问,方便后续测试验证,业务使用不建议开启
我们通过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
以下是提供的特性内容以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 向 TDSQL-C 添加读取数据 实现词云图
整个实践步骤如下:
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',
}
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 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()
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 版是一个强大而灵活的数据库解决方案,它汇集了业界领先的技术,为您的数据提供了卓越的性能、可靠性和安全性。无论是在性能需求上,还是在数据迁移上,它都能够满足您的各种需求。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。