TiDB 6.5 LTS 发版

news2025/1/17 23:03:53

在 2023 伊始,我们很高兴向大家宣布,TiDB 6.5 LTS 版本已经发布了。这是 TiDB V6 的第二个长期支持版(上一个是 TiDB 6.1),除了携带了诸多备受期待的新特性,同时也将得到 TiDB 开发社区的长期维护,是推荐企业级用户采用的最新版本。

TiDB 6.5 LTS.png

在这个版本中,TiDB 专注于如下几个主题:

  • 产品易用性进一步提升
  • 内核不断打磨,更加成熟
  • 多样化的灾备能力
  • 应用开发者生态构建

相信长期关注我们的朋友已经发现,这些主题似曾相识。的确如此,TiDB 近年的发展几乎都围绕着它们开展。我们期望 TiDB 成为更易用,对开发者更友好,且更成熟的企业级数据库,而这个追求也并没有尽头。

产品易用性进一步提升

大家也许不止一次听说过,易用性之于 TiDB 是非常关键的理念。毕竟,TiDB 伊始是为了解决分库分表带来的麻烦,这也使得易用性在 TiDB 研发过程中贯穿始终。在新版本中,我们提供了更多的让用户解放心智的能力。

AND 运算下的索引归并读取

对于数据服务和洞察场景,用户往往会基于诸多查询条件的组合进行数据筛选。例如在物流场景中,用户可能会根据下单日,仓库 ID,转运人,送达日,目标地址等等不同维度进行筛选再分析。而这些条件单独来看,并不一定具备很好的选择性,只有组合起来才能将数据限定在一个小范围。如果条件的组合不多,我们尚可使用特定的组合索引覆盖,但很可能在这类场景中,组合以数十记,完全无法为每个组合都创建特定索引。在新版本中,TiDB 支持根据 AND 条件组合同时选中多组索引,并计算它们的交集再读取实际表数据。这种能力,使得用户可以仅仅为单列创建少量索引,以达到更好的选择性以及更优的性能。

Screen Shot 2023-01-03 at 00.50.14.png

集群闪回

有时候,用户会希望整个集群快速恢复到之前的某个时间点。例如,由于游戏服务器新版本数据设定问题,将一把绝世好剑设定为 1 元,造成新版发布后一小时内人手一把。若仅仅如此也就算了,开发者可以很容易回收或这个道具,但这种事故还有次生灾害,例如稀有 Boss 被滥杀,稀有掉落随之泛滥,整个游戏内容崩坏。这时候作为游戏设计师,你可能会希望时间能回到犯错之前的那一刻,让你修正那个令人追悔莫及的错误。在新版本中,TiDB 就提供了这个能力,它支持用简单一条命令向 GC 时间内的任意时间点进行全集群闪回,就像下面这样。

FLASHBACK CLUSTER TO TIMESTAMP '2022-09-28 17:24:16'; 

我们当然希望这不会是一个常见的状况,但这并不表示需要闪回的时机千年难遇:闪回能力也可用于日常操作,例如将测试环境恢复到测试开始前的状态,以供反复使用。

完整的大事务自动拆分支持

在前序版本中,我们支持了针对删除的大事务自动拆分支持。而在新版本中,TiDB 完整支持了针对插入和修改的大事务拆分。在以往版本中,TiDB 用户经常要面对的一个问题就是,一些大规模的数据变更维护操作,例如过期数据删除,大范围数据修订,或者根据查询结果回写数据等操作,会遇到超过 TiDB 单条事务上限的问题,这是由于 TiDB 单一事务需要由单一 TiDB Server 作为提交方而带来的限制,这时候用户往往不得不手动想办法拆小事务以绕过该限制。但在实际使用中,上述类型的数据变更未必真的需要作为单一事务确保原子性,例如数据淘汰和数据修订,只要最终执行完成,哪怕事务被拆开多次执行也并不会影响使用。在 TiDB 6.5 中,我们提供了将大事务自动拆分的能力,例如按照 t1.id 以 10000 条为大小分批数据更新,可以简单使用如下语句完成:

BATCH ON t1.id LIMIT 10000 update t1 join t2 on t1.a=t2.a set t1.a=t1.a*1000;

更详细的说明请参考文档。

TiFlash 结果物化(实验特性)

TiFlash 在过往版本中有一个很大的缺憾是无法在读写事务中使用:经常用户希望将 TiFlash 的计算结果进行回写以供高并发读取(类似物化效果)。从 v6.5.0 起,TiFlash 支持通过 INSERT SELECT 语句回写结果进行物化,节省系统资源并提高响应速度。

INSERT INTO top_payments SELECT MAX(amount) FROM payments;

在执行上述 INSERT INTO SELECT 语句时,TiDB 可以将 SELECT 子查询下推到 TiFlash 以提供高速分析计算,并将返回结果通过 INSERT INTO 可以保存到指定的 TiDB 表中。值得一提的是,该功能结合前述大事务拆分可以实现大量结果集物化。

高性能全局单调递增 AUTO_INCREMENT 列

TiDB 作为一款分布式数据库,以往在使用 AUTO INCREMENT 列创建主键时,仅保证在每个 TiDB 实例中序列递增,而跨 TiDB 实例则无法保证。但实际使用中,用户仍然经常会遇到需要严格单调递增主键的时候,例如以主键隐式代表时间维度,确定事件发生顺序。在 6.4 版本中,我们加入了高性能的全局单调递增主键的支持,以兼容 MySQL 的行为。该模式下,TiDB 将采取中心化的主键分配以确保单调递增,即使跨 TiDB 实例访问,ID 也不会出现回退,且针对其的写入也可轻松达到数万的 TPS。

使用 TTL (Time to Live) 来周期性地删除过期数据(实验特性)

维护数据的生命周期在 TB 以上规模下并不是很容易的事情:由于数据规模大,寻找并清理过期的数据往往需要消耗相当的算力,有时用户为了更快清理数据甚至被迫使用分区表,以删除分区的方式来进行快速清理。更麻烦的是,用户需要维护特定的任务以不断定期淘汰数据。在新版本中,TiDB 提供了 Time to Live (TTL) 能力,使得用户可以设定行级别的生命周期控制策略。通过为表设置 TTL 属性,TiDB 可以周期性地自动检查并清理表中的过期数据。当开启时,TTL 会以表为单位,并发地分发不同的任务到不同的 TiDB 实例节点上,进行并行删除处理,且不影响集群性能。更详细的说明请参考文档。

内核关键特性打磨和增强

TiDB 包含繁多的特性集合,但其中有些仍需不断打磨,例如 JSON 虽然已获支持许久,但实际能力却尚需完善。在新版本中,我们针对重要特性集合用力打磨,以期提供给用户更「丝滑」的体验,让 TiDB 的重大特性以更完善的方式呈现在用户面前,也让 TiDB 演进方式更稳重更有质量。

首先是 DDL 加强。支持在线 DDL 是 TiDB 的核心优势之一,在过往一年中,我们加入了对并行 DDL 的支持,使得例如 SaaS 等多租户场景下不会因为同时进行的 DDL 互相阻塞,而 DDL 干扰 DML 的情况也通过 Metadata Lock 得以解决。在新的 6.5 版本中,TiDB 支持了类似 Lightning 注入 SST 的设计,针对需要追溯的历史数据直接使用 SST 构建的方式进行生成,大幅提高了 DDL 的构建速度,最快可达 10 倍提升

如下图所示,以 TiDB 6.1 版本为基准值,新版除了取得了数量级的提速,且对比 CockroachDB v22.2 和当前版的 AWS Aurora 也快 2-3 倍。

Screen Shot 2023-01-03 at 10.15.34.png

其次是 JSON 的支持打磨。JSON 对于需要灵活数据结构的场景非常重要,因此在移动端,游戏开发等场景中广泛使用。从 6.2 版本以来,在这半年中 TiDB 陆续引入了完整的 MySQL 5.7 兼容函数,针对 JSON 的表达式索引支持,更多的生态工具兼容以及更好的 TiFlash 引擎支持。

再者是 TiDB 全局内存控制。自 v6.5.0 起,TiDB 全局内存控制已能够跟踪到 TiDB 中主要的内存消耗。当单个会话的内存消耗达到系统变量 tidb_mem_quota_query 所定义的阈值时,将会触发系统变量 tidb_mem_oom_action 所定义的行为 (默认为 CANCEL,即取消操作)。当全局内存消耗达到 tidb_server_memory_limit 所定义的预设值时,TiDB 会尝试 GC 或取消 SQL 操作等方法限制内存使用,保证 TiDB 的稳定性,对内存的使用效率也更加高效。

最后是降低累积的悲观锁对性能的影响。 在一部分交易系统,尤其是银行业务中,客户应用会在悲观事务中利用 select for update 先锁定一条记录,从而达到对数据一致性的保护,减少事务中后续操作失败的可能,比如

BEGIN;
SELECT c FROM sbtest1 WHERE id = 100 FOR UPDATE; 
UPDATE sbtest1 SET k = k + 1 WHERE k = ?; 
COMMIT;

而在 TiDB 中,对一行记录反复的 select for update,会造成这条记录的查询性能下降。 在 v6.5.0 中,我们对这部分机制进行了优化, 通过记录连续的锁标记,降低了累积的悲观锁对查询性能的影响,QPS 可大幅提升 10 倍以上。

多样化的灾备能力

在过往版本中,TiDB 主要依赖 BR 进行静态的备份恢复,而在 6.2 之后的新版中,TiDB 提供了 PITR 能力,使得数据库可以更灵活地恢复到任意时间点。

TiDB PITR(Point-in-Time Recovery)是结合了 BR 和变更捕获(Change Data Capture)两种能力的灾备特性。以往 BR 的静态灾备只能将数据恢复到备份的时间点,如果要更提供针对更新和更多时间点的恢复,则相应需要提高备份频率。这不但会加重备份对在线业务的负担,也需要更多存储成本。使用 PITR 则可以摆脱这个烦恼,用户无需不断进行全量备份,而是可经由一个全量备份结合增量共同完成针对任意时间点的数据恢复。

Screen Shot 2023-01-03 at 01.48.32.png

经过半年左右的持续改进,在新版本中,我们减少了 PITR 备份文件大小和数量,加强了稳定性,提升了性能。 例如:确保在绝大多数异常场景下 RPO < 5mins, 单个 TiKV 的备份速度达到100MB/s等。

与此同时,在 6.5 版本中,TiCDC 的吞吐获得了得了至数倍的提升。通过对 TiCDC 内部的设计和实现的不断优化,针对数据复制场景,当下游为 Kafka 集群时,针对大单表场景的吞吐量得到了极大的提升,单个 TiCDC 节点可以支持35k row/s QPS,吞吐量可以达到 50MB/s,并将延迟控制在 2 秒左右,而内存使用量只有之前版本的50%左右。 针对跨区域主备集群容灾场景,TiCDC 单个节点的吞吐量可以达到 30MB/s,并且其延迟也可以稳定在 2 秒左右,稳定性大幅度提高。

其次,在6.5 版本中,DM 正式发布了在数据迁移过程中的增量数据持续校验功能,该特性只对新增或变更的数据进行校验,而不是对整个数据集进行校验,在确保数据迁移过程的准确性和可靠性的同时,大大减少数据校验的时间和资源消耗。尤其是在迁移一些重要系统时,该特性可以让数据迁移过程更加安全。

除此以外,新版本支持了在下游集群使用水位线进行一致性读取的能力:在新版本中,TiCDC 可以在向下游写入时提供特殊的时间戳,而下游集群则可以自动使用该时间戳进行一致性读取而无需担心读到的事务不完整。这使得下游集群在需要严苛事务保证的场景下,也可以良好承担读流量分流的职责。

Screen Shot 2023-01-03 at 02.04.38.png

应用开发者生态构建

在以往版本中,TiDB 更强调 DBA 的使用体验。但在近期的更新中,你也许已经发现我们逐渐开始聚焦 DBA 以外的应用开发者体验。在新版中,我们强化了应用开发所需的生态环境构建,例如这半年来 TiDB 通过增加对 Savepoint,User Level Lock,Multiple Schema Change 等功能的支持,完善了针对常见应用框架 django,prisma 等的支持。与此同时,我们也引入了更多上下游生态厂商的战略合作:Vercel,Hashicorp,Retool 等。在 6.5 版本中,TiCDC 增加了针对向 Object Storage 写入的支持。对象存储是一种面向云的存储服务,具有高可扩展性、高可用性、低成本等优势。使用 TiCDC 将数据同步到对象存储,可以帮助用户实现数据的长期存储、数据的跨区域复制等目的。另外,这使得 TiDB 在云环境下能直接打通向数仓和数据湖环境的通路。更好的生态支持,将使得开发者在使用 TiDB 构建应用时,拥有更多选择,也更简便。

总结

作为 TiDB 版本 6 的第二个长期支持版,TiDB 6.5 已经发布。我们希望借助这个版本为更多用户提供更易用且更成熟的企业级数据库。更详细的变更情况请参阅 Release Notes。欢迎各位和我们一起开启新的奇妙旅程。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式(一):DDD领域驱动设计

DDD重架构&#xff0c;轻业务&#xff01; – 从单体架构开始快速验证DDD设计模式 贫血模型充血模型防腐层 DDD四层架构规范DDD单体架构和微服务架构隔离 本地单体SPI 插拔式扩展业务模式Nacos 插拔式扩展业务模式 ---- 服务名作为服务service code DDD清晰架构 – 构建领域仓库…

加解密与HTTPS(5)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e;咱们大学读完之后有毕业证书&#xff0c;并且这个证书可以在学信网查询。专业上有注会、CCIE、律师证等&#xff0c;可以在国家职业认证机构或委托机构的网站上查…

【UCIe】UCIe DLP/DLLP 介绍

&#x1f525;点击查看精选 UCIe 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0…

DNS协议——域名解析

DNS协议 DNS协议是一个应用层协议&#xff0c;作用是域名解析   使用DNS协议的原因&#xff0c;就是因为哪怕是点分十进制&#xff0c;对于我们都不太友好&#xff0c;因此使用域名来代替IP地址&#xff0c;比如www.baidu.com   最开始的时候&#xff0c;DNS系统只是一个普…

java基于ssm的个人博客系统个人博客网站个人博客项目源码

简介 Java ssm开发的个人博客系统&#xff0c;可以发布博客&#xff0c;照片&#xff0c;站长留言。 演示视频 https://www.bilibili.com/video/BV1sf4y1y7Ne/?share_sourcecopy_web&vd_sourceed0f04fbb713154db5cc611225d92156 技术 mysql,SSM,css,js,jq 功能 简单…

laravel5.5之laravel-admin的使用

目录 一、首先确保安装好了laravel&#xff0c;并且数据库连接设置正确 二、运行下面的命令来发布资源 三 、后台项目文件 四、静态文件 五、访问后台 六、参考文档 一、首先确保安装好了laravel&#xff0c;并且数据库连接设置正确 composer require encore/laravel-adm…

Verilog语法笔记(夏宇闻第三版)-简单的Verilog HDL模块

目录 简单的Verilog HDL程序介绍&#xff1a; 模块的结构 &#xff1a; 模块的端口定义&#xff1a; 模块内容&#xff1a; I/O说明的格式&#xff1a; 内部信号说明&#xff1a; 功能定义&#xff1a; 简单的Verilog HDL程序介绍&#xff1a; 下面先介绍几个简单的Veri…

高可用Keepalived在Linux中的应用

一、高可用 1.高可用介绍 &#xff08;1&#xff09;普通理解 两台服务器启动相同的业务系统&#xff0c;当有一台机器宕机&#xff0c;另外一台服务器快速接管服务&#xff0c;对于用户来讲是无感知的。 &#xff08;2&#xff09;专业理解 高可用是分布式系统架构设计中必…

Linux安装Docker与基本使用

Docker 常用于服务部署的一种方案 准备 1.云服务器或者虚拟机 2.Centos 系统 3.下载XFtp 和 XShell 安装Docker 首先删除系统中旧版本Docker或者残留文件 #卸载所有 yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-lo…

Spring从入门到精通 | 动力节点老杜

目录 一、Spring启示录 1、OCP开闭原则 2、依赖倒置原则&#xff08;DIP原则&#xff09; 3、控制反转&#xff08;重点&#xff09; 4、Spring框架&#xff08;重点&#xff09; 二、Spring概述 Spring的8大模块 ​编辑 Spring特点 1、轻量 2、控制反转IOC 3、面向…

Qt Mac阻止和启用休眠

阻止电脑休眠&#xff0c;在win下是使用win api实现的&#xff0c;用Qt跨平台开发&#xff0c;实现Mac的阻止休眠&#xff0c;也需要Mac本身的api来实现。经过网上查资料&#xff0c;找到了一个能用的&#xff0c;链接如下。原生mac开发用的是Object-c&#xff0c;所以该实现用…

Kyligence 客户案例“泰康集团精细化经营分析与运营平台”获评数据智能最佳实践案例

近日&#xff0c;“2022 爱分析中国数据智能最佳实践案例”评选结果正式揭晓。Kyligence 携手泰康集团申报的“泰康集团精细化经营分析与运营平台”项目经过多轮角逐脱颖而出&#xff0c;最终获评“中国数据智能最佳实践案例”。同时&#xff0c;Kyligence 通过综合能力评估&am…

Linux Shell脚本编程提高

Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shel编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应…

保姆级教程 | 将Oxylabs住宅代理和数据中心代理与MultiLogin集成的操作步骤

MultiLogin是一款集多账户管理、浏览器指纹隐藏等功能于一体的实用解决方案。在您抓取所需公共数据时&#xff0c;将MultiLogin与值得信赖的代理结合使用&#xff0c;可以大幅降低被网站阻止情况发生的概率。 在本篇教程中&#xff0c;将带您学习简单的集成流程&#xff0c;手把…

数说热点 | 2022商业地产的“破局”与“新生”——逆境之下探索新兴可能

2022年&#xff0c;受国内新冠肺炎疫情因素影响&#xff0c;我国经济下行压力明显加大&#xff0c;尤其是部分产业链、供应链受到冲击&#xff1b;部分区域接触型、聚集型特征明显的线下消费表现低迷&#xff0c;给实体商业经营带来挑战。从市场表现看&#xff0c;2022年1-9月&…

数据架构之数据血缘:数据从哪里来,到哪里去

为了直观的感受数据血缘&#xff0c;先从网上找了两张典型的数据血缘的图。下图特点是按照数据仓库数据管理模型给出了基于表&#xff08;实体&#xff09;的数据血缘图。 此图是截取Solidatus软件生成的数据血缘图&#xff0c;该图与上图的区别在于给出了基于属性的数据血缘图…

【纯净题目版】笔试题-2023禾赛-FPGA

题目背景 笔试时间&#xff1a;2022.06.22应聘岗位&#xff1a;FPGA开发工程师 题目评价 难易程度&#xff1a;★★☆☆☆知识覆盖&#xff1a;★☆☆☆☆超纲范围&#xff1a;☆☆☆☆☆值得一刷&#xff1a;★☆☆☆☆ 文章目录1. 使用最少的电路实现二分频&#xff0c;给出…

ubuntu20.04 arm-linux-gnueabihf交叉编译opencv4.7.0 与opencv-contrib-4.7.0

安装交叉编译工具链编译的目标硬件是RV1126&#xff0c;编译工具链为32位的arm-linux-gnueabihf&#xff0c;本次使用的是8.3版本&#xff0c;可在Downloads | GNU-A Downloads – Arm Developer进行下载。下载后&#xff0c;解压到自己的安装目录&#xff0c;比如解压到/opt目…

Seata客户端

一个调用链中的所有微服务都是seata的客户端&#xff0c;都必须走下面的步骤 第一步&#xff1a;创建undo_log表 下载地址&#xff1a;https://github.com/seata/seata/tree/develop/script/client/at/db -- for AT mode you must to init this sql for you business databa…

海南三亚游记2022-2023跨年

文章目录1、概述2、交通2.1、广州飞三亚2.2、做高铁&#xff0c;三亚到海口2.3、海口飞广州3、风景3.1、吉阳区3.2、天涯区4、美食5、住宿6、补充2014年海南游记1、概述 2022-12-30~2023-01-04&#xff0c;海南三亚游记&#xff0c;旨在记录攻略 之前已经去过海南2次&#xff…