1. 程式人生 > >Sharding-切分

Sharding-切分

概念

當資料量非常大時,資料庫拆分是常見的降低資料庫大小,提升效能的方法。資料庫拆分是指按照某種條件,或者維度,將一個庫(表)中的資料分散到多個庫(表)中,通常可以分為水平拆分和垂直拆分。

類別

水平拆分

水平拆分以某個欄位為依據(例如uid),按照一定規則(例如取模),將一個庫(表)上的資料拆分到多個庫(表)上,以降低單庫(表)大小。簡單來講,它是將同一個庫(表)中的記錄拆分到多個結構相同的庫(表)中。

image.png | center | 562x215

  • 每個庫(表)結構一致
  • 每個庫(表)資料不一致,沒有交集
  • 所有庫(表)的並集是全量資料

水平拆分可以把單表資料分佈到其他資料表中,甚至叢集中的其他資料庫中,從而緩解單個數據庫(表)的壓力,解決單表大資料量問題。

垂直拆分

垂直拆分是指將一個屬性較多,一行資料較大的表,將不同的屬性拆分到不同的表中,以降低單庫(表)大小。簡單來說,是把一張表按列切分為多張表。

image.png | center | 466x345

  • 每個庫(表)結構不一致
  • 一般來說,每個庫(表)的屬性至少有一列交集
  • 所有庫(表)的並集是全量資料

參考資料

  1. MySQL筆記
  2. How Sharding Works
  3. 一分鐘掌握資料庫垂直拆分
  4. 資料庫垂直拆分 水平拆分