Mycat mysql資料庫切分

2021-08-28 06:21:52 字數 2625 閱讀 1418

1.資料庫切分概述

還來資料的儲存與訪問成為系統設計與使用的瓶頸問題。

兩種型別:聯機事物處理(oltp)和聯機分析處理(olap)

2.資料切分:就是指通過某種特定的條件,將我們存放在同乙個資料庫中的資料分散存放到多個資料庫(主

機)上面,以達到分散單台裝置負載的效果。

資料的切分(sharding)根據其切分規則的型別,可以分為兩種切分模式。一種是按照不同的表(或者

schema)來切分到不同的資料庫(主機)之上,這種切可以稱之為資料的垂直(縱向)切分;另外一種則是根據

表中的資料的邏輯關係,將同乙個表中的資料按照某種條件拆分到多台資料庫(主機)上面,這種切分稱之為數

據的水平(橫向)切分。

垂直切分的最大特點就是規則簡單,實施也更為方便,尤其適合各業務之間的耦合度非常低,相互影響很

小,業務邏輯非常清晰的系統。在這種系統中,可以很容易做到將不同業務模組所使用的表分拆到不同的資料庫

中。根據不同的表來進行拆分,對應用程式的影響也更小,拆分規則也會比較簡單清晰。

水平切分於垂直切分相比,相對來說稍微複雜一些。因為要將同乙個表中的不同資料拆分到不同的資料庫

中,對於應用程式來說,拆分規則本身就較根據表名來拆分更為複雜,後期的資料維護也會更為複雜一些。

3.垂直拆分:乙個資料庫由很多表的構成,每個表對應著不同的業務,垂直切分是指按照業務將表進行分類,分布到不同

的資料庫上面,這樣也就將資料或者說壓力分擔到不同的庫上面。

垂直切分的優缺點:

優點: 拆分後業務清晰,拆分規則明確;

 系統之間整合或擴充套件容易;

 資料維護簡單。

缺點: 部分業務表無法 join,只能通過介面方式解決,提高了系統複雜度;

 受每種業務不同的限制存在單庫效能瓶頸,不易資料擴充套件跟效能提高;

 事務處理複雜。

由於垂直切分是按照業務的分類將表分散到不同的庫,所以有些業務表會過於龐大,存在單庫讀寫與儲存瓶

頸,所以就需要水平拆分來做解決。

4.水平拆分:相對於垂直拆分,水平拆分不是將表做分類,而是按照某個欄位的某種規則來分散到多個庫之中,每個表中

包含一部分資料。簡單來說,我們可以將資料的水平切分理解為是按照資料行的切分,就是將表中的某些行切分

到乙個資料庫,而另外的某些行又切分到其他的資料庫中,如圖:

拆分資料需要定義分片規則。關係型資料庫是行列的微微模型,拆分的乙個原則是找到拆分維度

幾種典型的分片規則包括:

1、按照使用者id求模,將資料分散到不同的資料庫,具有相同資料使用者的資料都被分散到乙個庫中;

2、按照日期,,將不同月甚至日的資料分散到不同的庫中;

3、按照某個特定的字段求摸,或者根據特定範圍段分散到不同的庫中。

如圖,切分原則都是根據業務找到適合的切分規則分散到不同的庫,下面用使用者 id 求模舉例:

優點: 拆分規則抽象好,join 操作基本可以資料庫做;

 不存在單庫大資料,高併發的效能瓶頸;

 應用端改造較少;

 提高了系統的穩定性跟負載能力。

缺點: 拆分規則難以抽象;

 分片事務一致性難以解決;

 資料多次擴充套件難度跟維護量極大;

 跨庫 join 效能較差。

前面講了垂直切分跟水平切分的不同跟優缺點,會發現每種切分方式都有缺點,但共同的特點缺點有:

 引入分布式事務的問題;

 跨節點 join 的問題;

 跨節點合併排序分頁問題;

 多資料來源管理問題。

5.針對資料來源管理,目前主要有兩種思路:

a. 客戶端模式,在每個應用程式模組中配置管理自己需要的乙個(或者多個)資料來源,直接訪問各個資料

庫,在模組內完成資料的整合;

b. 通過中間**層來統一管理所有的資料來源,後端資料庫集群對前端應用程式透明;

可能 90%以上的人在面對上面這兩種解決思路的時候都會傾向於選擇第二種,尤其是系統不斷變得龐大複雜

的時候。確實,這是乙個非常正確的選擇,雖然短期內需要付出的成本可能會相對更大一些,但是對整個系統的

擴充套件性來說,是非常有幫助的。

mycat 通過資料切分解決傳統資料庫的缺陷,又有了 nosql 易於擴充套件的優點。通過中間**層規避了多數

據源的處理問題,對應用完全透明,同時對資料切分後存在的問題,也做了解決方案。下面章節就分析,mycat

的由來及如何進行資料切分問題。

由於資料切分後資料 join 的難度在此也分享一下資料切分的經驗:

第一原則:能不切分盡量不要切分。

第二原則:如果要切分一定要選擇合適的切分規則,提前規劃好。

第三原則:資料切分盡量通過資料冗餘或表分組(table group)來降低跨庫 join 的可能。

第四原則:由於資料庫中介軟體對資料 join 實現的優劣難以把握,而且實現高效能難度極大,業務讀取盡量

少使用多表 join。

資料庫切分

千萬量級的資料,用 mysql 要怎麼存?初學者在看到這個問題的時候,可能首先想到的是 mysql 一張表到底能存放多少條資料?根據 mysql 官方文件的介紹,mysql 理論上限是 232 2 條資料,然而實際操作中,往往還受限於下面兩條因素 myisam data pointer size,m...

資料庫切分之垂直切分

資料庫切分的垂直切分是根據業務而定的,就是把乙個系統所涉及到的表根據業務拆分成多個類,然後沒類放到乙個server上去,就會出現t1,t2,t3這三個表分表放在不同的伺服器上,這個叫水平拆分,根據是t1,t2,t3幾乎沒有關聯查詢。垂直切分的優點 資料庫的拆分簡單明瞭,拆分規則明確 應用程式模組清晰...

資料庫 流量切分 資料庫水平切分方法

在大中型專案中,在資料庫設計的時候,考慮到資料庫最大承受資料量,通常會把資料庫或者資料表水平切分,以降低單個庫,單個表的壓力。我這裡介紹兩個我們專案中常用的資料表切分方法。當然這些方法都是在程式中使用一定的技巧來路由到具體的表的。首先我們要確認根據什麼來水平切分?在我們的系統 sns 中,使用者的u...