為什么80%的碼農都做不了架構師?>>> ??
MySQL水平分區代理Spock Proxy 水平分區(sharding)將同一數據表中的數據通過特定的算法進行分離,分別保存在不同的數據表中,從而部署到不同的數據庫服務器上。 水平分區后,數據拆分到不同的服務器上,面臨的最重要的問題是應用程序如何正確的找到它們。可以通過使用Spock Proxy來幫助應用程序實現水平分區的訪問調度。意味著不需要在應用程序中維護那些分區對應關系。 Spock Proxy項目:http://spockproxy.sourceforge.net/ ? 一.Spock Proxy介紹 1.Spock Proxy支持基于水平范圍分區(range-based horizontal partioning)。將單個數據庫分片到多個,以提高性能和可擴展性。 2.從客戶端截取SQL語句,將查詢發送到正確分區數據庫服務器上,然后聚集從每個數據庫查詢到的結果返回給客戶端,作為一個普通的MySQL結果集。 3.對應用程序透明,避免修改應用程序。 4.Spock基于Rails和ActiveRecord。Spock Proxy基于MySQL Proxy開發,是MySQL Proxy的一個分支。對MySQLProxy做的改進有: a.不使用lua腳本。提升性能,多個數據庫返回的結果合并需要與lua腳本交互,開銷大。 b.客戶端登陸驗證。MySQL Proxy支持客戶端與各個服務器直接進行登錄驗證。而Spock Proxy統一管理,分離客戶端與服務器的連接。自動驗證客戶端使用的用戶名/密碼(啟動spockproxy指定的). c.動態連接池。Spock Proxy分離客戶端與服務器的連接,允許最小和最大連接數的管理。spockproxy啟動后建立了一個連接池的最小連接數。 d.多服務器發送/接收。請求發送到多臺服務器上。為了確保速度,所有的請求廣播一次,異步執行讀操作。當從每個服務器獲取結果完成后,如果計數器大于1,將執行合并操作。如果只有一個結果集,數據將被自動轉發給客戶端。如果從任何一個數據庫返回任何錯誤,錯誤將會被發送到客戶端。 5.Spock Proxy架構圖

二.Spock Proxy局限性 并非所有支持MySQL的查詢完全支持Spock Proxy。當spockproxy解析查詢語句失敗,調用端將得到一個錯誤。 已知的限制有: 1.SQL管理語句,如create。 2.支持有限的存儲過程和事務。 3.跨數據庫的join操作無法執行。 4.不支持嵌套查詢。 5.對于SELECT ,支持最多2表聯接。但不支持GROUP BY。 6.對于INSERT,列清單總是預期。 7.如果查詢涉及多個分區中的數據,對于查詢使用mysql函數,只支持MAX, MIN, SUM, AVERAGE 函數。 8.不正確的INSERT_ID和分裂一個自動遞增的主鍵與外鍵的表,ID沖突是可能的。 9.LOAD DATA INFILE沒有測試。