TiDB 分布式数据库
TiDB 是一款开源的分布式 SQL 数据库,兼容 MySQL 协议,支持水平扩展和强一致性事务,能处理 OLTP 和 OLAP 混合工作负载,是需要大规模数据管理的生信平台的好选择。
核心知识点
| 知识点 | 说明 |
|---|
| 数据库类型 | 分布式 NewSQL 数据库 |
| 开发团队 | PingCAP |
| 许可证 | Apache 2.0 |
| MySQL 兼容 | 兼容 MySQL 5.7 协议和语法 |
| 核心优势 | 水平扩展、强一致、MySQL 兼容、HTAP |
| 架构组件 | TiDB Server + TiKV + PD + TiFlash |
| HTAP | 同一系统处理事务(OLTP)和分析(OLAP) |
安装配置
TiUP 快速部署(推荐)
# 安装 TiUP(TiDB 的包管理工具)
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
# 添加到 PATH
source ~/.bashrc
# 启动本地测试集群(一键启动)
tiup playground # 启动含 TiDB/TiKV/PD 的集群
# 连接(使用 MySQL 客户端)
mysql -h 127.0.0.1 -P 4000 -u root # TiDB 默认端口 4000
Docker Compose 部署
# docker-compose.yml
version: "3"
services:
pd:
image: pingcap/pd:latest
ports: ["2379:2379"]
command: ["--name=pd", "--client-urls=http://0.0.0.0:2379"]
tikv:
image: pingcap/tikv:latest
command: ["--pd=pd:2379"]
depends_on: [pd]
tidb:
image: pingcap/tidb:latest
ports: ["4000:4000", "10080:10080"]
command: ["--store=tikv", "--path=pd:2379"]
depends_on: [tikv]
docker-compose up -d # 启动集群
mysql -h 127.0.0.1 -P 4000 -u root # 连接
基本使用
因为兼容 MySQL,SQL 语法完全一样
-- 创建数据库
CREATE DATABASE bioinfo; -- 创建数据库
USE bioinfo; -- 使用数据库
-- 创建表
CREATE TABLE samples (
id BIGINT AUTO_INCREMENT PRIMARY KEY, -- 自增主键
sample_id VARCHAR(50) UNIQUE, -- 样本 ID
diagnosis VARCHAR(20), -- 诊断
bmi DECIMAL(5,2), -- BMI
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 增删改查(和 MySQL 完全一样)
INSERT INTO samples (sample_id, diagnosis, bmi) VALUES ('T2D_001', 'T2D', 28.5);
SELECT * FROM samples WHERE diagnosis = 'T2D';
UPDATE samples SET bmi = 29.0 WHERE sample_id = 'T2D_001';
DELETE FROM samples WHERE sample_id = 'T2D_001';
TiDB 特有功能
-- 查看表的 Region 分布(TiDB 特有)
SHOW TABLE samples REGIONS; -- 数据在 TiKV 节点上的分布
-- Auto Random ID(分布式场景下避免热点)
CREATE TABLE events (
id BIGINT AUTO_RANDOM PRIMARY KEY, -- 自动随机 ID,避免写入热点
event_type VARCHAR(50),
created_at TIMESTAMP
);
-- TiFlash 列存副本(加速分析查询)
ALTER TABLE samples SET TIFLASH REPLICA 1; -- 为表创建 TiFlash 副本
-- 之后的分析查询会自动走 TiFlash 列存引擎,速度大幅提升
常见报错与解决
| 报错信息 | 原因 | 解决方法 |
|---|
Connection refused :4000 | TiDB 未启动 | 检查 tiup playground 或 Docker |
| 写入冲突 | 并发事务冲突 | TiDB 使用乐观锁,重试即可 |
| 兼容性问题 | 部分 MySQL 语法不支持 | 查看 TiDB 兼容性文档 |
速查表
-- ===== TiDB 速查表 =====
-- 安装
-- curl ... | sh && tiup playground # TiUP 一键部署
-- 连接(MySQL 客户端)
-- mysql -h 127.0.0.1 -P 4000 -u root
-- 与 MySQL 相同的操作
CREATE DATABASE db;
CREATE TABLE t (id BIGINT PRIMARY KEY, name VARCHAR(50));
INSERT INTO t VALUES (1, 'test');
SELECT * FROM t;
-- TiDB 特有
CREATE TABLE t (id BIGINT AUTO_RANDOM PRIMARY KEY, ...); -- 随机ID
ALTER TABLE t SET TIFLASH REPLICA 1; -- 列存加速
SHOW TABLE t REGIONS; -- Region分布
-- 架构组件
-- TiDB Server: SQL 层(无状态,可水平扩展)
-- TiKV: 分布式存储引擎(行存)
-- PD: 集群调度和元数据
-- TiFlash: 列存引擎(OLAP 加速)