TiDB 产品常见问题
1.1.2 TiDB 整体架构
1.1.3 TiDB 是基于 MySQL 开发的吗?
不是。虽然 TiDB 支持 MySQL 语法和协议,但是 TiDB 是由 PingCAP 团队完全自主开发的产品。
1.1.4 TiDB、TiKV、Placement Driver (PD) 主要作用?
- TiDB 是 Server 计算层,主要负责 SQL 的解析、制定查询计划、生成执行器。
- TiKV 是分布式 Key-Value 存储引擎,用来存储真正的数据,简而言之,TiKV 是 TiDB 的存储引擎。
- PD 是 TiDB 集群的管理组件,负责存储 TiKV 的元数据,同时也负责分配时间戳以及对 TiKV 做负载均衡调度。
1.1.5 TiDB 易用性如何?
TiDB 使用起来很简单,可以将 TiDB 集群当成 MySQL 来用。你可以将 TiDB 用在任何以 MySQL 作为后台存储服务的应用中,并且基本上不需要修改应用代码,同时你可以用大部分流行的 MySQL 管理工具来管理 TiDB。
1.1.6 TiDB 和 MySQL 兼容性如何?
TiDB 支持绝大部分 MySQL 5.7 的语法,但目前还不支持触发器、存储过程、自定义函数、外键约束等。详情参见。
支持。无论是一个地方的几个节点,还是,TiDB 均支持 ACID 分布式事务。
1.1.8 TiDB 支持哪些编程语言?
只要支持 MySQL Client/Driver 的编程语言,都可以直接使用 TiDB。
1.1.9 TiDB 是否支持其他存储引擎?
是的,除了 TiKV 之外,TiDB 还支持一些单机存储引擎,比如 UniStore 和 MockTiKV。注意,TiDB 后续版本可能不再支持 MockTiKV。
要查看 TiDB 支持的存储引擎,可使用以下命令:
返回结果如下:
Usage of ./bin/tidb-server:
-L string
log level: info, debug, warn, error, fatal (default "info")
-V print version information and exit (default false)
.........
-store string
......
1.1.10 除了官方文档,有没有其他 TiDB 知识获取途径?
- :获取 TiDB 相关知识最主要、最及时的途径。
- 官方博客:了解产品技术解读、观点洞察、案例实践。
- :与社区用户、技术专家互动交流。
- PingCAP Education:学习线上课程,获得数据库能力认证。
1.1.11 TiDB 用户名长度限制?
在 TiDB 中,用户名最长为 32 个字符。
1.1.12 TiDB 中列数和行大小的限制是多少?
- TiDB 中默认的最大列数为 1017。你可以调整这个限制,最大可调整到 4096 列。
- TiDB 中默认单行大小不超过 6 MB。你可以调整这个限制,最大可调整到 120 MB。
虽然 TiDB 的 JDBC 驱动用的就是 MySQL Connector/J,但是当使用 Atomikos 的时候,数据源要配置成类似这样的配置:type="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"
。MySQL JDBC XADataSource 连接 TiDB 的模式目前是不支持的。MySQL JDBC 中配置好的 XADataSource 模式,只对 MySQL 数据库起作用(DML 去修改 redo 等)。
Atomikos 配好两个数据源后,JDBC 驱动都要设置成 XA 模式,然后 Atomikos 在操作 TM 和 RM (DB) 的时候,会通过数据源的配置,发起带有 XA 指令到 JDBC 层。JDBC 层 XA 模式启用的情况下,会对 InnoDB(如果是 MySQL 的话)下发操作一连串 XA 逻辑的动作,包括 DML 去变更 redo log 等,就是两阶段递交的那些操作。TiDB 目前的引擎版本中,没有对上层应用层 JTA/XA 的支持,不解析这些 Atomikos 发过来的 XA 类型的操作。
MySQL 是单机数据库,只能通过 XA 来满足跨数据库事务,而 TiDB 本身就通过 Google 的 Percolator 事务模型支持分布式事务,性能稳定性比 XA 要高出很多,所以不会也不需要支持 XA。
1.1.14 TiDB 如何在不影响性能的情况下支持对列存储引擎 (TiFlash) 的高并发 INSERT
或 UPDATE
操作?
- 引入了 DeltaTree 这种特殊结构来处理列存引擎的修改。
- TiFlash 作为 Raft Group 中的 Learner 角色,不参与 log commit 选举,也不会写入数据。这意味着 DML 操作不需要等待 TiFlash 的确认,所以 TiFlash 不会影响 OLTP 的性能。另外,TiFlash 和 TiKV 分开部署在不同的实例上,不会相互影响。
1.1.15 TiFlash 是否具有最终一致性?
是的,TiFlash 默认保持数据强一致性。