數據庫讀寫分離技術

讀寫分離是爲了提供程序的性能,隨着用戶的增長,數據庫的壓力也會愈來愈大,對數據庫或者SQL的基本優化可能達不到最終的效果,讀寫分離簡單的說是把對數據庫讀和寫的操做分開對應不一樣的數據庫服務器,這樣能有效地減輕數據庫壓力,也能減輕io壓力。主數據庫提供寫操做,從數據庫提供讀操做。
系統使用緩存後,很大部分功能是不用經過數據庫就能夠完成的。可是仍然有一部分功能須要和所有的寫入操做須要訪問數據庫。因此要提供主從數據庫來分離讀寫操做,主數據庫同步到從數據庫後,從數據庫通常由多臺數據庫組成這樣才能達到減輕壓力的目的mysql

 

 

隨着一個網站的業務不斷擴展,數據不斷增長,數據庫的壓力也會愈來愈大,對數據庫或者SQL的基本優化可能達不到最終的效果,咱們能夠採用讀寫分離的策 略來改變現狀。讀寫分離如今被大量應用於不少大型網站,這個技術也不足爲奇了。ebay就作得很是好。ebay用的是oracle,據說是用Quest Share Plex 來實現主從複製數據。sql

     讀寫分離簡單的說是把對數據庫讀和寫的操做分開對應不一樣的數據庫服務器,這樣能有效地減輕數據庫壓力,也能減輕io壓力。主數據庫提供寫操做,從數據庫提 供讀操做,其實在不少系統中,主要是讀的操做。當主數據庫進行寫操做時,數據要同步到從的數據庫,這樣纔能有效保證數據庫完整性。Quest SharePlex就是比較牛的同步數據工具,據說比oracle自己的流複製還好,mysql也有本身的同步數據技術。mysql只要是經過二進制日誌來複制數據。經過日誌在從數據庫重複主數據庫的操做達到複製數據目的。這個複製比較好的就是經過異步方法,把數據同步到從數據庫。數據庫

      主數據庫同步到從數據庫後,從數據庫通常由多臺數據庫組成這樣才能達到減輕壓力的目的。讀的操做怎麼樣分配到從數據庫上?應該根據服務器的壓力把讀的操做分配到服務器,而不是簡單的隨機分配。mysql提供了MySQL-Proxy實現讀寫分離操做。不過MySQL-Proxy好像好久不更新了。oracle能夠經過F5有效分配讀從數據庫的壓力。緩存


ebay的讀寫分離(網上找到就拿來用了)服務器


 mysql的讀寫分離
       上面說的數據庫同步複製,都是在從同一種數據庫中,若是我要把oracle的數據同步到mysql中,其實要實現這種方案的理由很簡單,mysql免費,oracle太貴。好像Quest SharePlex也實現不了改功能吧。好像如今市面尚未這個工具吧。那樣應該怎麼實現數據同步?其實咱們能夠考慮本身開發一套同步數據組件,經過消息,實現異步複製數據。其實這個實現起來要考慮不少方面問題,高併發的問題,失敗記錄等。其實這種方法也能夠同步數據到memcache中。據說oracle的Stream也能實現,不過沒有試過。併發

相關文章
相關標籤/搜索