讀寫分離是讓主庫處理事務性增刪改,而從庫處理查操做。數據庫複製來把事務性操做的數據變動同步到從庫。mysql
讀寫操做有不一樣的實現方式,每每寫操做更耗時,讀操做在架構角度則有更多的選擇,因此讀寫分離是架構及系統優化很重要的一種手段。redis
分區是將持久化數據文件劃分紅多個小塊,根據必定的規則把文件和索引進行分割,分區後的表仍是一張表,可是在真是場景中mysql分區使用不多,分區每每用在一些其餘大數據中間件下,如hbase,hdfs等,mysql的讀解決方案常見的有分表和分庫解決方案。算法
當數據量達到必定程度後,致使處理性能不足,或者若是表中字段冷熱數據比較明顯,能夠採用分表處理。就是把數據字段按照某種分表原則拆分到多個表中,這樣能夠把大表變成小表,不一樣小表中數據不重複,從而提升處理效率。sql
分區和分表是對數據的拆分,對數據庫性能有必定的提高,可是當數據發展到必定程度後,單純的分表沒法解決併發請求訪問同一個數據庫,此時數據庫的瓶頸可能到了如網絡IO,文件IO,CPU,內存上,這樣形成單臺服務器的容量,QPS、TPS接近或超過了單個數據庫實例處理極限,此時每每採用垂直和水平結合的方式拆分數據,把數據存儲服務拆分到多臺數據庫服務器上。數據庫
主庫負責寫,從庫負責讀,一主多從,從而實現讀寫分離,最後能夠依賴其餘中間件對於讀寫兩種場景特色進行優化,好比引入redis等緩存中間件或搜索引擎優化查詢,引入mq機制優化寫操做,下降後端數據庫壓力。後端
分庫分表實現方式相似,講常常訪問和不常常訪問的字段拆分到不一樣的庫表中。緩存
水平拆分是根據分片算法講一個庫表拆分到多個庫表中,如按照ID最後一位對3取餘,尾數是1的放到第一個庫表,尾數是2的放到第二個庫表。服務器