1. 程式人生 > >數據庫讀寫分離

數據庫讀寫分離

atlas 優化 新的 使用 行數 技術分享 之前 right sql

  • 緣由:對數據庫有頻繁操作,而寫數據本身比讀數據更耗時,則可以設計主從數據庫復制的方式同步數據,主數據庫用來更新數據,從數據庫用來查詢數據庫。
  • 以MySql為例,可以基於sql語句復制在從庫上執行,或基於行數據的復制,一般會采用兩種混合:先默認使用sql復制執行,如果無法精確執行,則使用行數據復制。
  • 復制過程:主庫在事務完成之前,會記錄更新日誌(二進制);然後從庫啟動一個I/O工作線程來讀取更新日誌(如沒有更新,則進入睡眠狀態等待),寫入中繼日誌,最後從庫中的sql線程讀取中繼日誌,回放在主庫中更新的操作,以達到與主庫數據保持一致。
  • 這種方式既做到數據備份,也做到數據庫連接分流,也優化系統性能。
  • 實現方式:從代碼層實現讀寫分離,本身編碼及維護工作量大,一般考慮使用代理實現(mysql_proxy,Atlas-360,Amoeba-阿裏巴巴);
  • Spring可通過切面的方式實現讀寫分離(速度快,支持事物,但不好管理);中間件如Altas也支持事物,也管理方便,只是對性能稍有損耗。

技術分享圖片

數據庫讀寫分離