TiDB 詳解

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 不支持這個參數。需要按如下…