數據庫讀寫分離

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

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

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



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


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章