萬字明白tidb數據庫丨【綻放吧!數據庫】(數據庫 tidb)

      網友投稿 1188 2022-05-30

      前言

      去年5月28日,PingCAP 正式發布了 TiDB 4.0.0 的版本。上個月末,TiDB 4.0.14 發布了,主要完成了如下功能提升:1. 對于 point get 或 batch point get 算子,在唯一索引寫入過程中,將悲觀鎖 LOCK 記錄轉化為 PUT 記錄;2. 支持 MySQL 的系統變量 init_connect 及其相關功能;3. 支持穩定結果模式,使查詢結果更穩定。

      4. 支持將函數 json_unquote() 下推到 TiKV;5. 使 SQL 計劃管理 (SPM) 不受字符集的影響。今天,我們就來聊一聊TiDB。

      正文

      TiDB 信息介紹

      TiDB 是 PingCAP 公司自主設計、研發的開源分布式關系型數據庫,是一款同時支持在線事務處理與在線分析處理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式數據庫產品,具備水平擴容或者縮容、金融級高可用、實時 HTAP、云原生的分布式數據庫、兼容 MySQL 5.7 協議和 MySQL 生態等重要特性。目標是為用戶提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解決方案。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。提供豐富的數據遷移工具幫助應用便捷完成數據遷移。

      四大核心應用場景

      1. 對數據一致性及高可靠、系統高可用、可擴展性、容災要求較高的金融行業屬性的場景

      眾所周知,金融行業對數據一致性及高可靠、系統高可用、可擴展性、容災要求較高。傳統的解決方案是同城兩個機房提供服務、異地一個機房提供數據容災能力但不提供服務,此解決方案存在以下缺點:資源利用率低、維護成本高、RTO (Recovery Time Objective) 及 RPO (Recovery Point Objective) 無法真實達到企業所期望的值。TiDB 采用多副本 + Multi-Raft 協議的方式將數據調度到不同的機房、機架、機器,當部分機器出現故障時系統可自動進行切換,確保系統的 RTO <= 30s 及 RPO = 0。

      2. 對存儲容量、可擴展性、并發要求較高的海量數據及高并發的 OLTP 場景

      隨著業務的高速發展,數據呈現爆炸性的增長,傳統的單機數據庫無法滿足因數據爆炸性的增長對數據庫的容量要求,可行方案是采用分庫分表的中間件產品或者 NewSQL 數據庫替代、采用高端的存儲設備等,其中性價比最大的是 NewSQL 數據庫,例如:TiDB。TiDB 采用計算、存儲分離的架構,可對計算、存儲分別進行擴容和縮容,計算最大支持 512 節點,每個節點最大支持 1000 并發,集群容量最大支持 PB 級別。

      3. Real-time HTAP 場景

      隨著 5G、物聯網、人工智能的高速發展,企業所生產的數據會越來越多,其規??赡苓_到數百 TB 甚至 PB 級別,傳統的解決方案是通過 OLTP 型數據庫處理在線聯機交易業務,通過 ETL 工具將數據同步到 OLAP 型數據庫進行數據分析,這種處理方案存在存儲成本高、實時性差等多方面的問題。TiDB 在 4.0 版本中引入列存儲引擎 TiFlash 結合行存儲引擎 TiKV 構建真正的 HTAP 數據庫,在增加少量存儲成本的情況下,可以同一個系統中做聯機交易處理、實時數據分析,極大地節省企業的成本。

      4. 數據匯聚、二次加工處理的場景

      當前絕大部分企業的業務數據都分散在不同的系統中,沒有一個統一的匯總,隨著業務的發展,企業的決策層需要了解整個公司的業務狀況以便及時做出決策,故需要將分散在各個系統的數據匯聚在同一個系統并進行二次加工處理生成 T+0 或 T+1 的報表。傳統常見的解決方案是采用 ETL + Hadoop 來完成,但 Hadoop 體系太復雜,運維、存儲成本太高無法滿足用戶的需求。與 Hadoop 相比,TiDB 就簡單得多,業務通過 ETL 工具或者 TiDB 的同步工具將數據同步到 TiDB,在 TiDB 中可通過 SQL 直接生成報表。

      基本功能

      1. 數據類型

      數值類型:BIT、BOOL|BOOLEAN、SMALLINT、MEDIUMINT、INT|INTEGER、BIGINT、FLOAT、DOUBLE、DECIMAL。

      日期和時間類型:DATE、TIME、DATETIME、TIMESTAMP、YEAR。

      字符串類型:CHAR、VARCHAR、TEXT、TINYTEXT、MEDIUMTEXT、LONGTEXT、BINARY、VARBINARY、BLOB、TINYBLOB、MEDIUMBLOB、LONGBLOB、ENUM、SET。

      JSON 類型。

      2. 運算符

      算術運算符、位運算符、比較運算符、邏輯運算符、日期和時間運算符等。

      字符集:UTF8、UTF8MB4、BINARY、ASCII、LATIN1。

      排序規則:UTF8MB4_GENERAL_CI、UTF8MB4_GENERAL_BIN、UTF8_GENERAL_CI、UTF8_GENERAL_BIN、BINARY。

      3. 函數

      控制流函數、字符串函數、日期和時間函數、位函數、數據類型轉換函數、數據加解密函數、壓縮和解壓函數、信息函數、JSON 函數、聚合函數、窗口函數等。

      4. SQL 語句

      完全支持標準的 Data Definition Language (DDL) 語句,例如:CREATE、DROP、ALTER、RENAME、TRUNCATE 等。

      完全支持標準的 Data Manipulation Language (DML) 語句,例如:INSERT、REPLACE、SELECT、Subqueries、UPDATE、LOAD DATA 等。

      完全支持標準的 Transactional and Locking 語句,例如:START TRANSACTION、COMMIT、ROLLBACK、SET TRANSACTION 等。

      完全支持標準的 Database Administration 語句,例如:SHOW、SET 等。

      完全支持標準的 Utility 語句,例如:DESCRIBE、EXPLAIN、USE 等。

      完全支持 SQL GROUP BY 和 ORDER BY 子語句。

      完全支持標準 SQL 語法的 LEFT OUTER JOIN 和 RIGHT OUTER JOIN。

      完全支持標準 SQL 要求的表和列別名。

      5. 分區表

      支持 Range 分區。

      支持 Hash 分區。

      6. 視圖

      支持普通視圖。

      7. 約束

      支持非空約束。

      支持主鍵約束。

      支持唯一約束。

      8. 安全

      支持基于 RBAC (role-based access control) 的權限管理。

      支持密碼管理。

      支持通信、數據加密。

      支持 IP 白名單。

      支持審計功能。

      9. 工具

      支持快速備份功能。

      支持通過工具從 MySQL 遷移數據到 TiDB。

      支持通過工具部署、運維 TiDB。

      TiDB 本地部署

      TiDB 是一個分布式系統。最基礎的 TiDB 測試集群通常由 2 個 TiDB 實例、3 個 TiKV 實例、3 個 PD 實例和可選的 TiFlash 實例構成。通過 TiUP Playground,可以快速搭建出上述的一套基礎測試集群。這里以 linux 系統為例進行說明,其實在 mac 也是支持的。

      1. 下載并安裝 TiUP,命令如下:

      curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

      如果有如下執行結果,表示安裝成功。

      root@ubuntu tools# curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 7040k 100 7040k 0 0 5425k 0 0:00:01 0:00:01 --:--:-- 5424k WARN: adding root certificate via internet: https://tiup-mirrors.pingcap.com/root.json You can revoke this by remove /root/.tiup/bin/7b8e153f2e2d0928.root.json Successfully set mirror to https://tiup-mirrors.pingcap.com Detected shell: bash Shell profile: /root/.bash_profile /root/.bash_profile has been modified to add tiup to PATH open a new terminal or source /root/.bash_profile to use it Installed path: /root/.tiup/bin/tiup =============================================== Have a try: tiup playground ===============================================

      2. 更新全局環境變量,因為 TiUP 安裝完成后會提示對應 profile 文件的絕對路徑。在執行以下 source 命令前,需要根據 profile 文件的實際位置修改命令。

      執行命令如下:

      source /root/.bash_profile

      3.?啟動集群。

      直接運行?tiup playground?命令會運行最新版本的 TiDB 集群,其中 TiDB、TiKV、PD 和 TiFlash 實例各 1 個,命令如下:

      tiup playground

      同時,我們也可以指定 TiDB 版本以及各組件實例個數,命令類似于:

      tiup playground v4.0.14 --db 2 --pd 3 --kv 3 --monitor

      執行過程如下:

      root@ubuntu tools# tiup playground v4.0.14 --db 2 --pd 3 --kv 3 --monitor Starting component `playground`: /root/.tiup/components/playground/v1.5.4/tiup-playground v4.0.14 --db 2 --pd 3 --kv 3 --monitor Using the version v4.0.14 for version constraint "v4.0.14". If you'd like to use a TiDB version other than v4.0.14, cancel and retry with the following arguments: Specify version manually: tiup playground Specify version range: tiup playground ^5 The nightly version: tiup playground nightly Playground Bootstrapping... The component `prometheus` version v4.0.14 is not installed; downloading from repository. download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz 。。。。。。

      上述命令會在本地下載并啟動某個版本的集群(例如 v4.0.14),--monitor?表示同時部署監控組件。最新版本可以通過執行?tiup list tidb?來查看。運行結果將顯示集群的訪問方式,輸出如下結果,表示數據庫相關服務已經啟動成功:

      Waiting for tiflash instances ready 127.0.0.1:3930 ... Done CLUSTER START SUCCESSFULLY, Enjoy it ^-^ To connect TiDB: mysql --host 127.0.0.1 --port 4000 -u root -p (no password) --comments To connect TiDB: mysql --host 127.0.0.1 --port 4001 -u root -p (no password) --comments To view the dashboard: http://127.0.0.1:2379/dashboard PD client endpoints: [127.0.0.1:2379 127.0.0.1:2382 127.0.0.1:2384] To view the Prometheus: http://127.0.0.1:9090 To view the Grafana: http://127.0.0.1:35822

      4. 新開啟一個 session 以訪問 TiDB 數據庫。

      使用 TiUP?client?連接 TiDB:

      tiup client

      會出現如下界面

      此時,讓我們選擇連接的終端,因為在上一個命令中,我們啟動了兩個數據庫終端,我們選擇第一個,回車!

      然后,我們進入了如下界面:

      root@ubuntu ~# tiup client The component `client` version is not installed; downloading from repository. download https://tiup-mirrors.pingcap.com/client-v1.5.4-linux-amd64.tar.gz 2.02 Mdownload https://tiup-mirrors.pingcap.com/client-v1.5.4-linux-amd64.tar.gz 4.30 Mdownload https://tiup-mirrors.pingcap.com/client-v1.5.4-linux-amd64.tar.gz 4.59 MiB / 4.59 MiB 100.00% 20.86 MiB/s Starting component `client`: /root/.tiup/components/client/v1.5.4/tiup-client Connected with driver mysql (5.7.25-TiDB-v4.0.14) Type "help" for help. my:root@127.0.0.1:4000=>

      當然,也可使用 MySQL 客戶端連接 TiDB:

      mysql --host 127.0.0.1 --port 4000 -u root

      5. 通過 http://127.0.0.1:9090 訪問 TiDB 的 Prometheus 管理界面。

      6. 通過 http://127.0.0.1:2379/dashboard 訪問 TiDB Dashboard 頁面,默認用戶名為 root,密碼為空。

      7. 將數據加載到 TiFlash 進行分析,當然,這一步是可選的,畢竟剛啟動,數據庫還沒有什么可用數據,分析什么呢?

      萬字講明白TiDB數據庫丨【綻放吧!數據庫】(數據庫 tidb)

      8.?測試完成之后,可以通過執行以下步驟來清理集群:

      通過按下 ctrl + c 鍵停掉進程,也可以執行以下命令:

      tiup clean --all

      工具及生態

      一個產品或者服務要想贏得市場,必須具備一定的生態環境。接下來,我們就聊一聊 TiDB 數據庫的生態工具的功能以及它們之間的替代關系。

      1. 全量導出

      Dumpling 是一個用于從 MySQL/TiDB 進行全量邏輯導出的工具?;拘畔ⅲ篋umpling 的輸入:MySQL/TiDB 集群;Dumpling 的輸出:SQL/CSV 文件;適用 TiDB 版本:所有版本;Kubernetes 支持:尚未支持。

      2. 全量導入

      TiDB Lightning 是一個用于將全量數據導入到 TiDB 集群的工具。使用 TiDB Lightning 導入數據到 TiDB 時,有三種模式:

      1)local 模式:TiDB Lightning 將數據解析為有序的鍵值對,并直接將其導入 TiKV。這種模式一般用于導入大量的數據(TB 級別)到新集群,但在數據導入過程中集群無法提供正常的服務。

      2)importer 模式:和 local 模式類似,但是需要部署額外的組件 tikv-importer 協助完成鍵值對的導入。對于 4.0 以上的目標集群,請優先使用 local 模式進行導入。

      3)tidb 模式:以 TiDB/MySQL 作為后端,這種模式相比 local 和 importer 模式的導入速度較慢,但是可以在線導入,同時也支持將數據導入到 MySQL。

      基本信息:

      1)TiDB Lightning 的輸入:Dumpling 輸出文件、其他格式兼容的 CSV 文件。

      2)適用 TiDB 版本:v2.1 及以上。

      3)Kubernetes 支持:使用 TiDB Lightning 快速恢復 Kubernetes 上的 TiDB 集群數據。

      3. 備份和恢復

      BR 是一個對 TiDB 進行分布式備份和恢復的工具,可以高效地對大數據量的 TiDB 集群進行數據備份和恢復。

      基本信息:

      1)備份輸出和恢復輸入的文件類型:SST + backupmeta 文件。

      2)適用 TiDB 版本:v3.1 及 v4.0。

      3)Kubernetes 支持:使用 BR 工具備份 TiDB 集群數據到兼容 S3 的存儲, 使用 BR 工具恢復 S3 兼容存儲上的備份數據。

      4. TiDB 增量日志同步

      TiDB Binlog 是收集 TiDB 的增量 binlog 數據,并提供準實時同步和備份的工具。該工具可用于 TiDB 集群間的增量數據同步,如將其中一個 TiDB 集群作為另一個 TiDB 集群的從集群。

      基本信息:

      1)TiDB Binlog 的輸入:TiDB 集群。

      2)TiDB Binlog 的輸出:TiDB 集群、MySQL、Kafka 或者增量備份文件。

      3)適用 TiDB 版本:v2.1 及以上。

      4)Kubernetes 支持:TiDB Binlog 運維文檔,Kubernetes 上的 TiDB Binlog Drainer 配置。

      5. 數據遷入

      TiDB Data Migration (DM) 是將 MySQL/MariaDB 數據遷移到 TiDB 的工具,支持全量數據和增量數據的遷移。

      基本信息:

      1)DM 的輸入:MySQL/MariaDB。

      2)DM 的輸出:TiDB 集群。

      3)適用 TiDB 版本:所有版本

      4)Kubernetes 支持:開發中

      如果數據量在 TB 級別以下,推薦直接使用 DM 遷移 MySQL/MariaDB 數據到 TiDB(遷移的過程包括全量數據的導出導入和增量數據的同步)。

      如果數據量在 TB 級別,推薦的遷移步驟如下:

      1)使用 Dumpling 導出 MySQL/MariaDB 全量數據。

      2)使用 TiDB Lightning 將全量導出數據導入 TiDB 集群。

      3)使用 DM 遷移 MySQL/MariaDB 增量數據到 TiDB。

      結尾

      我們非常高興能夠看到像 TiDB 這樣的國產開源數據庫,能夠在國民生產和生活中發揮更多更大的作用。目前,TiDB 5.0 正在快速迭代中,本著穩、快、安全、好用的原則,持續發力。讓我們期待 TiDB 5.0 早日發布。

      【綻放吧!數據庫】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/285617

      Linux 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:手撕源碼,實現一個Koa。(手撕源碼什么意思)
      下一篇:Python Module_subprocess_子進程(程序調用)
      相關文章
      亚洲欧美自偷自拍另类视| 久久精品国产亚洲AV电影| 亚洲w码欧洲s码免费| 91在线精品亚洲一区二区| 久久精品国产精品亚洲艾| 亚洲av无码精品网站| 亚洲精品亚洲人成在线观看| 亚洲综合熟女久久久30p| 国产亚洲精久久久久久无码77777 国产亚洲精品成人AA片新蒲金 | 亚洲VA综合VA国产产VA中| 亚洲AV无码AV日韩AV网站| 亚洲AV性色在线观看| 在线亚洲v日韩v| 亚洲高清偷拍一区二区三区| 亚洲国产激情一区二区三区| 亚洲伊人成无码综合网 | 亚洲黄网站wwwwww| 亚洲综合激情九月婷婷| 亚洲高清资源在线观看| 亚洲区精品久久一区二区三区| 亚洲videos| 亚洲熟妇AV乱码在线观看| 亚洲av日韩专区在线观看| 少妇亚洲免费精品| 区久久AAA片69亚洲| 国产亚洲精品资源在线26u| 亚洲av日韩av高潮潮喷无码| 亚洲五月六月丁香激情| 亚洲精品在线不卡| 亚洲 欧洲 视频 伦小说| 亚洲AV成人无码网天堂| 亚洲精品国精品久久99热| 亚洲夜夜欢A∨一区二区三区| 久久久久亚洲AV无码专区首| 亚洲精品资源在线| 亚洲熟妇自偷自拍另欧美| 午夜亚洲国产精品福利| 亚洲中文字幕无码日韩| 亚洲国产成人精品不卡青青草原| 亚洲精品福利网泷泽萝拉| 亚洲最大av资源站无码av网址|