TiDB HTAP架构设计
TiDB是PingCAP开源的分布式数据库,采用存储计算分离的HTAP架构,同时支持OLTP事务处理和OLAP分析查询。TiDB架构由三个核心组件构成:TiDB Server(SQL层,无状态)、TiKV(行存储引擎,负责OLTP)和TiFlash(列存储引擎,负责OLAP)。PD(Placement Driver)负责元数据管理和调度。
HTAP的核心在于TiKV和TiFlash通过Raft Learner协议实现数据强一致性复制。TiFlash作为TiKV的Learner节点,异步接收Raft日志并转换为列存格式。OLTP查询走TiKV行存路径,OLAP查询走TiFlash列存路径,两类查询互不干扰,不需要ETL数据搬运。
TiKV与TiFlash存储引擎
TiKV基于RocksDB构建,使用Region作为数据分片单元,每个Region默认96MB。Region通过Multi-Raft协议管理副本,默认3副本。TiFlash基于列存引擎改造,通过Delta Tree结构实现实时写入和高性能查询的平衡。
-- 部署TiFlash节点
tiup cluster edit-config tidb-prod
# tiflash_servers:
# - host: 192.168.1.201, data_dir: /data/tiflash-data
# - host: 192.168.1.202, data_dir: /data/tiflash-data
# - host: 192.168.1.203, data_dir: /data/tiflash-data
tiup cluster reload tidb-prod -R tiflash
-- 为表创建TiFlash副本
ALTER TABLE orders SET TIFLASH REPLICA 3;
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_NAME = 'orders';
-- 等待PROGRESS达到1.0表示同步完成
-- 指定查询走TiFlash
SELECT /*+ read_from_storage(tiflash[orders]) */
customer_id, COUNT(*) as cnt, SUM(amount) as total
FROM orders WHERE order_date >= '2026-01-01'
GROUP BY customer_id ORDER BY total DESC LIMIT 100;
-- 智能路由:优化器自动选择引擎
SET SESSION tidb_isolation_read_engines = 'tiflash,tiKV,tidb';
分布式事务与PD调度
TiDB采用乐观事务模型,通过Percolator算法实现分布式事务。事务提交分两阶段:Prewrite阶段锁定涉及的所有Region,Commit阶段写入记录并释放锁。对于高冲突场景,TiDB也支持悲观事务模式。
-- 分布式事务示例
BEGIN PESSIMISTIC;
UPDATE inventory SET stock = stock - 10
WHERE product_id = 'P2026-001' AND stock >= 10;
INSERT INTO orders (order_id, customer_id, product_id, quantity, amount, status)
VALUES ('ORD-2026-0904-001', 'CUST-1001', 'P2026-001', 10, 1999.00, 'pending');
INSERT INTO transaction_log (log_id, order_id, type, amount)
VALUES ('LOG-001', 'ORD-2026-0904-001', 'order_create', 1999.00);
COMMIT;
-- 使用AutoRandom避免自增ID热点
CREATE TABLE orders (
order_id BIGINT AUTO_RANDOM(5) PRIMARY KEY,
customer_id BIGINT NOT NULL,
product_id VARCHAR(32) NOT NULL,
quantity INT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
status VARCHAR(20) DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_customer (customer_id),
INDEX idx_date (created_at)
) PARTITION BY RANGE (TO_DAYS(created_at)) (
PARTITION p202609 VALUES LESS THAN (TO_DAYS('2026-10-01')),
PARTITION p202610 VALUES LESS THAN (TO_DAYS('2026-11-01')),
PARTITION pmax VALUES LESS THAN MAXVALUE
);
在线扩缩容操作实战
TiDB的在线扩缩容是核心优势之一。扩容时新节点加入集群,PD自动调度Region到新节点,整个过程对业务无感知。缩容时PD先将待下线节点的Region迁移到其他节点,迁移完成后安全下线。
# 扩容TiKV节点
tiup cluster scale-out tidb-prod scale-out.yaml
# 查看调度进度
mysql -h 192.168.1.101 -P 4000 -u root -p -e "
SELECT STORE_ID, ADDRESS, STORE_STATE, CAPACITY, AVAILABLE,
LEADER_COUNT, REGION_COUNT
FROM information_schema.TIKV_STORE_STATUS;
"
# PD调度参数调优
pd-ctl config set schedule.max-snapshot-count 64
pd-ctl config set schedule.max-pending-peer-count 32
pd-ctl config set schedule.max-merge-region-size 20
pd-ctl config set schedule.max-store-down-duration 30m
# 缩容TiKV节点
tiup cluster scale-in tidb-prod --node 192.168.1.104:20160
tiup cluster display tidb-prod
# 状态变为Offline后等待迁移完成
tiup cluster prune tidb-prod
# 热点调度
pd-ctl config set schedule.hot-region-schedule-limit 4
pd-ctl config set schedule.leader-schedule-limit 4
pd-ctl config set schedule.balance-leader-scheduler true
HTAP混合负载测试
-- 创建测试表并设置TiFlash副本
CREATE TABLE sales_data (
id BIGINT AUTO_RANDOM PRIMARY KEY,
order_id VARCHAR(32) NOT NULL,
customer_id BIGINT NOT NULL,
region VARCHAR(20) NOT NULL,
amount DECIMAL(12,2) NOT NULL,
order_date DATE NOT NULL,
INDEX idx_customer (customer_id),
INDEX idx_date (order_date)
);
ALTER TABLE sales_data SET TIFLASH REPLICA 3;
-- OLTP负载:点查走TiKV
SET SESSION tidb_isolation_read_engines = 'tikv';
SELECT * FROM sales_data WHERE customer_id = 523456 AND order_date = '2026-03-15';
-- OLAP负载:复杂聚合走TiFlash
SET SESSION tidb_isolation_read_engines = 'tiflash';
EXPLAIN ANALYZE
SELECT region,
DATE_TRUNC('month', order_date) as month,
COUNT(*) as cnt, SUM(amount) as revenue,
AVG(amount) as avg_val,
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY amount) as p95
FROM sales_data
WHERE order_date BETWEEN '2026-01-01' AND '2026-06-30'
GROUP BY region, month ORDER BY region, month;
-- 性能基准对比
-- TiKV行存聚合查询: 120s(扫描大量行)
-- TiFlash列存聚合查询: 3.2s(列裁剪+向量化执行)
-- 性能提升: 约37倍
生产环境部署TiDB需要关注资源隔离。通过Resource Control特性限制不同租户的计算资源配额,避免AP大查询影响TP事务延迟。TiDB v7.0+的Resource Group功能可以按CPU和IO维度做细粒度资源管控。集群监控推荐使用TiDB自带的Grafana Dashboard,关键指标包括QPS、延迟P99、Region数量、TiFlash同步延迟和PD调度速度。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/tidb-fen-bu-shi-shu-ju-ku-shi-zhan-htap-jia-gou-yu-zai-xian/