分庫與分表

數據庫分庫與分表

簡介

​ 就是將原本存儲在一個庫的數據分塊存儲在多個庫上,將原本存儲在一個表的數據分塊存儲在多個表裏面

切分模式

​ 數據的切分根據其切分規則的類型,可以分爲如下兩種切分模式

垂直(縱向)切分

​ 把單一的表拆分成多個表,並分散到不同的數據庫(主機)上,即將一個表中的字段進行分割出來,形成多張表存儲數據

優點:

  • 拆分後業務清晰,拆分規則明確
  • 系統之間進行整合或擴展很容易
  • 按照不同的類型將表放到不同的機器上便於管理
  • 便於實現動靜分離、冷熱分離的數據庫表的設計模式
  • 數據維護簡單

缺點

  • 業務表多變,SQL語句複雜
水平(橫向)切分

​ 根據表中數據的邏輯關係,將統一表中的數據按照某種條件拆分到多臺數據庫上,並非是將表進行切分,而是將其按照某個字段的某種規則分散到多個庫中,在表中的包含一部分數據,所有表加起來就是整個數據。

​ 我們通常將數據分配的原則稱爲分片規則,常見的分片規則有對用戶的id取模。

注意我們選擇分片規則的時候,儘量選擇一些不會變動的值,如果值修改了我們就要把數據移動到相應的數據庫中,這樣就比較麻煩

優點:

  • 單庫單表的數據保持在一定的量級,有利於性能的提高
  • 切分的表結構相同,應用層改動較少,只需要增加路由規則即可
  • 提高了系統的穩定性和負載能力

缺點:

  • 切分後,數據分散,很難利用數據庫join操作,跨庫join性能較差
  • 切分規則難以抽象
  • 切片事務的一致性難以解決
  • 數據擴容的難度和維護量很大

爲什麼要分庫分表

​ 數據庫負載增大時的操作,隨着用戶量增加,訪問量也隨之提高,當提高到一定的量級的時候,應用也會緩慢。雖然可以通過增大前端應用負載的方式來提升速度,但數據庫是存在性能瓶頸的

常見的中間件

MyCat

​ 使用mycat時不需要改代碼,我們在使用的時候,如果有多個庫,我們在代碼裏只需要寫mycat對外的一個邏輯庫信息即可,而數據庫層面的配置,都在mycat的配置信息中,

Sharding JDBC

​ 是一個jar包,,使用sharding-jdbc時需要修改代碼。我們在使用的時候,需要引入sharding jdbc的jar包,在配置文件裏面寫明總共有多少個庫,每個庫裏面的表,每個表的分片規則等信息。

最後

  • 如果覺得看完有收穫,希望能給我點個贊,這將會是我更新的最大動力,感謝各位的支持
  • 歡迎各位關注我的公衆號【java冢狐】,專注於java和計算機基礎知識,保證讓你看完有所收穫,不信你打我
  • 如果看完有不同的意見或者建議,歡迎多多評論一起交流。感謝各位的支持以及厚愛。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章