有一些技術同窗可能對於「讀寫分離」瞭解很少,認爲數據庫的負載問題均可以使用「讀寫分離」來解決。程序員
這實際上是一個很是大的誤區,咱們要用「讀寫分離」,首先應該明白「讀寫分離」是用來解決什麼樣的問題的,而不是僅僅會用這個技術。算法
什麼是讀寫分離?數據庫
其實就是將數據庫分爲了主從庫,一個主庫用於寫數據,多個從庫完成讀數據的操做,主從庫之間經過某種機制進行數據的同步,是一種常見的數據庫架構。緩存
一個組從同步集羣,一般被稱爲是一個「分組」。架構
數據庫分組架構解決什麼問題?併發
大多數互聯網業務,每每讀多寫少,這時候,數據庫的讀會首先稱爲數據庫的瓶頸,這時,若是咱們但願可以線性的提高數據庫的讀性能,消除讀寫鎖衝突從而提高數據庫的寫性能,那麼就可使用「分組架構」(讀寫分離架構)。性能
用一句話歸納,讀寫分離是用來解決數據庫的讀性能瓶頸的。spa
可是,不是任何讀性能瓶頸都須要使用讀寫分離,咱們還能夠有其餘解決方案。blog
在互聯網的應用場景中,經常數據量大、併發量高、高可用要求高、一致性要求高,若是使用「讀寫分離」,就須要注意這些問題:開發
數據庫鏈接池要進行區分,哪些是讀鏈接池,哪一個是寫鏈接池,研發的難度會增長;爲了保證高可用,讀鏈接池要可以實現故障自動轉移;主從的一致性問題須要考慮。在這麼多的問題須要考慮的狀況下,若是咱們僅僅是爲了解決「數據庫讀的瓶頸問題」,爲何不選擇使用緩存呢?
爲何用緩存
緩存,也是互聯網中經常使用到的一種架構方式,同「讀寫分離」不一樣,讀寫分離是經過多個讀庫,分攤了數據庫讀的壓力,而存儲則是經過緩存的使用,減小了數據庫讀的壓力。他們沒有誰替代誰的說法,可是,若是在緩存的讀寫分離進行二選一時,仍是應該首先考慮緩存。
爲何呢?
緩存的使用成本要比從庫少很是多;緩存的開發比較容易,大部分的讀操做均可以先去緩存,找不到的再滲透到數據庫。固然,若是咱們已經運用了緩存,可是讀依舊仍是瓶頸時,就能夠選擇「讀寫分離」架構了。簡單來講,咱們能夠將讀寫分離看作是緩存都解決不了時的一種解決方案。
固然,緩存也不是沒有缺點的
對於緩存,咱們必需要考慮的就是高可用,否則,若是緩存一旦掛了,全部的流量都同時彙集到了數據庫上,那麼數據庫是確定會掛掉的。
對於常見的數據庫瓶頸是什麼呢?
實際上是數據容量的瓶頸。例如訂單表,數據量只增不減,歷史數據又必需要留存,很是容易成爲性能的瓶頸,而要解決這樣的數據庫瓶頸問題,「讀寫分離」和緩存每每都不合適,最適合的是什麼呢?
數據庫水平切分
什麼是數據庫水平切分?
數據庫水平切分,也是一種常見的數據庫架構,是一種經過算法,將數據庫進行分割的架構。一個水平切分集羣中的每一個數據庫,一般稱爲一個「分片」。每個分片中的數據沒有重合,全部分片中的數據並集組成所有數據。
水平切分架構解決什麼問題呢?
大部分的互聯網業務,數據量都很是大,單庫容量最容易成爲瓶頸,當單庫的容量成爲了瓶頸,咱們但願提升數據庫的寫性能,下降單庫容量的話,就能夠採用水平切分了。
而有少部分程序員,會沒有分析數據庫的性能瓶頸是什麼,就貿貿然的使用「讀寫分離」,卻不知「水平切分」纔是正道。
【官方正品】ZTM無線藍牙耳機運動跑步雙耳塞入耳頭戴式開車重低音炮可接聽電話超長待機蘋果手機通用耳麥