天天看點

高性能資料庫之 讀寫分離

前言

随着業務的不斷發展,單機資料庫已經不能滿足業務需要。接下來講講資料庫叢集的幾種方式:讀寫分離和分庫分表。

讀寫分離

原理

讀寫分離的原理就是将資料庫的讀寫操作分散在不同的節點上。

實作方式

  • 多台資料庫搭建一個叢集,一台資料庫做主庫,其他資料庫做從庫。
  • 主庫負責寫操作,從庫負責讀操作
  • 主庫通過複制将資料的變更同步到從庫,每台節點都有完整的資料

需要考慮的問題

  1. 複制延遲

    主庫在資料變更後,不可能立即去進行同步,會有一個延遲。如果這時遇到修改完資料需要立即讀出資料的場景,去從庫讀讀是不可行的。這裡有幾個解決辦法

    1. 這次寫操作後的讀操作指定使用主庫
    這種讀操作就會是正确的,但是和業務很耦合
    1. 從庫查詢失敗,去主庫進行二次查詢

    這種實作較為簡單,但是要考慮二次查詢的頻率,如果二次查詢場景很多,會增加資料庫壓力。

    3. 關鍵業務隻走主庫,其他走從庫

    比如使用者修改了登入資訊,這時需要走主庫(不然會登入不上)。如果是修改了個性簽名,可以進行讀寫分離。

  2. 配置設定機制

    将讀寫分開,通路不同資料庫,一般有兩種方式:代碼封裝和中間件封裝。

    1. 代碼封裝

      就是在代碼中,實作資料庫連接配接的管理,自由配置設定讀寫分離。

      特點:

      1. 實作簡單
      2. 如果發生主從切換,就會比較麻煩,則需要修改配置并重新開機服務
    2. 中間件封裝

      中間件封裝的意思就是獨立出一個資料庫管理系統,實作讀寫分離和資料庫連接配接管理。業務系統像連接配接資料庫伺服器一樣連接配接這個管理系統。

      特點:

      1. 實作較複雜
      2. 可以應用于很多業務系統中
      3. 業務系統不用關心主從切換,管理系統可以動态識别哪個庫是主庫(可寫)

總結

讀寫分離适合讀多寫少的業務場景。

在單機資料庫情況下,表上家索引會優化查詢,但是影響寫入速度。讀寫分離後可以單獨對讀庫進行優化,寫庫寫入速度也會提高。