【腾讯云TDSQL-C Serverless 产品体验】使用 Python向TDSQL-C添加读取数据实现词云图

关于TDSQL-C Serverless介绍

TDSQL-C 是腾讯云自主研发的新一代云原生关系型数据库。

它融合了传统数据库、云计算和新硬件技术的优势,100%兼容 MySQL,为用户提供具有极致弹性、高性能、高可用性、高可靠性和安全性的数据库服务。

TDSQL-C 实现了超过百万每秒的高吞吐量,支持 PB 级海量分布式智能存储,并具备 Serverless 秒级扩缩能力,可加速企业数字化转型。

其 Serverless 服务是建立在腾讯云自研的新一代云原生关系数据库 TDSQL-C MySQL 版之上的无服务器架构实现,是一款全 Serverless 架构的云原生数据库。

Serverless 服务按实际使用的计算和存储资源进行收费,不用不付费,将腾讯云的云原生技术普惠用户。

适用的场景介绍

这类数据库实际是按量付费的,非常适合在测试和研发环境使用,如果业务存在明显的波动期,那么它的弹性伸缩功能也是比较适合的。对于一些小程序的云开发,小企业的一些网站建设也可以考虑此类数据库。

数据库购买

  1. 这里简单介绍下如何找到这款数据库
  • 搜索进入腾讯云注册并登录

  • 在搜索框输入 TDSQL-C MYSQL 版 , 点击搜索

  • 点击立即选购

  • 根据需要调整配置 注意 选择Serverless 的实例形态哦!!!

  • 配置TDSQL-C 集群

  • 根据实例信息连接数据库

  1. 如果你只是想体验下功能,那么可以通过如下链接进行免费体验:

https://mc.tencent.com/uQHh7pDI

数据库压测

  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=27529 --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-d27hp6vl.sql.tencentcdb.com --mysql-port=27529 --mysql-user=root --mysql-password=password --mysql-db=experience-15 --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable run

控制台压测数据:

注意:
使用sysbench对数据库进行读写测试时,需要注意的几点:

    1. 选择合适的测试模式,如顺序读/写、随机读/写等,根据实际业务场景选用。
    1. 调整线程数和测试时长,逐步增加压力直到找到数据库的压力瓶颈。
    1. 测试前后要重新加载测试数据,避免缓存影响结果。
    1. 对照不同的数据库参数进行测试,如buffer pool大小、索引设置等。
    1. 记录不同压力情况下的指标,如TPS、延迟、资源利用率等。
  1. 只读性能测试

测试数据库的只读性能,使用oltp_read_write模式,执行命令如下:

sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 -mysql-host=gz-cynosdbmysql-grp-d27hp6vl.sql.tencentcdb.com --mysql-port=27529 --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-d27hp6vl.sql.tencentcdb.com --mysql-port=27529 --mysql-user=root --mysql-password=password --mysql-db=experience-15 --tables=20 --table_size=1000000 oltp_insert --db-ps-mode=disable run

关于一些性能测试的情况,官方也是给出一些数据的,可以参考:

实际使用体验

使用 Python 向 TDSQL-C 添加读取数据 实现词云图

整个实践步骤如下:

  1. 准备python环境,安装依赖包
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
  1. 配置数据库连接信息
  2. 创建读取excel文件的函数
  3. 根据excel文件名创建数据库表名
  4. 将读取的excel 数据保存到数据库对应的表中
    如下是通过读取excel后存入数据库的数据,在使用上与常规的数据库没有差别

  1. 读取数据库中存入的数据
  2. 执行函数,并生成词云图
    如下为根据代码生成的词云图

完整代码如下:

import pymysql
import pandas as pd
import os
import wordcloud
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt# MySQL数据库连接配置
db_config = {'host': "gz-cynosdbmysql-grp-d27hp6vl.sql.tencentcdb.com",  # 主机名'port': 27529,  # 端口'user': "root",  # 账户'password': "pass",  # 密码'database': 'experience-16',}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 save_to_mysql(data, table_name):# 建立MySQL数据库连接conn = pymysql.connect(**db_config)cursor = conn.cursor()# 将数据写入MySQL表中(假设数据只有一个Sheet)for index, row in data.iterrows():query = f"INSERT INTO {table_name} ("for col_name in data.columns:query += f"{col_name}, "query = query.rstrip(", ")  # 去除最后一个逗号和空格query += ") VALUES ("values = tuple(row)query += ("%s, " * len(values)).rstrip(", ")  # 动态生成值的占位符query += ")"cursor.execute(query, values)# 提交事务并关闭连接conn.commit()cursor.close()conn.close()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)conn.commit()cursor.close()conn.close()return dic_list, table_name_listif __name__ == '__main__':##excelTomysql()方法将excel写入到mysqlexcelTomysql()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()  # 显示图像

总结

  1. 腾讯云 TDSQL-C MySQL Serverless 版是国内首个也是最大规模的 MySQL 无服务器数据库产品,其最大的特点和优势在于高度弹性灵活的使用方式,根据实际使用量进行计费,不使用则不收费,非常适合对业务量波动较大且难以预计的中小企业或个人开发者。这种按需使用和计费的模式,极大降低了使用成本和资源浪费。100%兼容MySQL,几乎无需改动代码,即可完成数据库的查询、应用和工具平滑迁移。

  2. TDSQL-C MySQL Serverless 版特别适合一些刚刚上线或者业务量难以预测的新服务。对于业务负载存在周期性波动的应用也非常合适,可以根据高峰期和低峰期进行实时调整,无需固定预留资源,既灵活又经济。最高400TB存储,无服务器架构,自动扩缩容,轻松应对业务数据量动态变化和持续增长。

  3. 与传统数据库相比,TDSQL-C MySQL Serverless版可以实现秒级的启停容量扩缩容,根据实际使用情况弹性调整,并且实行按量计费模式,可以精确到秒级别计费,使用灵活而不会造成资源浪费。最高400TB存储,无服务器架构,自动扩缩容,轻松应对业务数据量动态变化和持续增长。

  4. 如果业务主要部署在微信生态内,例如微信小程序,TDSQL-C MySQL Serverless版可以与微信生态深度整合,为小程序等微信平台的开发者提供一站式的后端云数据库服务。开发和运维非常便捷高效。计算节点可根据业务需要快速升降配,秒级完成扩容,结合弹性存储,实现计算资源的成本最优。

  5. 对于已经存在的数据库或数据,TDSQL-C MySQL Serverless版也提供了多种快速迁移的方案。除了使用腾讯云提供的数据传输服务DTS迁移外,还可以通过mysqldump等命令行工具进行数据迁移,整个迁移过程可以做到快速便捷。

Serverless 服务架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/129631.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能工业通信解决方案!钡铼BL124实现Modbus转Ethernet/IP互联!

钡铼技术BL124 Modbus转Ethernet/IP协议网关是一款专为工业自动化领域而设计的先进设备。它提供了可靠的通信解决方案,能够将Modbus通信协议与Ethernet/IP通信协议进行高效转换,实现不同类型设备之间的无缝集成和通信。 添加图片注释,不超过 …

MyBatisPlus(十六)逻辑删除

说明 实际生产中的数据,一般不采用物理删除,而采用逻辑删除,也就是将一条记录的状态改为已删除。 逻辑删除,本质上是更新操作。 MyBatis Plus 框架,提供了逻辑删除功能。在配置了逻辑删除后,增删改查和统…

记一次 .NET某账本软件 非托管泄露分析

一:背景 1. 讲故事 中秋国庆长假结束,哈哈,在老家拍了很多的短视频,有兴趣的可以上B站观看:https://space.bilibili.com/409524162 ,今天继续给大家分享各种奇奇怪怪的.NET生产事故,希望能帮助…

车载通信架构 —— DDS协议介绍

车载通信架构 —— DDS协议介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和…

[PyTorch][chapter 57][WGAN-GP 代码实现]

前言: 下图为WGAN 的效果图: 绿色为真实数据的分布: 8个高斯分布 红色: 为随机产生的数据分布,跟真实分布基本一致 WGAN-GP: 1 判别器D: 最后一层去掉sigmoid 2 生成器G 和判别器D: loss不取log 3 损失函数…

OpenCV C++ Look Up Table(查找表)

OpenCV C Look Up Table(查找表) 引言 在图像处理和计算机视觉中,查找表(Look Up Table, LUT)是一种非常高效和实用的方法,用于快速地映射或更改图像的颜色和像素值。LUT 能够极大地提高图像处理算法的执…

【C++设计模式之解释器模式:行为型】分析及示例

简介 解释器模式(Interpreter Pattern)是一种行为型设计模式,它提供了一种解决问题的方法,通过定义语言的文法规则,解释并执行特定的语言表达式。 解释器模式通过使用表达式和解释器,将文法规则中的句子逐…

【java基础学习】之DOS命令

#java基础学习 1.常用的DOS命令: dir:列出当前目录下的文件以及文件夹 md: 创建目录 rd:删除目录cd:进入指定目录 cd.. :退回到上级目录 cd\ : 退回到根目录 del:删除文件 exit:退出dos命令行 1.dir:列出当前目录下的文件以及文件夹 2.md: 创建目录 …

【kubernetes】带你了解k8s中PV和PVC的由来

文章目录 1 为什么需要卷(Volume)2 卷的挂载2.1 k8s集群中可以直接使用2.2 需要额外的存储组件2.3 公有云 2 PV(Persistent Volume)3 SC(Storage Class) 和 PVC(Persistent Volume Claim)4 总结 1 为什么需要卷(Volume) Pod是由一个或者多个容器组成的,在启动Pod中…

Logback日志框架使用详解以及如何Springboot快速集成

Logback简介 日志系统是用于记录程序的运行过程中产生的运行信息、异常信息等&#xff0c;一般有8个级别&#xff0c;从低到高为All < Trace < Debug < Info < Warn < Error < Fatal < OFF off 最高等级&#xff0c;用于关闭所有日志记录fatal 指出每个…

【Java】微服务——RabbitMQ消息队列(SpringAMQP实现五种消息模型)

目录 1.初识MQ1.1.同步和异步通讯1.1.1.同步通讯1.1.2.异步通讯 1.2.技术对比&#xff1a; 2.快速入门2.1.RabbitMQ消息模型2.4.1.publisher实现2.4.2.consumer实现 2.5.总结 3.SpringAMQP3.1.Basic Queue 简单队列模型3.1.1.消息发送3.1.2.消息接收3.1.3.测试 3.2.WorkQueue3.…

磁盘满了对日志打印(Logback)的影响

背景 我们生产环境有一个服务半夜报警&#xff1a;磁盘剩余空间不足10%&#xff0c;请及时处理。排查后发现是新上线的一个功能&#xff0c;日志打太多导致的&#xff0c;解决方法有很多&#xff0c;就不赘述了。领导担心报警不及时、或者报警遗漏&#xff0c;担心磁盘满了对线…