資料庫分片簡單認知
資料的切分(Sharding)根據其切分規則的型別,可以分為兩種切分模式。一種是按照不同的表(或者Schema)來切分到不同的資料庫(主機)之上,這種切可以稱之為資料的垂直(縱向)切分;另外一種則是根據表中的資料的邏輯關係,將同一個表中的資料按照某種條件拆分到多臺資料庫(主機)上面,這種切分稱之為資料的水平(橫向)切分。
一、垂直切分
一個數據庫由很多表構成,每個表對應著不同的業務,垂直切分是按照業務將表進行分類,分佈到不同的資料庫上面
一個架構設計較好的應用系統,其總體功能肯定是由很多個功能模組所組成的,而每一個功能模組所需要的資料對應到資料庫中就是一個或者多個表。而在架構設計中,各個功能模組相互之間的互動點越統一越少,系統的耦合度就越低,系統各個模組的維護性以及擴充套件性也就越好。這樣的系統,實現資料的垂直切分也就越容易。
二、水平切分
相對於垂直拆分,水平拆分不是將表做分類,而是按照某個欄位的某種規則來分散到多個庫之中,每個表中包含一部分資料。簡單來說,我們可以將資料的水平切分理解為是按照資料行的切分,就是將表中的某些行切分到一個數據庫,而另外的某些行又切分到其他的資料庫中。
拆分資料就是定義分片規則。關係型資料庫是行列的二維模型,拆分的第一原則就是找到拆分維度。
幾種典型的分片規則:
-
按照使用者ID求模,將資料分散到不同的資料庫,具有相同資料使用者的資料都被分散到一個庫中
-
按照日期,將不同月甚至日的資料分散到不同庫
-
按照某個特定欄位求模,或者根據特定範圍段分散到不同的庫中
三、分片比較
分片型別 |
優點 |
缺點 |
垂直分割槽 |
1.拆分後業務清晰,拆分規則明確; 2.系統之間整合或擴充套件容易; 3.資料維護簡單 |
1.部分業務表無法join,只能通過介面方式解決,提高了系統複雜度; 2.受每種業務不同的限制存在單庫效能瓶頸,不易資料擴充套件效能提高; 3.事務處理複雜 |
水平切分 |
1.拆分規則抽象好,join操作基本可以資料庫做; 2.不存在單庫大資料,高併發的效能瓶頸 3.應用端改造少 4.提高了系統的穩定性和負載能力 |
1.拆分規則難以抽象 2.分片事務一致性難以解決 3.資料多次擴充套件難度跟維護量極大 4.跨庫join效能較差 |
四、資料來源管理
客戶端模式:在每個應用程式模組中配置管理自己需要的一個(或多個)資料來源,直接訪問各個資料庫,在模組內完成資料的整合。
代理模式:通過中間代理層來統一管理所有的資料來源,後端資料庫叢集對前端應用程式透明。