@TOC
“腾讯云TDSQL-C
产品测评活动”是由腾讯云联合CSDN
推出的针对数据库产品测评及产品体验活动,本次活动主要面向TDSQL-C Serverless
版;
本次参与活动涵盖不同技术层面的用户,初步的产品体验或针对TDSQL-C
产品的自动弹性能力、自动启停能力、兼容性、安全、并发、可靠性等多方面的产品测评,并通过征文的方式输出,参与活动的同时既可以收获相关技术领域的实战经验同时也可获得丰厚的活动激励。
最近在CSDN
上也是看到关于腾讯云 TDSQL-C Serverless
数据库的活动,每次遇到陌生领域的东西,我觉得都很有必要参与一下,这次也是不例外,不过我觉得不仅仅是因为我没使用和了解过,主要是数据库本身就在我们的软件工程中就是非常重要的,随着软件的发展,编程语言对整个系统的影响越来越小,我们所见到的数据,所提交的表单,都需要我们的底层数据库有一个良好的支撑,所以在数据库的选择上是至关重要的;
为什么我觉得腾讯云的 TDSQL-C Serverless
数据库是值得研究的呢?
以下是官网举例的一些优势
MySQL 5.7、8.0
,业务无需改造即可平滑迁移QPS
的超高性能,保证关键业务的连续性,并可进一步提供读写分离以及读写扩展性。PB
级的海量存储,为客户免去面对海量的数据时频繁分库分表的繁琐操作,同时支持数据压缩,在海量数据检索和写入性能上进行了大量优化。VPC
网络隔离。自动维护数据和备份的多个副本,保障数据安全可靠,可靠性达99.9999999%。Serverless
是腾讯自研云原生数据库 TDSQL-C MySQL 版的无服务器架构版,自动扩缩容,仅按照实际使用量计费,不用不计费,轻松应对业务数据量动态变化和持续增长。说实话,光看优点很吸引人,但是对于没有使用过的用户来说,谁知道是不是吹牛呢?真金不怕火炼,我带着这个想法开始了对它数据库的一个测评!
本次测评内容主要围绕两方面进行:
整个环境构建非常的简单其实,官方的文档特别明了,这里我简要概述一下我的搭建过程,正常到 TDSQL-C 控制台是没有集群的,是下面这个状态
然后我们点击去购买集群,就会到购买页
根据我们的地区,和实例形态就可以进行购买了,之后下一步下一步设置密码和实例的配置就可以创建成功了,整个实例是按量付费的,而且没有流量来的时候实例是暂停的,所以根本不需要多少钱,所以大家也不用担心,参与实验的成本特别低!
当涉及兼容性测试时,我主要是重点测试以下几个方面的兼容性:
tdsql
数据库中正确地创建和使用,以确保查询性能和数据完整性的兼容性。tdsql
数据库中正确执行,并确保其逻辑和功能的兼容性。tdsql
数据库中正确定义和使用,以确保数据的一致性和查询结果的兼容性。tdsql
数据库中正确创建,并保持数据的完整性和兼容性。tdsql
数据库中正确触发和执行,以确保业务逻辑的兼容性和数据的一致性。在我们的很多老项目中,存储过程的使用非常常见,并且视图在系统中也广泛运用。因此,对于兼容性测试来说,这些方面都是不可或缺的。我们需要确保这些核心组件在新系统中能够正确运行,以保证平稳的迁移和功能的无缝衔接。
这里我是通过利用我的个人线上博客进行测试的,数据库中还有一些文章数据,数据库版本如下:
TDSQL-C Servless数据库版本如下:
然后我们开始构建我们的一些测试数据!!
SQL如下:
create view posts_view as select * from posts
这里我主要创建了三个索引类型:
post_slug
创建uuid
字段创建author_id
和 created_by
构建复合索引这样可以有效观察数据库是否能够平滑将各种索引进行迁移
我的触发器逻辑是:当文章的title
进行修改后就增加一条记录到log_table
表中,记录好前值和修改后的值
首先我创建了一张 log_table
CREATE TRIGGER alter_event
BEFORE UPDATE ON posts
FOR EACH ROW
BEGIN
IF NEW.title <> OLD.title THEN
INSERT INTO log_table (event_type, event_description) VALUES ('Update', CONCAT('title updated from ', OLD.title, ' to ', NEW.title));
END IF;
END;
然后我们将posts
表中的title
字段进行修改,看看触发器是否正常:
这样我们的触发器就算可以了!
这个事件的主要逻辑就是每一秒对 log_table
插入一条测试数据:
CREATE EVENT insert_event
ON SCHEDULE EVERY 1 SECOND
COMMENT 'This event inserts a new record every second'
DO
BEGIN
INSERT INTO log_table (`event_type`, `event_description`)
VALUES ('test event', 'test event');
END;
这个存储过程的逻辑就是查询 posts
表中的 id
字段,然后循环将 id
字段改为大写进行修改
DELIMITER //
CREATE PROCEDURE ConvertIdToUpperCase()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE currentId VARCHAR(255);
-- 游标声明
DECLARE cur CURSOR FOR
SELECT id FROM posts;
-- 游标异常处理
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
-- 循环读取并更新每一行数据
read_loop: LOOP
-- 读取下一行数据
FETCH cur INTO currentId;
IF done THEN
LEAVE read_loop;
END IF;
-- 将 id 字段转换为大写
UPDATE posts SET id = UPPER(currentId) WHERE id = currentId;
END LOOP;
-- 关闭游标
CLOSE cur;
-- 打印操作完成信息
SELECT 'Id 字段转换为大写完成。';
END //
DELIMITER ;
到现在为止,我们的测试环境就算构建的差不多了
这里我们测试主要过程是:
mysqldump
将我们目前的数据进行导出dmc
平台进行sql
文件导入mysqldump -uroot -h 81.69.6.xx -p --port=3307 --routines --triggers --events -B blogs.szaecs.com > backup.sql
得到 backup.sql
后,我们通过腾讯云的 DMC
管理平台进行导入,首先在集群页面找到登录按钮,然后逐步按照截图进行即可!
点击开始后就可以开始执行任务了,这里我们可以看到已经成功了
接下来就是验证索引、存储过程、视图、事件、触发器是否正常
主要看视图是否能够正常查询,并且数据是否正常
综合来看,对于我要测试的一些场景和数据来说是完全兼容且完整的,通过 索引、存储过程、触发器、事件、视图 来看,
我们日常使用的Mysql
的数据库和TDSQL-C Mysql Serverless
是完全兼容!这意味着,对于我们以前的传统数据库可以无缝完好地迁移到 TDSQL-C Mysql Serverless
中,而无需担心数据丢失或兼容性问题。
这其实是一个很重要很关键的事情,数据库是我们业务的核心,当我们决定迁移数据库时, 确保兼容性是至关重要的。
这里的可用性测试我主要是通过一些高危操作,例如误删数据等,进行特定库表恢复,其实可用性测试远不止如此,但是我们对于数据库最重要的就是数据的安全性,所以以这个为例,希望大家可以更好地判断数据库的选型!
无论是按时间点恢复还是按备份集恢复,都需要先将备份数据回档到原集群中,然后进行数据比对。
首先,在测试前,我们也是先手动全量备份一下集群,正常是可以通过设置每天自动备份的,这里为了更好的演示,我先进行一次全量备份:
这样就是全量备份好了,然后我们模拟删除一张表的数据,这里我把 log_table
这张表的数据删除了
因为这里我知道时间,所以这里我直接回档到 19:00,也可以按照备份文件回档
事实证明,当集群中的某个表或数据被误删或误修改,需要将其恢复到原有状态时,TDSQL-C Mysql Serverless
数据库是完全能够保护数据的完整性的,用户可以根据时间点和备份集进行选择恢复,并且在创建集群后,系统是默认开启自动备份,根据日志生成速率等因素,实现24小时不间断备份,备份文件生成周期间隔6~48小时不等,用户也可以根据业务需求,在控制台对备份保留时间进行设置,基于此,当对集群操作库表级恢复时,控制台会直接向用户展示可恢复的时间点和备份集。
其实最终不管怎么测试,我也没有办法将整个产品的能力都测试出来,不管是兼容性还是可用性测试,都是我的个人观点,不过最终测试结果,也证实了产品宣传的真实性;
经过这次的深入体验,我也想到一个场景是我可以替换成TDSQL-C Mysql Serverless
的 ,像我们的开发测试环境和一些低频查询场景,夜间几乎没有查询或写入,然后我们就可以通过 serverless数据库
的特性,利用业务负载自动启动停止,无感扩缩容。计算节点关闭期间也不计费,设置最小cpu
和最大cpu
实现弹性扩缩容根据实际负载按秒计量,按小时结算。
这样我们既满足了业务对计算的需求,又在低峰节约成本,最大化利用资源。
同时我也总结了一下 TDSQL-C Serverless
数据库系统相较于传统数据库系统具备 4 个方面的优势:
TDSQL-C Serverless
数据库可以基于工作负载实现自动扩缩容, 使实际资源使用量实时匹配于工作负载,避免因预先部署资源不足导致的业务容量瓶颈。最后,希望本文能够为大家在数据库选型及 TDSQL-C Serverless
版的使用上提供一些有效的帮助。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。