TiDB 详解:架构、特性与应用实践

TiDB 是 PingCAP 公司开发的开源分布式 NewSQL 数据库,采用 “计算-存储分离” 架构设计,兼具传统关系型数据库的 ACID 事务特性和 NoSQL 系统的水平扩展能力。以下是 TiDB 的全面技术解析。


一、核心架构设计

1. 分层架构

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   TiDB Server   │ ←→ │   PD (Placement │ ←→ │    TiKV Node    │
│ (无状态SQL层)    │    │    Driver)      │    │ (分布式存储引擎) │
└─────────────────┘    └─────────────────┘    └─────────────────┘↑                                                     │                                                     
┌─────────────────┐                               
│   TiSpark       │    (可选OLAP组件)              
│   TiFlash       │    (列式存储引擎)              
└─────────────────┘                               

2. 核心组件

组件角色关键技术
TiDB ServerSQL解析/优化兼容MySQL协议,无状态横向扩展
PD (Placement Driver)元数据管理Raft共识算法,全局TSO分配
TiKV分布式KV存储Multi-Raft,Percolator事务模型
TiFlash列式分析引擎列存储,实时同步TiKV数据

二、关键技术特性

1. 分布式事务实现

-- 跨节点事务示例(与MySQL语法完全兼容)
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1001;
INSERT INTO transactions VALUES(1001, -100, NOW());
COMMIT;  -- 使用Percolator协议保证ACID

事务模型特点

  • 采用 Percolator 协议
  • 支持 SI (Snapshot Isolation) 隔离级别
  • 全局单调递增时间戳 (TSO)
  • 自动冲突检测与乐观事务

2. 弹性扩展能力

# 水平扩展TiKV节点(存储层)
tiup cluster scale-out mycluster -N 172.16.5.141:20160# 扩展TiDB节点(计算层)
tiup cluster scale-out mycluster -N 172.16.5.142:4000

扩展特性

  • 计算与存储分离:可独立扩展
  • 在线扩容:业务无感知
  • 自动负载均衡:PD调度Region分布

3. 实时HTAP能力

-- 通过TiFlash实现分析查询加速
ALTER TABLE orders SET TIFLASH REPLICA 1;  -- 设置列存副本-- 混合负载查询
EXPLAIN ANALYZE 
SELECT /*+ read_from_storage(tiflash[orders]) */ customer_id, SUM(amount) 
FROM orders 
GROUP BY customer_id;  -- 列存执行

三、核心优势解析

1. MySQL兼容性对比

功能项TiDB 5.0+MySQL 8.0
协议兼容✔️ 完全兼容-
事务语法✔️ 相同-
索引类型✔️ B-Tree✔️ 更多
存储过程✖️ 部分支持✔️ 完整

2. 与NewSQL产品对比

特性TiDBCockroachDBAmazon Aurora
架构模型计算存储分离对等节点共享存储
一致性模型强一致强一致最终一致可选
扩展方式自动分片自动分片有限垂直扩展
开源协议Apache 2.0BSL闭源

四、部署与运维

1. 快速部署(使用TiUP)

# 安装TiUP
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh# 部署测试集群
tiup playground v6.1.0 --db 3 --kv 3 --pd 3 --tiflash 1

2. 关键监控指标

指标类别关键指标健康阈值
存储层Region分布均衡度标准差<20%
事务处理99%事务延迟<500ms
资源使用CPU利用率<70%持续5分钟
同步状态TiFlash副本延迟<30秒

五、应用场景实践

1. 金融支付系统案例

架构设计

-- 账户表设计(按用户ID分片)
CREATE TABLE accounts (account_id VARCHAR(20) PRIMARY KEY,user_id BIGINT,balance DECIMAL(15,2),SHARD_ROW_ID_BITS=4  -- 显式设置分片位数
) PARTITION BY HASH(user_id) PARTITIONS 16;-- 交易流水表(时间分区)
CREATE TABLE transactions (tx_id BIGINT,account_id VARCHAR(20),amount DECIMAL(15,2),tx_time DATETIME,PRIMARY KEY (tx_id, tx_time)
) PARTITION BY RANGE (UNIX_TIMESTAMP(tx_time)) (PARTITION p202301 VALUES LESS THAN (1672531200),PARTITION p202302 VALUES LESS THAN (1675209600)
);

2. 实时数仓方案

-- 创建TiFlash副本
ALTER TABLE user_behavior SET TIFLASH REPLICA 1;-- 实时分析查询
SELECT user_id, COUNT(DISTINCT item_id) AS unique_items,SUM(IF(action='purchase',1,0)) AS purchase_count
FROM user_behavior 
WHERE event_date = CURDATE()
GROUP BY user_id
ORDER BY purchase_count DESC
LIMIT 100;

六、性能调优指南

1. 分片热点优化

-- 使用SHARD_ROW_ID_BITS避免自增ID热点
CREATE TABLE hot_table (id BIGINT AUTO_INCREMENT,data VARCHAR(255),SHARD_ROW_ID_BITS=4  -- 分散写入压力
);-- 使用显式分片键
CREATE TABLE orders (order_id BIGINT,user_id BIGINT,PRIMARY KEY (order_id, user_id)  -- 联合主键
) PARTITION BY HASH(user_id);

2. 事务优化参数

# tidb.toml 配置
[performance]
txn-total-size-limit = 1073741824  # 增大单事务大小限制(1GB)
[txn-local-latches]
enabled = false  # 高并发场景关闭本地锁

七、生态工具链

工具用途特点
TiUP集群管理一键部署/升级
TiDB DM数据迁移支持MySQL/Oracle到TiDB
TiCDC变更数据捕获低延迟(<1s)
TiDB Lightning快速导入100+GB/小时吞吐量

八、典型用户场景

  1. 替换MySQL分库分表

    • 某电商平台将300+MySQL分片合并为单个TiDB集群,QPS提升5倍
  2. 实时风控系统

    • 支付公司实现交易数据实时分析,风控决策延迟从分钟级降至秒级
  3. 混合负载处理

    • 在线游戏同时处理玩家操作(TP)和实时排行榜计算(AP)

TiDB 适合以下场景优先考虑:

  • 需要MySQL兼容但面临扩展瓶颈
  • 混合TP/AP负载需求
  • 云原生技术栈(Kubernetes部署)
  • 数据规模预计达到TB~PB级

其开源属性(Apache 2.0协议)和活跃的社区(GitHub 33k+ stars),使其成为企业级分布式数据库的重要选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91357.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91357.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/91357.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推客小程序商业模型设计:合规分佣体系×盈利模式×LTV提升策略

一、推客小程序的市场背景与商业价值在当今移动互联网红利逐渐消退的背景下&#xff0c;社交电商正成为流量增长的新突破口。推客小程序作为一种基于社交关系的分销工具&#xff0c;完美融合了社交传播与电商变现的双重优势&#xff0c;为企业和个人创业者提供了全新的商业机会…

Matlab处理多个循环的判断的方式:

1、使用正则表达式&#xff1a;pattern strcat(\b, strjoin(tuple, \b|\b), \b);% 4. 逐行处理文件内容 modifiedContents {}; % 存储修改后的内容 for i 1:length(fileContents)line fileContents{i};% 使用正则表达式检查当前行是否包含元组中的任何元素if ~isempty(reg…

从字符串中“薅出”最长子串:LeetCode 340 Swift 解法全解析

文章目录摘要描述题解答案题解代码分析详细解析&#xff1a;示例测试及结果结果解释&#xff1a;时间复杂度总结摘要 在日常开发中&#xff0c;我们经常需要处理字符串&#xff0c;比如分析用户输入、文本挖掘、数据清洗等等。而这道题就特别实用&#xff1a;如何找到一个字符…

时序数据库厂商 TDengine 发布 AI 原生的工业数据管理平台 IDMP,“无问智推”改变数据消费范式

在工业企业越来越依赖数据驱动决策的今天&#xff0c;数据的获取不再是难题&#xff0c;难的是从纷繁复杂的数据中提炼出有用的信息。而 AI 的崛起&#xff0c;正在重塑整个数据分析的逻辑。 7 月 29 日晚&#xff0c;TDengine 发布了一款全新产品 —— TDengine IDMP&#xf…

HBase、MongoDB 和 Redis 的区别详解

这三者都是流行的 NoSQL 数据库&#xff0c;但设计目标、数据模型和适用场景有显著差异。以下是它们的核心对比&#xff1a; 1. 数据模型对比特性HBaseMongoDBRedis数据模型宽列存储&#xff08;类似 BigTable&#xff09;文档存储&#xff08;BSON/JSON&#xff09;键值存储&a…

设计模式之单例模式及其在多线程下的使用

很多时候&#xff0c;我们在使用类创建类的实例并不想可以创建很多实例对象&#xff0c;比如在数据库连接的时候&#xff0c;对于一个数据库的连接通常只需要连接池中的某个连接的实例&#xff0c;连接一次即可&#xff0c;对于session会话&#xff0c;用户在访问网页做会话保持…

Apache Ignite 2.8 引入的新指标系统(New Metrics System)的完整说明

这段文档是关于 Apache Ignite 2.8 引入的“新指标系统&#xff08;New Metrics System&#xff09;” 的完整说明。这是 Ignite 监控体系的一次重大升级&#xff0c;相比旧的、分散的统计方式&#xff0c;新系统更统一、灵活、可扩展。 我们来逐层拆解、通俗易懂地理解这个新…

【氮化镓】GaN同质外延p-i-n二极管中星形与三角形扩展表面缺陷的电子特性

2025年7月23日,美国国家标准与技术研究院(NIST)与美国海军研究实验室的Andrew J. Winchester等人在《Applied Physics Letters》期刊发表了题为《Electronic properties of extended surface defects in homoepitaxial GaN diodes》的文章,基于光电发射电子显微术、导电原子…

使用 Scrapy 框架定制爬虫中间件接入淘宝 API 采集商品数据

一、引言 在电商数据分析、市场调研等领域&#xff0c;获取淘宝平台上的商品数据是一项常见需求。淘宝提供了 API 接口&#xff0c;允许开发者通过授权的方式获取商品信息。本文将介绍如何使用 Scrapy 框架定制爬虫中间件&#xff0c;实现对淘宝 API 的接入&#xff0c;从而高…

Jmeter全局变量跨线程组的使用

一、线程组1中从数据库中查询到字段值二、BeanShell取样器中设置为全局变量#为什么说props.put("Out1",Out);其实是设置Out1为Jmeter的属性了呢&#xff1f; 因为在后面的调试取样器运行结果中&#xff0c;会发现如果只打开显示变量开关&#xff0c;是看不到Out1运行…

前端技术栈详解

前端技术栈是指构建现代Web应用程序所需的一系列技术和工具的集合。以下是当前主流前端技术栈的详细解析&#xff1a; 一、核心基础技术 1. HTML5 作用&#xff1a;网页内容的结构化标记关键特性&#xff1a; 语义化标签&#xff08;<header>, <section>, <arti…

Git Pull 时遇到 Apply 和 Abort 选项?详解它们的含义与应对策略

在使用 Git 进行团队协作时&#xff0c;git pull 是最常用的命令之一&#xff0c;用于拉取远程仓库的最新代码并合并到本地分支。但有时执行 git pull 后&#xff0c;Git 会提示 ​Apply&#xff08;应用&#xff09;​​ 和 ​Abort&#xff08;中止&#xff09;​​ 两个选项…

暑期算法训练.11

目录 47. 力扣203 移除链表元素 47.1 题目解析&#xff1a; ​编辑 47.2 算法思路&#xff1a; 47.3 代码演示&#xff1a; ​编辑 48. 力扣2.两数相加 48.1 题目解析&#xff1a; ​编辑 48.2 算法思路; 48.3 代码演示&#xff1a; 48.4 总结反思&#xff1a; …

nl2sql grpo强化学习训练,加大数据量和轮数后,准确率没提升,反而下降了,如何调整

在NL2SQL任务中使用GRPO强化学习训练时&#xff0c;增加数据量和训练轮数后准确率下降&#xff0c;通常是由过拟合、训练不稳定、奖励函数设计不合理、数据质量问题或探索-利用失衡等原因导致的。以下是具体的诊断思路和调整策略&#xff0c;帮助定位问题并优化性能&#xff1a…

PHP/Java/Python实现:如何有效防止恶意文件上传

文章目录 木马病毒防范:文件上传如何彻底防止伪造文件类型 引言 一、文件类型伪造的原理与危害 1.1 常见伪造手段 1.2 潜在危害 二、防御体系设计 2.1 防御架构 三、核心防御技术实现 3.1 服务端验证实现 3.1.1 文件内容检测(Python示例) 3.1.2 扩展名与内容双重验证(Java示…

SpringBoot系列之基于Redis的分布式限流器

SpringBoot系列之基于Redis的分布式限流器 SpringBoot 系列之基于 Redis 的分布式限流器 图文并茂,代码即拷即用,支持 4 种算法(固定窗口 / 滑动窗口 / 令牌桶 / 漏桶) 一、为什么要用分布式限流? 单机 Guava-RateLimiter 在集群下会 各玩各的,流量漂移,无法全局控量。…

面试遇到的问题2

Redisson的看门狗相关问题 首先要明确一点&#xff0c;看门狗机制的使用方式是&#xff1a;在加锁的时候不加任何参数&#xff0c;也就是&#xff1a; RLock lock redisson.getLock("myLock"); try {lock.lock(); // 阻塞式加锁// 业务逻辑... } finally {lock.unl…

Linux—进程概念与理解

目录 1.冯诺依曼体系结构 小结&#xff1a; 2.操作系统 概念&#xff1a; 结构示意图&#xff1a; 理解操作系统&#xff1a; 用户使用底层硬件层次图&#xff1a;​编辑 3.进程 概念 结构示意图 task_ struct内容分类 典型用法示例 观察进程: 了解 PID PPID 查…

LeetCode 面试经典 150_数组/字符串_买卖股票的最佳时机(7_121_C++_简单)(贪心)

LeetCode 面试经典 150_数组/字符串_买卖股票的最佳时机&#xff08;7_121_C_简单&#xff09;题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;贪心算法&#xff09;&#xff1a;代码实现代码实现&#xff08;思路一&…

Ubuntu 18.04 repo sync报错:line 0: Bad configuration option: setenv

repo sync时报 line 0: Bad configuration option: setenv因为 Ubuntu 18.04 默认的 openssh-client 是 7.6p1&#xff0c;还不支持 setenv&#xff0c;但是.repo/repo/ssh.py 脚本中明确地传入了 SetEnv 参数给 ssh&#xff0c;而你的 OpenSSH 7.6 不支持这个参数。需要按如下…