【轉】數據庫垂直、水平拆分六大原則

數據拆分前實際上是要首先作準備工做的,而後纔是開始數據拆分,我先講拆分前須要作的事情:redis

 

第一步:採用分佈式緩存redis、memcached等下降對數據庫的讀操做。數據庫

第二步:若是緩存使用事後,數據庫訪問量仍是很是大,能夠考慮數據庫讀、寫分離原則。緩存

第三步:當咱們使用讀寫分離、緩存後,數據庫的壓力仍是很大的時候,這就須要使用到數據庫拆分了。服務器

數據庫拆分原則:就是指經過某種特定的條件,按照某個維度,將咱們存放在同一個數據庫中的數據分散存放到多個數據庫(主機)上面以達到分散單庫(主機)負載的效果。分佈式

 

第一步,首選垂直拆分ide

 

一個數據庫由不少表的構成,每一個表對應着不一樣的業務,垂直切分是指按照業務將表進行分類,分佈到不一樣的數據庫上面,這樣也就將數據或者說壓力分擔到不一樣的庫上面 。memcached

 

好比淘寶中期開始的數據庫端按照業務垂直拆分:按照業務交易數據庫、用戶數據庫、商品數據庫、店鋪數據庫等進行拆分。性能

 

採用垂直拆分spa

優勢:1. 拆分後業務清晰,拆分規則明確。2. 系統之間整合或擴展容易。3. 數據維護簡單。設計

缺點:1. 部分業務表沒法join,只能經過接口方式解決,提升了系統複雜度。2. 受每種業務不一樣的限制存在單庫性能瓶頸,不易數據擴展跟性能提升。3. 事務處理複雜。

 

第二步:其次纔是水平拆分

 

水平拆分的典型場景就是你們熟知的分庫分表。

 

垂直拆分後遇到單機瓶頸,可使用水平拆分。相對於垂直拆分的區別是:垂直拆分是把不一樣的表拆到不一樣的數據庫中,而水平拆分是把同一個表拆到不一樣的數據庫中。

 

相對於垂直拆分,水平拆分不是將表的數據作分類,而是按照某個字段的某種規則來分散到多個庫之中,每一個表中包含一部分數據。簡單來講,咱們能夠將數據的水平切分理解爲是按照數據行的切分,就是將表中的某些行切分到一個數據庫,而另外的某些行又切分到其餘的數據庫中。

 

分庫分表須要涉及到對應的SQL路由規則主庫備庫等,例如:淘寶設計了一套TDDL來解決這些問題,應用端只需配置對應的規則便可,對應用端的沒有任何侵入的設計。

 

水平拆分,總之,通常先分庫,若是分庫後查詢仍然慢,因而按照分庫的思想開始作分表的工做數據庫採用分佈式數據庫(全部節點的數據加起來纔算是總體數據),文件系統採用分佈式文件系統任何強大的單一服務器都知足不了大型系統持續增加的業務需求,數據庫讀寫分離隨着業務的發展最終也將沒法知足需求,須要使用分佈式數據庫及分佈式文件系統來支撐。

 

總結,數據庫拆分原則:

 

 

1.優先考慮緩存,下降對數據庫的讀操做。

 

2.再考慮讀寫分離,下降數據庫寫操做。

 

3.最後開始數據拆分,切分模式: 首先垂直(縱向)拆分、再次水平拆分。

 

4.首先考慮按照業務垂直拆分。

 

5.再考慮水平拆分:先分庫(設置數據路由規則,把數據分配到不一樣的庫中)

 

6.最後再考慮分表,單表拆分到數據1000萬之內。

 

原文地址:https://baijiahao.baidu.com/s?id=1607944199335196177&wfr=spider&for=pc

相關文章
相關標籤/搜索