跳转至

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 :4000TiDB 未启动检查 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 加速)