三高Mysql - Mysql特性和未來發展
引言
內容為慕課網的《高併發 高效能 高可用 Mysql 實戰》視訊的學習筆記內容和個人整理擴充套件之後的筆記,這一節主要講講Mysql5.8比較常用的幾個新特性以及針對內部伺服器的優化介紹,理論部分的內容比較多簡單看看理解一下即可。
如果內容比較難可以跟隨《Mysql是怎麼樣執行》個人讀書筆記專欄補補課:
地址如下:從零開始學Mysql。
Mysql8.0新特性
Mysql為什麼叫8.0?其實就是個數字遊戲可以直接認為是5.8。
Mysql8.0有什麼新特性:
視窗函式:rank()
- 列分隔,分為多個視窗
- 在視窗裡面可以執行特定的函式
-- partition by 排名,案例指的是按照顧客支付金額排名。
-- rank() 視窗函式
select *,
rank() over ( partition by customer_id order by amount desc) as ranking
from
payment;
隱藏索引
- 暫時隱藏某個索引。
- 可以隱藏和顯示索引,測試索引作用,多用於開發的時候評估索引的可用性。
show index from payment;
-- 隱藏索引
alter table payment alter index fk_payment_rental Invisible;
-- 顯示索引
alter table payment alter index fk_payment_rental Visible;
降序索引
- 8.0 之前只有升序的索引,自8.0之後引入了降序索引的索引排序方式,用於進行某些特殊查詢的情況下也可以走索引。
通用表示式(CTE)
- CTE表示式預先定義複雜語句中反覆使用的中間結果
- 可以簡單認為是一個臨時檢視
select b,d
from (select a,b from table1) join (select a,b from table2)
where cte1.a = cte2.c;
-- 簡化
with
cte1 as (select a,b from table1),
cte1 as (select a,b from table2)
select b,d
from cte1 join cte2
where cte.a = cte2.c;
UTF8編碼
- UTF8mb4作為預設的字符集
DDL 事務
- 支援DDL事務,後設資料操作可以回滾
對於不同資料庫之間的DDL對比,可以看這篇文章:
InnoDB Cluster:組複製不是說Mysql可以組叢集了而是說保證強一致性的資料同步,下面是關於一些核心元件的解釋:
- Mysql Router:路由
- 管理端繞過路由進行配置,可以實現主備的自由切換。
另外從上面這個圖還可以看到在新的概念圖裡面一般不會把節點叫master/slave了,額,zzzq就完事了。
Mysql官方的組複製其實是借用了Percona XtraDB Cluster的設計思路,只不過加了一些輔助工具看起來比較強一點而已,強一致性的組複製早就被實現過了,比如Percona XtraDB Cluster,設計思路也是來自於Zookeeper的一致性協議,可以認為是原理大同小異。
最後強一致性的最大問題那就是等待同步的時間是否可以被系統接受,所以看似組複製在嘗試解決複製帶來的資料同步問題實際上這種代價看上去還是比較大的。
資料庫的分類
對於資料庫我們可以做出下面的總結,市面上主流的資料庫基本都可以按照下面的幾種方式進行歸類:用途歸類,儲存形式歸類和架構分類。
用途分類:
- OLTP:線上事務處理
- OLAP:線上分析處理
- HTAP:事務和分析混合處理
OLTP:線上事務交易和處理系統,SQL語句不復雜大都用於事務的處理。併發量打,可用性的要求十分高。(Mysql / Postgres)
OLAP:線上分析處理系統,SQL語句複雜,並且資料量十分大,單個事務為單位。(Hive)
HTAP:混合兩種資料庫優點,一種架構多功能。(設計思路優秀,但是實際產出很可能類似新能源汽車,燒油不行燒點也不行)
儲存形式分類
- 行儲存:傳統資料庫的儲存形式
- 列儲存:針對傳統OLTP資料庫大資料量分析而逐漸出現的一種格式,行格式利於資料儲存和資料分析。
- K/V儲存:無論是行還是列儲存,似乎都逃不過KV的概念,這一點讀者可以自行思考理解。
架構分類
Share-Everything
- CPU、記憶體、硬碟,多合一,類似電腦(資料庫不用)
Share-Memory
- 多CPU獨立,記憶體,硬碟,超級計算機架構(多CPU同記憶體通訊,同一片大記憶體超級計算機)
SHare-Disk
- 一個CPU繫結一個記憶體,硬碟獨立,共享儲存的架構。
Shared-Nothing
- CPU、記憶體、硬碟共享,常見叢集的架構。
單體資料庫之王
PostgresSQL說實話國內用的人太少了國內市場沒有選擇並且被忽視的優秀資料庫,然而在國外Postgre SQL隨著開源的不斷髮展以及比Mysql更優秀的設計市場佔有率在逐年上升,同時Postgresql對於資料庫設計者來說也是很好的範本,無論是學習還是研究都是十分好的參考資料,最後Postgresql是開源的社群在國外也比較活躍,這一點很重要,可惜國內只能老老實實研究Mysql了。
Mysql隨著Oracle的商業化逐漸自閉式發展進步也越來越小實在看不到他的未來。
Postgresql和Mysql類似的地方以及更加進步的地方:
- Mysql類似功能
- 效能更好,更穩定
- 程式碼質量更高
- 有趕超Mysql的優勢
良好的外掛,包含並不完全列舉比如下面的這些外掛:
- Postgres-XL(OLTP)
- GTM管理每個事務的執行
- Coordinator解析SQL,制定執行計劃,分發
- DataNode返回執行結果到Coordinator。
GreenPlum 是給予Postgres分散式分析叢集
- 高效能SQL優化器:GPORCA
- Slice的實現機制
![](https://adong-picture.oss-cn-shenzhen.aliyuncs.com/adong/202204091750619.png)
Mysql如何魔改
首先看看PolarDB的改進,PolarDB是阿里巴巴的東西所以除了內部人員可能使用之外外部的技術人員基本接觸不到這個東西,這裡簡單介紹相關的設計思路。
下面為相關的設計圖:
在PorlarDB中包含下面的關鍵元件:
- ECS:客戶端
- Read/Write Splitter 讀寫分離中介軟體
- Mysql節點,檔案系統, 資料路由和資料緩衝。主備伺服器
- RMDA統一的管理
Data Chunk Server:資料的儲存桶,儲存伺服器,叢集的方式儲存
- Raft:強一致性的儲存伺服器。
- 日誌傳送和共享儲存
7. 備庫如何查詢資料
在傳統的方式中,備庫使用下面的方式進行處理
創新和改進點:在讀取事務改動的時候,使用了疊加redo log的方式處理,防止讀寫庫的資料不一致的問題
如何支撐雙十一?
雙十一剛剛出現的時候是一個十分火熱的話題,然而到了現在電商成熟的年代雙十一似乎變成了“日常活動”......,雙十一的支撐依靠十分核心的中間元件:OceanBase,也被稱之為new sql資料庫。
OceanBase屬於行列互存的架構最大的特點是機房跨全球。儲存引擎的最下層是分片的分割槽層,Share-Nothing架構,資料分割槽使用的一主兩備的結構。
資料如何更新?
資料更新依靠下面的流程,看起來比較負責,其實這裡的設計思路有點類似谷歌在2006年的“Bigtable”設計,而SSTable於這篇論文中首次出現,SSTable主要用於給予LSM-Tree資料結構的日誌儲存引擎。
如果不清楚什麼是LSM-Tree,可以閱讀下面的文章瞭解:
《資料密集型型系統設計》LSM-Tree VS BTree - 掘金 (juejin.cn)
國產混合資料庫-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 適合高可用、強一致要求較高、資料規模較大等各種應用場景。
簡單來說Tidb主要有下面的幾個特點:
- 一鍵水平擴容或者縮容
- 金融級高可用
- 實時HTAP
HTAP資料庫(Hybrid Transaction and Analytical Process,混合事務和分析處理)。2014年Gartner的一份報告中使用混合事務分析處理(HTAP)一詞描述新型的應用程式框架,以打破OLTP和OLAP之間的隔閡,既可以應用於事務型資料庫場景,亦可以應用於分析型資料庫場景。實現實時業務決策。這種架構具有顯而易見的優勢:不但避免了繁瑣且昂貴的ETL操作,而且可以更快地對最新資料進行分析。這種快速分析資料的能力將成為未來企業的核心競爭力之一。
- 雲原生的分散式資料庫
- 相容Mysql5.7 協議和Mysql生態。
雖然TiDB被使用之後有許多令人詬病的缺點,同時因為是新型的資料庫對於一些實踐問題的解答資料也比較少,但是作為一款非常有潛力的資料庫還是值得我們保持關注的。
TiDB的架構設計如下:
- 純分散式架構,擁有良好的擴充套件性,支援彈性的擴縮容
- 支援 SQL,對外暴露 Mysql 的網路協議,併相容大多數 Mysql 的語法,在大多數場景下可以直接替換 Mysql
- 預設支援高可用,在少數副本失效的情況下,資料庫本身能夠自動進行資料修復和故障轉移,對業務透明
- 支援 ACID 事務,對於一些有強一致需求的場景友好,例如:銀行轉賬
- 具有豐富的工具鏈生態,覆蓋資料遷移、同步、備份等多種場景
CockroachDB
小強資料庫,2015啟動,谷歌前員工發起。
CockroachDB,目標是打造一個開源、可伸縮、跨地域複製且相容事務的 ACID 特性的分散式資料庫,它不僅能實現全域性(多資料中心)的一致性,而且保證了資料庫極強的生存能力,就像 Cockroach(蟑螂)這個名字一樣,是打不死的小強。
CockroachDB 的思路源自 Google 的全球性分散式資料庫 Spanner。其理念是將資料分佈在多資料中心的多臺伺服器上,實現一個可擴充套件,多版本,全球分散式並支援同步複製的資料庫。
小結
本節內容主要針對Mysql的一些新特性以及其他第三方如何對於資料庫進行擴充套件的,同時介紹了資料庫的分類,我們可以發現資料庫的分類最後都可以按照某種特定的型別進行劃分。
寫在最後
本節內容非常簡單,讀者可以根據相關的內容進行深入學習即可。