TiDB簡介與應用場景

来源:https://www.cnblogs.com/yanchuanbin/archive/2023/06/21/17496113.html
-Advertisement-
Play Games

# 引言 在當今互聯網時代,數據的規模和複雜性不斷增長,傳統關係型資料庫面臨著無法滿足高併發和大規模數據存儲需求的挑戰。為瞭解決這一問題,開源社區涌現出了一系列分散式資料庫解決方案,其中TiDB作為一種新興的分散式資料庫引起了廣泛的關註。本文將介紹TiDB的基本概念、特點以及適用的應用場景。 TiD ...


引言

在當今互聯網時代,數據的規模和複雜性不斷增長,傳統關係型資料庫面臨著無法滿足高併發和大規模數據存儲需求的挑戰。為瞭解決這一問題,開源社區涌現出了一系列分散式資料庫解決方案,其中TiDB作為一種新興的分散式資料庫引起了廣泛的關註。本文將介紹TiDB的基本概念、特點以及適用的應用場景。
TiDB官方文檔地址:https://docs.pingcap.com/zh/tidb/stable

什麼是TiDB?

TiDB 是 PingCAP 公司自主設計、研發的開源分散式關係型資料庫,是一款同時支持線上事務處理與線上分析處理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分散式資料庫產品,具備水平擴容或者縮容、金融級高可用、實時 HTAP、雲原生的分散式資料庫、相容 MySQL 5.7 協議和 MySQL 生態等重要特性。目標是為用戶提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解決方案。TiDB 適合高可用、強一致要求較高、數據規模較大等各種應用場景。

TiDB特點

  1. 一鍵水平擴容或者縮容
    得益於 TiDB 存儲計算分離的架構的設計,可按需對計算、存儲分別進行線上擴容或者縮容,擴容或者縮容過程中對應用運維人員透明。

  2. 金融級高可用
    數據採用多副本存儲,數據副本通過 Multi-Raft 協議同步事務日誌,多數派寫入成功事務才能提交,確保數據強一致性且少數副本發生故障時不影響數據的可用性。可按需配置副本地理位置、副本數量等策略滿足不同容災級別的要求。

  3. 實時 HTAP
    提供行存儲引擎 TiKV、列存儲引擎 TiFlash 兩款存儲引擎,TiFlash 通過 Multi-Raft Learner 協議實時從 TiKV 複製數據,確保行存儲引擎 TiKV 和列存儲引擎 TiFlash 之間的數據強一致。TiKV、TiFlash 可按需部署在不同的機器,解決 HTAP 資源隔離的問題。

  4. 雲原生的分散式資料庫
    專為雲而設計的分散式資料庫,通過 TiDB Operator 可在公有雲、私有雲、混合雲中實現部署工具化、自動化。

  5. 相容 MySQL 5.7 協議和 MySQL 生態
    相容 MySQL 5.7 協議、MySQL 常用的功能、MySQL 生態,應用無需或者修改少量代碼即可從 MySQL 遷移到 TiDB。提供豐富的數據遷移工具幫助應用便捷完成數據遷移。

TiDB基礎架構

在內核設計上,TiDB 分散式資料庫將整體架構拆分成了多個模塊,各模塊之間互相通信,組成完整的 TiDB 系統。對應的架構圖如下:

TiDB Server

SQL 層,對外暴露 MySQL 協議的連接 endpoint,負責接受客戶端的連接,執行 SQL 解析和優化,最終生成分散式執行計劃。TiDB 層本身是無狀態的,實踐中可以啟動多個 TiDB 實例,通過負載均衡組件(如 LVS、HAProxy 或 F5)對外提供統一的接入地址,客戶端的連接可以均勻地分攤在多個 TiDB 實例上以達到負載均衡的效果。TiDB Server 本身並不存儲數據,只是解析 SQL,將實際的數據讀取請求轉發給底層的存儲節點 TiKV(或 TiFlash)。

PD (Placement Driver) Server

整個 TiDB 集群的元信息管理模塊,負責存儲每個 TiKV 節點實時的數據分佈情況和集群的整體拓撲結構,提供 TiDB Dashboard 管控界面,併為分散式事務分配事務 ID。PD 不僅存儲元信息,同時還會根據 TiKV 節點實時上報的數據分佈狀態,下發數據調度命令給具體的 TiKV 節點,可以說是整個集群的“大腦”。此外,PD 本身也是由至少 3 個節點構成,擁有高可用的能力。建議部署奇數個 PD 節點。

TiKV Server

TiKV Server:負責存儲數據,從外部看 TiKV 是一個分散式的提供事務的 Key-Value 存儲引擎。存儲數據的基本單位是 Region,每個 Region 負責存儲一個 Key Range(從 StartKey 到 EndKey 的左閉右開區間)的數據,每個 TiKV 節點會負責多個 Region。TiKV 的 API 在 KV 鍵值對層面提供對分散式事務的原生支持,預設提供了 SI (Snapshot Isolation) 的隔離級別,這也是 TiDB 在 SQL 層面支持分散式事務的核心。TiDB 的 SQL 層做完 SQL 解析後,會將 SQL 的執行計劃轉換為對 TiKV API 的實際調用。所以,數據都存儲在 TiKV 中。另外,TiKV 中的數據都會自動維護多副本(預設為三副本),天然支持高可用和自動故障轉移。
TiFlash:TiFlash 是一類特殊的存儲節點。和普通 TiKV 節點不一樣的是,在 TiFlash 內部,數據是以列式的形式進行存儲,主要的功能是為分析型的場景加速。

TiDB相容Mysql協議

TiDB 高度相容 MySQL 5.7 協議、MySQL 5.7 常用的功能及語法。MySQL 5.7 生態中的系統工具(PHPMyAdmin、Navicat、MySQL Workbench、mysqldump、Mydumper/Myloader)、客戶端等均適用於 TiDB。
但 TiDB 尚未支持一些 MySQL 功能,可能的原因如下:
有更好的解決方案,例如 JSON 取代 XML 函數。
目前對這些功能的需求度不高,例如存儲流程和函數。
一些功能在分散式系統上的實現難度較大。
除此以外,TiDB 不支持 MySQL 複製協議,但提供了專用工具用於與 MySQL 複製數據:
從 MySQL 複製:TiDB Data Migration (DM) 是將 MySQL/MariaDB 數據遷移到 TiDB 的工具,可用於增量數據的複製。
向 MySQL 複製:TiCDC 是一款通過拉取 TiKV 變更日誌實現的 TiDB 增量數據同步工具,可通過 MySQL sink 將 TiDB 增量數據複製到 MySQL。

TiDB應用場景

MySQL分片與合併

對於已經在用 MySQL 的業務,分庫、分表、分片、中間件是常用手段,隨著分片的增多,跨分片查詢是一大難題。
TiDB 在業務層相容 MySQL 的訪問協議,PingCAP 做了一個數據同步的工具——Syncer,它可以把TiDB 作為一個 MySQL Slave,將 TiDB 作為現有資料庫的從庫接在主 MySQL 庫的後方,在這一層將數據打通,可以直接進行複雜的跨庫、跨表、跨業務的實時 SQL 查詢。

直接替換MySQL

在一個 TiDB 的資料庫上,所有業務場景不需要做分庫分表,所有的分散式工作都由資料庫層完成。TiDB 相容 MySQL 協議,所以可以直接替換 MySQL,而且基本做到了開箱即用,完全不用擔心傳統分庫分表方案帶來繁重的工作負擔和複雜的維護成本,友好的用戶界面讓常規的技術人員可以高效地進行維護和管理。另外,TiDB 具有 NoSQL 類似的擴容能力,在數據量和訪問流量持續增長的情況下能夠通過水平擴容提高系統的業務支撐能力,並且響應延遲穩定。

數據倉庫

TiDB 本身是一個分散式系統,第三種使用場景是將 TiDB 當作數據倉庫使用,使用一些T+1的業務。TPC-H 是數據分析領域的一個測試集,TiDB 2.0 在 OLAP 場景下的性能有了大幅提升,原來只能在數據倉庫裡面跑的一些複雜的 Query,在 TiDB 2.0 裡面跑,時間基本都能控制在 10 秒以內。當然,因為 OLAP 的範疇非常大,
TiDB 的 SQL 也有搞不定的情況,為此 PingCAP 開源了 TiSpark,TiSpark 是一個 Spark 插件,用戶可以直接用 Spark SQL 實時地在 TiKV 上做大數據分析。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題應該算挺常見的但是一句話還挺難說清楚,所以百度特別難搜。 場景就是,有一堆以員工名稱命名的文件(名稱可能還有字母數字等前尾碼),現在給定一個員工清單,需要從這些文件中篩選出員工清單上列出的員工的文件,並複製到另外一個目錄中。 輸入: 1. 許多文件名包含員工名稱的文件 2.一個清單文件,裡面包含 ...
  • 哈嘍大家好,我是鹹魚 今天跟大家分享一個關於 zabbix Timeout 值設置不當導致的問題,這個問題不知道大家有沒有碰到過 ## 問題 事情經過是這樣的: 把某一臺 zabbix agent 的模板由原來的 `Template OS Windows by Zabbix agent` 換成了 ` ...
  • # Spark Spark是一種快速、通用、可擴展的大數據分析引擎,2009年誕生於加州大學伯克利分校AMPLab,2010年開源,2013年6月成為Apache孵化項目,2014年2月成為Apache的頂級項目,2014年5月發佈spark1.0,2016年7月發佈spark2.0,2020年6月 ...
  • ![file](https://img2023.cnblogs.com/other/3195851/202306/3195851-20230625185718639-2144905227.jpg) > 近日,Apache SeaTunnel 正式發佈 2.3.2 版本。此時距離上一版本 2.3.1 ...
  • 摘要:本文將介紹如何在 Docker 環境下搭建 MS SQL Server 的主從同步,幫助讀者瞭解主從同步的原理和實現方式,進而提高數據的可靠性和穩定性。 一、前言 在當今信息化的時代,數據的安全性和穩定性顯得尤為重要。資料庫是許多企業和組織存儲和管理數據的核心,因此如何保證資料庫的高可用性和數 ...
  • ## case1(表鎖的讀-寫-讀阻塞) 上篇文檔中提到過 >WRITE locks normally have higher priority than READ locks to ensure that updates are processed as soon as possible. Thi ...
  • 很多小微型應用程式也需要一些數據處理和計算能力,如果集成一個資料庫就顯得太沉重了,這種情況下 SQLite 是一個不錯的選擇,它架構簡單,集成方便,可持久化存儲數據,並提供 SQL 實現計算能力。 但是,對於某些較複雜的場景,SQLite 仍有不足之處。 ...
  • 開心一刻 今天答應準時回家和老婆一起吃晚飯,但臨時有事加了會班,回家晚了點 回到家,本以為老婆會很生氣,但老婆卻立即從廚房端出了熱著的飯菜 老婆:還沒吃飯吧,去洗下,來吃飯吧 我洗好,坐下吃飯,內心感動十分;老婆坐旁邊深情的看著我 老婆:你知道誰最愛你嗎 我毫不猶豫道:你 老婆:誰最關心你? 我:你 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...