mysql 讀寫分離(實戰篇)

黄舟
發布: 2016-12-17 14:20:53
原創
912 人瀏覽過

MySQL Proxy最強大的一項功能是實作「讀寫分離(Read/Write Splitting)」。基本的原理是讓主資料庫處理事務性查詢,而從資料庫處理SELECT查詢。資料庫複製被用來把事務性查詢導致的變更同步到叢集中的從資料庫。

 mysql 讀寫分離(實戰篇)

Jan Kneschke在《MySQL Proxy learns R/W Splitting》中詳細的介紹了這種技巧以及連接池問題: 
  為了實現讀取和寫入分離我們需要連接池。我們僅在已開啟了到一個後端的一條經過認證的連線的情況下,才切換到該後端。 MySQL協定首先進行握手。當進入到查詢/返回結果的階段再認證新連線就太晚了。我們必須保證擁有足夠的打開的連接才能保持運作正常。 
  實作讀寫分離的LUA腳本: 

- 读写分离 
  -- 
  -- 发送所有的非事务性Select到一个从数据库 
  if is_in_transaction == 0 and 
  packet:byte() == proxy.COM_QUERY and 
  packet:sub(2, 7) == "SELECT" then 
  local max_conns = -1 
  local max_conns_ndx = 0 
  for i = 1, #proxy.servers do 
  local s = proxy.servers[i] 
  -- 需要选择一个拥有空闲连接的从数据库 
  if s.type == proxy.BACKEND_TYPE_RO and 
  s.idling_connections > 0 then 
  if max_conns == -1 or 
  s.connected_clients < max_conns then 
  max_conns = s.connected_clients 
  max_conns_ndx = i 
  end 
  end 
  end 
  -- 至此,我们找到了一个拥有空闲连接的从数据库 
  if max_conns_ndx > 0 then 
  proxy.connection.backend_ndx = max_conns_ndx 
  end 
  else 
  -- 发送到主数据库 
  end 
  return proxy.PROXY_SEND_QUERY
登入後複製

註解:此技巧也可以用來實現其他的資料分佈策略,例如分片(Sharding)。

 以上就是mysql 讀寫分離(實戰篇)的內容,更多相關文章請關注PHP中文網(www.php.cn)! 


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!