近日,企业级开源分布式数据库厂商PingCAP正式发布TiDB 7.4 (DMR)版本。TiDB 7.4将是TiDB 7系列最后一个DMR版本,针对MySQL 8.0做出了诸多优化。作为MySQL的全面升级,TiDB的技术领先性帮助用户应对不断变化的业务数据挑战,实现业务的持续增长和创新。TiDB在高度兼容MySQL 8.0特性的同时,也将持续提供技术支持,确保用户能够平滑地迁移各类业务应用程序,从而减少迁移过程中的工作量和风险。
TiDB作为新一代分布式关系型数据库,从诞生第一天起拥抱MySQL生态,不断兼容MySQL 5.7和MySQL 8.0,为用户带来更加顺畅的迁移和使用体验。TiDB兼容MySQL的语法命令,MySQL客户端、MySQL驱动程序以及部分MySQL工具可以直接在TiDB上运行。对于绝大多数在MySQL上运行的应用程序来说,几乎不需要修改任何代码。
MySQL 8.0做出了诸多功能特性的新增或优化,例如公共表表达式(CTE)、窗口函数和资源管控的支持,而且还通过多值索引和优化查询执行提供更强的性能。随着MySQL 8.0的发布,TiDB在兼容MySQL 5.7的基础之上,扩展了对MySQL 8.0的兼容。TiDB 7.4现支持以下MySQL 8.0关键特性:
公共表表达式(CTE)
TiDB从5.1版本开始支持ANSI SQL 99标准的CTE及其递归的写法。在编写复杂查询的时候,利用公共表表达式(CTE)可以构建一个临时的中间结果集,在SQL语句中引用多次,提高SQL语句编写效率,可读性,执行效率。在TiDB 7.4中,列式存储引擎TiFlash也同样支持CTE。
窗口函数(window function)
窗口函数能够以SQL形式的写法,来完成一些复杂的数据整理工作,协助用户发掘数据价值。例如,数据分组排序,变化趋势分析等。TiDB 7.4完整支持了MySQL 8.0提供的窗口函数,并且大部分都可以下推到TiFlash运行。
资源管控
在多个应用共享一个TiDB集群的场景下,资源隔离可以有效降低应用负载变化对其他应用产生的影响,资源管理还能解决批量作业及后台任务对核心业务的影响,以及突发的SQL性能问题拖慢整个集群,是提升大集群稳定性的重要能力。随着从7.1版本引入资源管控,TiDB能够对集群资源做合理分配,提升数据库的稳定性,并降低数据库的使用成本。TiDB 7.4兼容了MySQL指定资源组的语法以及hint,降低用户学习成本和迁移成本。同时,TiDB的资源隔离能够更有效地对最重要的I/O资源进行管控,达到和MySQL同等甚至更好的效果。
基于角色的权限管理
TiDB 7.4支持MySQL兼容的角色管理。基于角色的授权,可以简化权限管理的工作,并降低了出错的风险。通过将权限与角色相关联,可以更好地控制数据库的访问。用户可以将不同场景的工作进行分类,创建对应角色,并把角色授予有权限的数据库用户,数据库用户在实际操作时,根据场景不同,切换角色,降低误操作的可能。
增强uft8mb4字符集
MySQL 8.0的另一个重要变化是默认字符集变成了更通用的uft8mb4,默认排序方式变为utf8mb4_0900_ai_ci。TiDB 7.4也加入了utf8mb4_0900_ai_ci的排序方式,以便更轻松地进行系统迁移。为了同时兼容MySQL 5.7和MySQL 8.0,TiDB支持了MySQL兼容的变量default_collation_for_utf8mb4。允许用户调整utf8mb4字符集的默认排序方式。该方式确保了TiDB在不同MySQL版本之间的平滑过渡,并能够适应不同应用程序的需求。
JSON多值索引(Multi-valued Index)
多值索引是对普通索引结构的延伸。不同于普通索引与表1:1的对应关系,多值索引与表的对应是N:1。与MySQL相同,条件中利用MEMBER OF(),JSON_CONTAINS(),JSON_OVERLAPS()这几个函数检索时,都可能会选择到多值索引。TiDB 7.4支持了"多值索引",允许对JSON类型中的某个"数组"进行索引,从而提高了对JSON数据的检索效率。与MySQL用法完全相同意味着在迁移过程中,无需修改数据建模或应用程序,用户可以继续按照熟悉的方式操作JSON数据。
修改会话变量的hint ( SET_VAR())
MySQL 8.0引入了一个特殊的hint SET_VAR()。利用这个hint,可以在语句运行期间修改某个会话级系统变量。TiDB 7.4支持此hint,提升了系统变量设置的灵活度,能够针对SQL语句做“定制”。
CHECK约束
CHECK约束是一致性约束检查的一种,用来维护数据的准确性。CHECK约束可以用于限制表中某个字段的值必须满足指定条件。当为表添加CHECK约束后,在插入或者更新数据时,TiDB会检查约束条件是否满足,如果不满足,则会报错。
MySQL在8.0之前只支持CHECK约束的语法,在实际运行中并不会真正去检查,在8.0之后才全面支持。TiDB 7.4中添加了该功能,用户可以通过变量tidb_enable_check_constraint手工开启。
为了降低用户数据迁移的复杂度,TiDB推出了一款工具TiDB Data Migration (DM)。它能够协助用户从与MySQL协议兼容的数据库(MySQL、MariaDB、Aurora MySQL)到TiDB的全量数据迁移和增量数据同步。DM支持DDL同步,分库分表合并,并内置多种过滤器以灵活适应不同场景,切实地提升了数据迁移的效率。