背景

众所周知,作为一家中小型公司的打工人是很卑微的,一旦数据库出现任何问题第一个追责的人就是你。而且由于现在的老板和客户都喜欢看Dashboard,所以用以前的搭档应对工作已经不行了,现在必须化繁为简。这就导致兄弟们必须选一个靠谱的、老板和客户能看懂的数据库应对他们的无理要求。

网上冲浪时我无意间看见了“腾讯云TDSQL-C产品测评活动”点击参与活动

“腾讯云TDSQL-C产品测评活动”是由腾讯云联合CSDN 推出的针对数据库产品测评及产品体验活动,本次活动主要面向 TDSQL-C Serverless 版; 本次参与活动我进行了初步的产品体验,针对TDSOL-C产品的自动弹性能力、自动启停能力、兼容性、安全、并发、可靠性等多方面的产品测评,收获了相关技术领域的实战经验。

如果你和我一样对繁杂的业务场景和难沟通的客户头疼,你可以考虑把数据库迁移到TDSQL。我个人建议是多关注Serverless服务,毕竟老板最感兴趣的就是开源节流。

一、为什么TDSQL-C Serverless值得信赖

1.1、产品概述

TDSQL-C MySQL 版(TDSQL-C for MySQL)是腾讯云自研的新一代云原生关系型数据库。融合了传统数据库、云计算与新硬件技术的优势,为用户提供具备高弹性、高性能、海量存储、安全可靠的数据库服务。TDSQL-C MySQL 版100%兼容 MySQL 5.7、8.0。实现超百万级 QPS 的高吞吐,最高 PB 级智能存储,保障数据安全可靠。

TDSQL-C MySQL 版采用存储和计算分离的架构,所有计算节点共享一份数据,提供秒级的配置升降级、秒级的故障恢复,单节点可支持百万级 QPS,自动维护数据和备份,最高以GB/秒的速度并行回档。

TDSQL-C MySQL 版既融合了商业数据库稳定可靠、高性能、可扩展的特征,又具有开源云数据库简单开放、高效迭代的优势。TDSQL-C MySQL 版引擎完全兼容原生 MySQL,您可以在不修改应用程序任何代码和配置的情况下,将 MySQL 数据库迁移至 TDSQL-C MySQL 版引擎。

1.2、核心设计理念

Cloud Native 应 “ 云 ” 而生 —— 云原生数据库面向服务架构 TDSQL-C MySQL 版数据库是搭建在腾讯云现有的高效稳定的云服务之上,能快速地搭建出高性能、高可用、高可靠的一套云数据库。

Creative “ 分 ” 而 治之 —— 计算与存储分离,日志即数据库 TDSQL-C MySQL 版实现了“日志即数据库”的架构,将计算(CPU、内存)与存储分离,通过对 MySQL 内核的深度改造,卸载了不必要的功能模块,实现了无状态的计算节点,使得计算资源可以在秒级的时间内完成弹性扩展和故障恢复,并将其构建在腾讯云分布式云存储之上实现了存储资源的池化。

Comprehensive “ 兼 ” 容并包 —— 全面兼容新版开源数据库 100%兼容开源数据库引擎 MySQL,还会定期实现对新版本的支持,几乎无需改动代码,即可完成现有数据库的查询、应用和工具平滑迁移,为用户大大降低数据迁移的成本和风险。

Cohesive 相 “ 辅 ” 相成 —— 极简的软件优化释放硬件红利 TDSQL-C MySQL 版通过数据库内核、系统架构等软件优化,有效提升了数据库性能和稳定性,较传统架构的数据库产品有了大幅提升。在相同硬件条件下性能更为出众,即先释放硬件红利,并完美适配新硬件的发展趋势,最大程度上提升数据库服务效能。

Cost Effective 事半功 “ 倍 ” —— 性能成倍提升,按量计费 我们需要一个在性能上能超过传统数据库的云数据库,并且可以给用户减少成本压力,因为云计算的本身其实是要给客户一个很实惠的服务,所以 TDSQL-C MySQL 版,可实现真正的按量计费和弹性的扩缩容。

1.3、产品优势

我们在官网其实就能通过搜索文档对这个产品进行全面的了解,在官方文档中我们可以看到TDSQL-C MySQL版的9大优势

1、完全兼容

TDSQL-C MySQL 版将开源数据库的计算和存储分离,存储构建在腾讯云分布式云存储服务之上,计算层全面兼容开源数据库引擎 MySQL 5.7、8.0,业务无需改造即可平滑迁移。

2、超高性能

单节点百万 QPS 的超高性能,可以满足高并发高性能的场景,保证关键业务的连续性,并可进一步提供读写分离以及读写扩展性。

3、海量存储

最高支持 PB 级的海量存储,为客户免去面对海量的数据时频繁分库分表的繁琐操作,同时支持数据压缩,在海量数据检索和写入性能上进行了大量优化。

4、秒级故障恢复

计算节点实现了无状态,支持秒级的故障切换和恢复,即便计算节点所在的物理机宕机也可以在一分钟之内恢复。

5、数据高可靠

集群支持安全组和 VPC 网络隔离。自动维护数据和备份的多个副本,保障数据安全可靠,可靠性达99.9999999%。

6、弹性扩展

计算节点可根据业务需要快速升降配,秒级完成扩容,结合弹性存储,实现计算资源的成本最优。

7、快速只读扩展

计算节点可根据业务需要快速添加只读节点,一个集群支持秒级添加或删除1个 – 15个只读节点,快速应对业务峰值和变化场景。

8、快照备份回档

基于数据多版本的秒级快照备份对用户的数据进行连续备份保护,免去主从架构备份回档数据的同步和搬迁,最高以GB/秒的速度极速并行回档,保证业务数据迅速恢复。

9、Serverless架构

Serverless 是腾讯自研云原生数据库 TDSQL-C MySQL 版的无服务器架构版,自动扩缩容,仅按照实际使用量计费,不用不计费,轻松应对业务数据量动态变化和持续增长。

二、TDSQL-C体验流程

2.1、体验思路

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

本次我们使用python 语言 进行TDSQL Serverless MySQL 进行体验

实现思路如下:

1、读取多个本地的 excel 文件 ,并将读取的数据存储到TDSQL 中
2、从TDSQL 读取存储的数据
3、将读取的数据生成词云图,并展示

2.2、体验步骤

第一步:选购资源

打开浏览器输入腾讯云官网地址:http://cloud.tencent.com 之后搜索我们要体验的产品

或者点击链接进入TDSQL-C MySQL版网址

注册登录之后在搜索框中输入TDSQL-C MYSQL,点击立即选购

第二步:配置数据库

1、数据库实例和引擎

注意必须选择本次体验的实例Serverless以及版本MySQL

2、算力配置

在实际业务开发中,设置弹性范围时,最小容量可以配置为0.25 CCU,最大容量选择较高的值32。当然,可以根据自身的实际业务去评估一个大概的值。

CCU(TDSQL-C Compute Unit)为 Serverless 的计算计费单位:

  • 一个 CCU 近似等于1个 CPU 和 2GB 内存的计算资源。
  • 每个计费周期的 CCU 使用数量为:数据库所使用的 CPU 核数 与 内存大小的1/2 二者中取最大值。

较小的容量设置可以让数据库集群在完全空闲时最大限度地进行缩减,避免产生额外的费用。
较大的容量可以在数据库集群负载过大时最大限度地进行扩展,稳定度过业务峰值。

3、自动暂停
  • Serverless 服务支持自定义实例自动暂停时间,无连接时实例会自动暂停。
  • 当有任务连接接入时,实例会秒级无间断自动唤醒。

4、计费模式

Serverless 服务的计算和存储独立计费: 计算按 CCU 个数计费,存储按使用量 GB 计费,计费系统按秒计费,按小时结算。

Serverless 总费用= 计算节点费用 + 存储空间费用= Serverless 算力价格 *CCU量 + 存空间价格* 存储空间

第三步:配置集群

配置集群时注意记住管理员root用户的密码和集群名即可

默认字符集和端口号直接在图形化界面配置不需要使用命令非常方便

高级配置中还支持新建安全组和参考模版

这里可以发现TDSQL支持一键配置数据库端口号、安全组、表名大小写敏感、指定项目等,避免了重复做基础操作而费时费力。

第四步:数据库管理(DMC)

数据库管理(DMC)是一个高效、可靠的一站式数据库管理平台,为用户提供库表级操作、实时监控、实例会话管理、SQL窗口、数据管理为一体的数据库管理服务,帮您更加便捷、规范地管理多种数据库实例。

这里我们只用登录DMC之后类型选择TDSQL-C for MySQL,填写实例和账号密码即可。

我个人最喜欢使用的是这个SQL窗口,十分便捷。

数据库智能管理DBbrain有比较实用的功能,比如,查看一些非法连接,会活等信息,数据库巡检,异常告警,智能监控,诊断优化,数据库安全等体验了一下,基本上满足实际开发的需求。

目前体验比较好的功能是“诊断优化”,可以看到CPU、内存、存储、流量的情况,特别说明的是有“健康得分”,可以看看有没有异常。

慢SQL分析是是平时开发需要关注的因素之一,当执行时间超过设置的long_query_time时,就会被记录到慢SQL日志中,这样可以及时去关注项目有哪些语句不符合要求,是不是需要加索引?

健康报告、审计日志分析和SQL优化都是以可视化的界面让我们可以更直观的去分析问题。

对于用户的包容性极强,以中文的形式的展示,非常利于非DBA专业用户来快速分析与改进。

DBbrain安全合规审计是一款基于人工智能的数据安全审计系统,可挖掘数据库运行过程中的各类风险和隐患,为数据库安全运行保驾护航,助力您通过等保合规。

  • 合规:符合国家相关规定,顺利通过等保合规测评
  • 安全:挖掘数据库运行过程中各类潜在风险和隐患,更好的了解数据使用情况,做出数据风险预警
  • 追溯:定位数据安全风险,做出安全预警,并通过日志记录提供事后追查机制,有良好的追溯依据

这里单独把合规审计功能提出来是因为现在有关部门规定国产化是大趋势,而且越是敏感的数据越是需要这种符合国家规定能过等保测评的数据库。

第五步:创建项目目录

  1. pycharm工具中创建项目目录
  2. 将下载的文件放到工程目录中
  3. 在工程目录中创建一个空文件夹,命名词云图

需要下载的文件:

Excel词频文件点击下载

背景图文件点击下载

字体文件点击下载

项目目录:

三、项目源码

1、创建读取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') 

2、根据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() 

3、将读取的excel 数据保存到数据库对应的表中

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()

4、读取数据库中存入的数据

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_list

5、执行函数并生成词云图

 if __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()# 显示图像

6、词云图效果展示

运行结果是四张表的词频统计之后的图片,我这边就截图了两张表的运行结果。

7、完整代码

import pymysqlimport pandas as pdimport osimport wordcloudimport numpy as npfrom PIL import Imageimport matplotlib.pyplot as plt # MySQL数据库连接配置db_config = {'host': "gz-xxxxxxysql-grp-kb212sal.sql.tencentcdb.com",# 主机名'port': 25648,# 端口'user': "root",# 账户'password': "TDSQL-C@!@Rgpk14.",# 密码'database': 'experience-11', }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()# 显示图像

四、体验感受

4.1、与传统的云数据库对比

Serverless 数据库具有以下特点:
1、自动匹配资源:根据用户自身的业务负载,自动匹配相应的资源,无需用户预估业务规模,自动弹性扩容,充分了体现了云计算的优势。
2、按需付费:用户只需根据实际使用的资源付费,无需关心底层基础设施服务,实现了真正的按需付费,用多少,收多少,不用就不收费。
3、降低数据库选型难度:用户无需关心数据库选型,只需关心自身业务即可,而且完全兼容MySQL 5.7、8.0,迁移没有任何风险。
4、减轻DBA运维工作:Serverless数据库可以根据流量的峰值自动弹性伸缩资源,动态去调整配置,为业务运行提供强有力的后台保障,也在活动期间,大幅度的降低DBA的运维工作量。

4.2、与MySQL对比

NewSQL从传统数据库到云原生数据库的进化,也是数据库在架构上不断随着业务和技术的迭代创新的过程。TDSQL-C MySQL Serverless整体架构其实是把计算层和存储层进行了完全分离,实现了计算节点无状态方式,100%兼容MySQL协议。

不同用户在不同规格和业务情况下,它们的参数是否都能适应好自己数据库所运行的最大状态。TDSQL -C MySQL Serverless通过深度学习算法对于业务进行优先分析,来给用户推荐当前数据库应该将哪些参数调整至什么样的值,能够获得多少的性能提升,给用户提出智能调优方案。

TDSQL -C MySQL Serverless在灵活性、成本上提供了更多的选择、更灵活的配置、更低成本架构,如支持单节点,在性能不需要这么强的情况下,写日志历史库或者合并库,另外的场景,如需要很大容量,并不需要很高的性能,都可以通过这个方式来解决问题。

4.3、和TDSQL MySQL 版有什么区别

TDSQL-C MySQL 版和 TDSQL MySQL 版是腾讯云两个不同的数据库产品,其中,TDSQL-C MySQL 版基于云原生架构设计,融合了传统数据库、云计算与新硬件技术的优势,支持较多的高级功能和特性,为用户提供具备高弹性、高性能、最高 PB 级海量存储、安全可靠的数据库服务;

而 TDSQL MySQL 版是基于主从架构设计,部署在腾讯云上的一种支持自动水平拆分、Shared Nothing 架构的分布式数据库,其业务获取的是完整的逻辑库表,后端会将库表均匀的拆分到多个物理分片节点,提供容灾、备份、恢复、监控、迁移等全套解决方案,适用于海量数据库场景。

详细对比

架构图对比

TDSQL-C MySQL 版

TDSQL MySQL 版

五、适用场景

TDSQL-C MySQL Serverless是腾讯研发的一款兼容MySQL协议的分布式数据库,适用于大并发、高性能、大容量的OLTP类场景。TDSQL分为集中式和分布式版本,分布式版可支持分布式事务,但性能不如单机事务,性能会有一定的损耗,如需使用,需要进行实际测试结果来决定是否使用。

TDSQL-C MySQL 版为用户提供具备超高弹性、高性能、海量存储、安全可靠的数据库服务,可帮助企业轻松应对诸如商品订单等高频交易、伴随流量洪峰的快速增长业务、游戏业务、历史订单等大数据量低频查询、金融数据安全相关、开发测试、成本敏感等的业务场景。以下为您从互联网移动 APP、游戏应用、电商直播教育行业、金融保险企业来介绍 TDSQL-C MySQL 版能够应对这些业务场景的条件和优势。

5.1、互联网移动 App

商用数据库级别的高性能、高可靠,定制开发的多项内核优化以及企业级特性保障业务平稳高效的运行,让研发人员专注于业务逻辑的开发,无后顾之忧。

解决了传统主备架构弹性能力差,业务压力大时的同步效率低,主备切换时间不可控等问题,在提供高性能的同时保证了系统的高可用性和业务的连续性。极大的减轻了运营和运维人员的工作量。

全面兼容开源数据库 MySQL,原有业务应用几乎不用更改即可接入 TDSQL-C MySQL 版,助力企业平滑上云。

自带高可用架构,自动维护数据多副本,自动进行数据的校验和修复,减少人工干预,数据可靠性达99.9999999%。

架构图

5.2、游戏应用

敏捷灵活的弹性扩展,无需预先购买存储,可根据业务需要快速升降级,快速扩容,轻松应对业务峰值。

最高 PB 级海量存储,按存储量计费,自动扩容,免去合区合服的繁琐操作,实现资源和成本的最优配置。

秒级的快照备份和快速回档能力,在多副本的基础上对用户的数据进行连续保护,是互联网和游戏行业的最佳选择。

架构图

5.3、电商直播教育行业

支持秒级的升配,最多可扩展至15个节点,快速弹升 QPS 的能力。解决传统数据库的升配时间会随着存储量的大小、宿主机资源的情况而不断上升的问题。

通过引擎的优化 IOPS 能力的提升,提供高并发状态下优秀的数据写入能力,轻松应对业务峰值。

读写节点和只读节点之间采用物理复制的方式,只读节点与读写节点延迟大大降低,满足电商场景中买家卖家数据一致性读取需求。

架构图

5.4、金融保险企业

多可用区架构,在多个可用区内都有数据备份,为数据库提供容灾和备份。

采用白名单、VPC 网络等全方位的手段,对数据库数据访问、存储、管理等各个环节提供安全保障。

采用共享分布式存储的设计,彻底解决了主从(Master-Slave)异步复制所带来的备库数据非强一致性的问题。

架构图

六、总结

通过TDSQL-C for MySQL Serverless架构云数据库,可以体现云原生架构所带来的核心价值,如一些海量存储场景,存储数据、文件,并且性能也得到了很大的提升,如支持并行计算的能力,提升SQL性能,包括并行扫描,并行的多表连接、排序、分组、聚合等并行能力。

同时,在简单易用上面,也提供了很多参数模板,监控指标优化、备份和日志方面等可视化操作,极大降低了运维成本。

TDSQL-C MySQL Serverless构建了一个产品全景能力图,并不仅仅是平时认知的数据库,通过控制台、客户端,通过凭证管理、审计能够进行一切监控,来给用户提供非常安全的访问环境。再通过参数的调优去辅助、协助用户更好的使用数据库,更优的使用数据库,让业务运行的更快,而不是将数据库不行的时候升配。再到整体架构,支持物理机、云服务器架构,支持异地的灾备,搭建符合公司企业级的业务需求,为公司带来降本提效。

作为一名开发者,我非常庆幸参与了此次活动,感受到了Serverless产品的魅力。通过实践TDSQL-C MySQL Serverless,我也积累到了更多云原生数据库的使用经验,同时也可以通过测评将自己对产品各个方面优势和看法提供出来,希望这篇文章能够带给大家一点帮助!