腾讯云2024年数字生态大会开发者嘉年华(数据库动手实验)傻瓜式操作TDSQL-C
整个学习过程让我感受最深的就是 TDSQL-C 的“傻瓜式”操作,省去了很多传统数据库的管理麻烦,特别适合那些不想自己维护服务器的开发者。操作简单:不用担心搭建环境,创建数据库和插入数据都特别方便。Serverless 省心:按需扩展资源,业务高峰也不用担心数据库崩溃。性能稳定:不管是插入数据还是查询分析,响应速度都很快。总之,TDSQL-C 非常适合那些需要快速上手、追求省心管理的开发者。如果你
9月7日,我有幸参加了腾讯全球数字生态大会中的“腾讯嘉年华”开发者活动。这场盛会不仅汇集了最前沿的技术分享,还设置了丰富的动手体验环节,让我们这些开发者能真正亲身感受到腾讯云产品的实际应用。对于像我这样的开发者而言,整个嘉年华最大的亮点之一,莫过于动手体验腾讯云的各种服务和工具,其中让我印象深刻的便是 TDSQL-C 云数据库。
下面我来聊聊自己最近亲身体验的腾讯云 TDSQL-C,作为一款云原生数据库,它给我带来了完全不同于传统数据库的使用感受。说实话,刚开始我对“云数据库”这种东西还挺陌生的,不过随着一步步实际操作下来,我发现它竟然简单到让小白都能轻松上手。
下面我就按照学习的顺序,把我整个动手过程分享给大家,不用担心技术门槛,因为这个过程真的是很简单!
1. 创建数据库实例
首先,要用腾讯云的 TDSQL-C,当然得先创建数据库实例。登录腾讯云之后,找到 TDSQL-C(MySQL 版本),整个创建过程就是点几下按钮,设置个数据库的名字、密码,选个字符集啥的,最后点“创建”就搞定了。
这个过程简化到了极致,系统会自动帮你搞定服务器和后台配置,完全不需要自己搭建什么复杂的环境,整个创建过程不到 5 分钟,简单又省心。
2. 用数据库管理工具连接
创建好数据库之后,我就用 MySQL Workbench 连接到这个数据库。连接方式和操作本地 MySQL 差不多,只要把腾讯云给的连接信息填进去就行。
一开始还担心云端数据库会不会操作延迟很大,但实际使用起来就像操作本地数据库一样,没有明显的卡顿感。
3. 创建表格和插入数据
连上数据库之后,接下来当然是建表和插入数据。我创建了一个 orders 表格,专门记录电商订单的数据,表结构挺简单,有订单号、商品名称、数量、价格之类的字段。接下来,用 SQL 语句插入了几百条测试数据。
CREATE TABLE `ecommerce_sales_stats` (
`category_id` int NOT NULL COMMENT '分类ID(主键)',
`category_name` varchar(100) NOT NULL COMMENT '分类名称',
`total_sales` decimal(15,2) NOT NULL COMMENT '总销售额',
`steam_sales` decimal(15,2) NOT NULL COMMENT 'Steam平台销售额',
`offline_sales` decimal(15,2) NOT NULL COMMENT '线下实体销售额',
`official_online_sales` decimal(15,2) NOT NULL COMMENT '官方在线销售额',
PRIMARY KEY (`category_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 COMMENT='电商分类销售统计表';
CREATE TABLE `users` (
`user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户ID(主键,自增)',
`full_name` varchar(100) NOT NULL COMMENT '用户全名',
`username` varchar(50) NOT NULL COMMENT '用户名',
`email` varchar(100) NOT NULL COMMENT '用户邮箱',
`password_hash` varchar(255) NOT NULL COMMENT '用户密码的哈希值',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_active` tinyint(1) DEFAULT '1' COMMENT '是否激活',
PRIMARY KEY (`user_id`),
UNIQUE KEY `email` (`email`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
I
CREATE TABLE `orders` (
`order_id` int NOT NULL AUTO_INCREMENT,
`user_id` int DEFAULT NULL,
`order_amount` decimal(10,2) DEFAULT NULL,
`order_status` varchar(20) DEFAULT NULL,
`order_time` datetime DEFAULT NULL,
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ;
整个插入数据的过程非常流畅,和我以前用 MySQL 的体验几乎没差别。数据库还支持批量插入操作,处理效率相当高,几秒钟就把几百条数据都插进去了。
4. 体验 TDSQL-C 的 Serverless 特性
TDSQL-C 最大的亮点之一就是它的 Serverless 特性,这意味着你不用为服务器的资源分配操心。一般来说,传统的数据库需要根据业务量预估服务器资源,否则会因为超载而崩溃。但有了 Serverless,TDSQL-C 会自动根据负载调节资源,该扩容扩容,该缩容缩容,特别省心。
比如,我特意模拟了数据库的高负载状态,连续执行多个大查询。TDSQL-C 表现得相当稳,数据库会根据查询压力自动调整资源,完全不用人为干预。
5. 数据查询与分析
最后, 用Python 代码,结合 SQL 查询数据库里的订单数据,做了简单的销售额统计。通过 Python 调用 MySQL Connector 连接 TDSQL-C,体验跟本地 MySQL 没有任何差异,查询速度也很快。
from langchain_community.utilities import SQLDatabase
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
import yaml
import mysql.connector
from decimal import Decimal
import plotly.graph_objects as go
import plotly
import pkg_resources
import matplotlib
yaml_file_path = 'config.yaml'
with open(yaml_file_path, 'r') as file:
config_data = yaml.safe_load(file)
#获取所有的已安装的pip包
def get_piplist(p):
return [d.project_name for d in pkg_resources.working_set]
#获取llm用于提供AI交互
ollama = ChatOllama(model=config_data['hai']['model'],base_url=config_data['hai']['base_url'])
db_user = config_data['database']['db_user']
db_password = config_data['database']['db_password']
db_host = config_data['database']['db_host']
db_port= config_data['database']['db_port']
db_name = config_data['database']['db_name']
# 获得schema
def get_schema(db):
schema = mysql_db.get_table_info()
return schema
def getResult(content):
global mysql_db
# 数据库连接
mysql_db = SQLDatabase.from_uri(f"mysql+mysqlconnector://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}")
# 获得 数据库中表的信息
#mysql_db_schema = mysql_db.get_table_info()
#print(mysql_db_schema)
template = """基于下面提供的数据库schema, 根据用户提供的要求编写sql查询语句,要求尽量使用最优sql,每次查询都是独立的问题,不要收到其他查询的干扰:
{schema}
Question: {question}
只返回sql语句,不要任何其他多余的字符,例如markdown的格式字符等:
如果有异常抛出不要显示出来
"""
prompt = ChatPromptTemplate.from_template(template)
text_2_sql_chain = (
RunnablePassthrough.assign(schema=get_schema)
| prompt
| ollama
| StrOutputParser()
)
# 执行langchain 获取操作的sql语句
sql = text_2_sql_chain.invoke({"question": content})
print(sql)
#连接数据库进行数据的获取
# 配置连接信息
conn = mysql.connector.connect(
host=db_host,
port=db_port,
user=db_user,
password=db_password,
database=db_name
)
# 创建游标对象
cursor = conn.cursor()
# 查询数据
cursor.execute(sql.strip("```").strip("```sql"))
info = cursor.fetchall()
# 打印结果
#for row in info:
#print(row)
# 关闭游标和数据库连接
cursor.close()
conn.close()
#根据数据生成对应的图表
print(info)
template2 = """
以下提供当前python环境已经安装的pip包集合:
{installed_packages};
请根据data提供的信息,生成是一个适合展示数据的plotly的图表的可执行代码,要求如下:
1.不要导入没有安装的pip包代码
2.如果存在多个数据类别,尽量使用柱状图,循环生成时图表中对不同数据请使用不同颜色区分,
3.图表要生成图片格式,保存在当前文件夹下即可,名称固定为:图表.png,
4.我需要您生成的代码是没有 Markdown 标记的,纯粹的编程语言代码。
5.生成的代码请注意将所有依赖包提前导入,
6.不要使用iplot等需要特定环境的代码
7.请注意数据之间是否可以转换,使用正确的代码
8.不需要生成注释
data:{data}
这是查询的sql语句与文本:
sql:{sql}
question:{question}
返回数据要求:
仅仅返回python代码,不要有额外的字符
"""
prompt2 = ChatPromptTemplate.from_template(template2)
data_2_code_chain = (
RunnablePassthrough.assign(installed_packages=get_piplist)
| prompt2
| ollama
| StrOutputParser()
)
# 执行langchain 获取操作的sql语句
code = data_2_code_chain.invoke({"data": info,"sql":sql,'question':content})
#删除数据两端可能存在的markdown格式
print(code.strip("```").strip("```python"))
exec(code.strip("```").strip("```python"))
return {"code":code,"SQL":sql,"Query":info}
# 构建展示页面
import streamlit
# 设置页面标题
streamlit.title('AI驱动的数据库TDSQL-C 电商可视化分析小助手')
# 设置对话框
content = streamlit.text_area('请输入想查询的信息', value='', max_chars=None)
# 提问按钮 # 设置点击操作
if streamlit.button('提问'):
#开始ai及langchain操作
if content:
#进行结果获取
result = getResult(content)
#显示操作结果
streamlit.write('AI生成的SQL语句:')
streamlit.write(result['SQL'])
streamlit.write('SQL语句的查询结果:')
streamlit.write(result['Query'])
streamlit.write('plotly图表代码:')
streamlit.write(result['code'])
# 显示图表内容(生成在getResult中)
streamlit.image('./图表.png', width=800)
而且,TDSQL-C 的弹性扩展在这种数据分析任务中表现得非常好,处理大数据集也游刃有余。特别是当多用户同时访问时,数据库依然能保持很好的响应速度,这对业务量大的企业来说应该是个不错的选择。
总结:TDSQL-C 值得一试
整个学习过程让我感受最深的就是 TDSQL-C 的“傻瓜式”操作,省去了很多传统数据库的管理麻烦,特别适合那些不想自己维护服务器的开发者。
- 操作简单:不用担心搭建环境,创建数据库和插入数据都特别方便。
Serverless 省心:按需扩展资源,业务高峰也不用担心数据库崩溃。 - 性能稳定:不管是插入数据还是查询分析,响应速度都很快。
总之,TDSQL-C 非常适合那些需要快速上手、追求省心管理的开发者。如果你和我一样,不想操心服务器配置和维护,那它绝对是个值得试试的选择!
更多推荐
所有评论(0)