其他
分库分表麻烦?试试TiDB!
什么是NewSQL
SQL,传统关系型数据库,例如 MySQL noSQL,例如 MongoDB,Redis newSQL
传统SQL的问题
升级服务器硬件
数据分片
NoSQL 的问题
优点
高可用性和可扩展性,自动分区,轻松扩展 不保证强一致性,性能大幅提升 没有关系模型的限制,极其灵活
缺点
不保证强一致性,对于普通应用没问题,但还是有不少像金融一样的企业级应用有强一致性的需求。 不支持 SQL 语句,兼容性是个大问题,不同的 NoSQL 数据库都有自己的 api 操作数据,比较复杂。
NewSQL 特性
NewSQL 的主要特性
SQL 支持,支持复杂查询和大数据分析。 支持 ACID 事务,支持隔离级别。 弹性伸缩,扩容缩容对于业务层完全透明。 高可用,自动容灾。
三种SQL的对比
TiDB怎么来的
TiDB社区版和企业版
TIDB核心特性
水平弹性扩展
分布式事务支持
金融级高可用
实时 HTAP
云原生的分布式数据库
高度兼容 MySQL
OLTP&OLAP(自学)
OLTP(联机事务处理)
OLAP(联机分析处理)
特性对比
设计角度区别
TiDB 整体架构
TiDB的优势
纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容 支持 SQL,对外暴露 MySQL 的网络协议,并兼容大多数 MySQL 的语法,在大多数场景下可以直接替换 MySQL 默认支持高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务透明 支持 ACID 事务,对于一些有强一致需求的场景友好,例如:银行转账 具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景
TiDB的组件
TiDB Server
PD (Placement Driver) Server
一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点); 二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等); 三是分配全局唯一且递增的事务 ID。
TiKV Server
TiSpark
TiFlash
TiKV整体架构
Region分裂与合并
Region调度
分布式事务
高可用架构
TiDB高可用
PD高可用
TiKV高可用
应用场景
MySQL分片与合并
直接替换MySQL
数据仓库
作为其他系统的模块
应用案例
TiDB与MySQL兼容性对比
TiDB支持MySQL 传输协议及其绝大多数的语法。这意味着您现有的MySQL连接器和客户端都可以继续使用。大多数情况下您现有的应用都可以迁移至 TiDB,无需任何代码修改。 当前TiDB服务器官方支持的版本为MySQL 5.7 。大部分MySQL运维工具(如PHPMyAdmin, Navicat, MySQL Workbench等),以及备份恢复工具(如 mysqldump, Mydumper/myloader)等都可以直接使用。 不过一些特性由于在分布式环境下没法很好的实现,目前暂时不支持或者是表现与MySQL有差异 一些MySQL语法在TiDB中可以解析通过,但是不会做任何后续的处理 ,例如Create Table语句中Engine,是解析并忽略。
TiDB不支持的MySql特性
存储过程与函数 触发器 事件 自定义函数 外键约束 临时表 全文/空间函数与索引 非 ascii
/latin1
/binary
/utf8
/utf8mb4
的字符集SYS schema MySQL 追踪优化器 XML 函数 X-Protocol Savepoints 列级权限 XA
语法(TiDB 内部使用两阶段提交,但并没有通过 SQL 接口公开)CREATE TABLE tblName AS SELECT stmt
语法CHECK TABLE
语法CHECKSUM TABLE
语法GET_LOCK
和RELEASE_LOCK
函数
自增ID
Duplicated Error
的错误信息。tidb_allow_remove_auto_inc
系统变量开启或者关闭允许移除列的 AUTO_INCREMENT
属性。删除列属性的语法是:alter table modify
或 alter table change
。AUTO_INCREMENT
属性,移除该属性后不可恢复。SELECT 的限制
不支持 SELECT ... INTO @变量
语法。不支持 SELECT ... GROUP BY ... WITH ROLLUP
语法。TiDB 中的 SELECT .. GROUP BY expr
的返回结果与 MySQL 5.7 并不一致。MySQL 5.7 的结果等价于GROUP BY expr ORDER BY expr
。而 TiDB 中该语法所返回的结果并不承诺任何顺序,与 MySQL 8.0 的行为一致。
视图
默认设置差异
字符集
TiDB 默认: utf8mb4
。MySQL 5.7 默认: latin1
。MySQL 8.0 默认: utf8mb4
。
排序规则
TiDB 中 utf8mb4
字符集默认:utf8mb4_bin
。MySQL 5.7 中 utf8mb4
字符集默认:utf8mb4_general_ci
。MySQL 8.0 中 utf8mb4
字符集默认:utf8mb4_0900_ai_ci
。
大小写敏感
lower_case_table_names
的配置TiDB 默认:
2
,且仅支持设置该值为2
。MySQL 默认如下:
Linux 系统中该值为 0
Windows 系统中该值为
1
macOS 系统中该值为
2
参数解释
lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的 lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写 lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的
timestamp类型字段更新
TiDB 默认: ON
,且仅支持设置该值为ON
。MySQL 5.7 默认: OFF
。MySQL 8.0 默认: ON
。
参数解释
explicit_defaults_for_timestamp=off,数据行更新时,timestamp类型字段更新为当前时间 explicit_defaults_for_timestamp=on,数据行更新时,timestamp类型字段不更新为当前时间。
外键支持
TiDB 默认: OFF
,且仅支持设置该值为OFF
。MySQL 5.7 默认: ON
。
感谢阅读,希望对你有所帮助 :) 来源:cnblogs.com/jiagooushi/archive/ 2023/03/24/17251486.html
END
往期精彩Spring Boot 实现 MySQL 百万级数据量导出从历代GC算法角度刨析ZGC
Spring IOC 为什么能降低耦合?
Spring Boot + minio 实现高性能存储服务