MySQL專題:資料庫垂直、水平拆分
目錄
資料拆分前其實是要首先做準備工作的,然後才是開始資料拆分,我先講拆分前需要做的事情:
- 第一步:採用分散式快取redis、memcached等降低對資料庫的讀操作。
- 第二步:如果快取使用過後,資料庫訪問量還是非常大,可以考慮資料庫讀、寫分離原則。
- 第三步:當我們使用讀寫分離、快取後,資料庫的壓力還是很大的時候,這就需要使用到資料庫拆分了。
資料庫拆分原則:就是指通過某種特定的條件,按照某個維度,將我們存放在同一個資料庫中的資料分散存放到多個資料庫(主機)上面以達到分散單庫(主機)負載的效果。
垂直拆分
一個資料庫由很多表的構成,每個表對應著不同的業務,垂直切分是指按照業務將表進行分類,分佈到不同的資料庫上面,這樣也就將資料或者說壓力分擔到不同的庫上面 。
比如淘寶中期開始的資料庫端按照業務垂直拆分:按照業務交易資料庫、使用者資料庫、商品資料庫、店鋪資料庫等進行拆分。
優點
1. 拆分後業務清晰,拆分規則明確。
2. 系統之間整合或擴充套件容易。
3. 資料維護簡單。
缺點
1. 部分業務表無法join,只能通過介面方式解決,提高了系統複雜度。
2. 受每種業務不同的限制存在單庫效能瓶頸,不易資料擴充套件跟效能提高。
3. 事務處理複雜。
水平拆分
水平拆分的典型場景就是大家熟知的分庫分表。
垂直拆分後遇到單機瓶頸,可以使用水平拆分。相對於垂直拆分的區別是:垂直拆分是把不同的表拆到不同的資料庫中,而水平拆分是把同一個表拆到不同的資料庫中。
相對於垂直拆分,水平拆分不是將表的資料做分類,而是按照某個欄位的某種規則來分散到多個庫之中,每個表中包含一部分資料。簡單來說,我們可以將資料的水平切分理解為是按照資料行的切分,就是將表中 的某些行切分到一個資料庫,而另外的某些行又切分到其他的資料庫中。
分庫分表需要涉及到對應的SQL路由規則主庫備庫等,例如:淘寶設計了一套TDDL來解決這些問題,應用端只需配置對應的規則即可,對應用端的沒有任何侵入的設計。
水平拆分,總之,一般先分庫,如果分庫後查詢仍然慢,於是按照分庫的思想開始做分表的工作資料庫採用分散式資料庫(所有節點的資料加起來才算是整體資料),檔案系統採用分散式檔案系統任何強大的單一伺服器都滿足不了大型系統持續增長的業務需求,資料庫讀寫分離隨著業務的發展最終也將無法滿足需求,需要使用分散式資料庫及分散式檔案系統來支撐。
總結
資料庫拆分原則:
1.優先考慮快取降低對資料庫的讀操作。
2.再考慮讀寫分離,降低資料庫寫操作。
3.最後開始資料拆分,切分模式: 首先垂直(縱向)拆分、再次水平拆分。
4.首先考慮按照業務垂直拆分。
5.再考慮水平拆分:先分庫(設定資料路由規則,把資料分配到不同的庫中)
6.最後再考慮分表,單表拆分到資料1000萬以內。
相關文章
- MySQL垂直拆分和水平拆分的優缺點和共同點總結MySql
- 徹底搞清MySQL分庫分表(垂直分庫,垂直分表,水平分庫,水平分表)MySql
- 淺談居中問題(水平居中、垂直居中、水平垂直居中)
- 徹底搞清分庫分表(垂直分庫,垂直分表,水平分庫,水平分表)
- MySql資料庫連線池專題MySql資料庫
- css水平垂直居中CSS
- 元素垂直水平居中
- div 水平垂直 居中
- MySQL 常見資料拆分辦法MySql
- 面試題:水平垂直居中的17種方法面試題
- 6.6水平垂直越權
- 水平居中和垂直居中
- sharding-jdbc水平垂直分庫分表環境搭建JDBC
- 如何實現水平垂直居中?
- 內容垂直水平對其
- CSS垂直居中和水平居中CSS
- CSS視窗垂直水平居中CSS
- CSS水平居中和垂直居中CSS
- SpringBoot專案連線MySQL資料庫Spring BootMySql資料庫
- CS 7280資料庫管理專題資料庫
- 單一資料庫拆分成幾十個資料庫的意義資料庫
- 水平居中、垂直居中、水平垂直居中、浮動居中、絕對定位居中…….幫你搞定
- Mysql資料庫許可權問題MySql資料庫
- 水平垂直居中的實現方法
- mycat 水平切分|垂直切分|ER分片
- 設定圖片水平垂直居中
- 元素水平居中,垂直居中方法
- 元素自適應水平垂直居中
- css 水平垂直居中實現方式CSS
- 前端面試中最常問到的垂直水平居中問題前端面試
- [資料庫]【MySQL】MySQL資料庫規範總結資料庫MySql
- MySQL運維6-Mycat垂直分庫MySql運維
- MYSQL資料庫MySql資料庫
- 資料庫-MySQL資料庫MySql
- 資料庫 MySQL資料庫MySql
- 資料庫(MySQL)資料庫MySql
- pdo_mysql 資料庫亂碼問題MySql資料庫
- LeetCode 資料庫解題彙總 MySql版LeetCode資料庫MySql