我們為什麼要用它,或說cobar--能干什麼?以下是我們業務運行中會存在的一些問題:
1.隨著業務的進行數據庫的數據量和訪問量的劇增,需要對數據進行水平拆分來降低單庫的壓力,而且需要高效且相對透明的來屏蔽掉水平拆分的細節。
2.為提高訪問的可用性,數據源需要備份。
3.數據源可用性的檢測和failover。
4.前台的高並發造成後台數據庫連接數過多,降低了性能,怎麼解決。
5.從其它數據庫遷移至MySQL。
針對以上問題就有了cobar施展自己的空間了,cobar中間件以proxy的形式位於前台應用和實際數據庫之間,對前台的開放的接口是mysql通信協議。將前台SQL語句變更並按照數據分布規則轉發到合適的後台數據分庫,再合並返回結果,模擬單庫下的數據庫行為。
Cobar解決的問題
分布式:Cobar的分布式主要是通過將表放入不同的庫來實現:
1. Cobar支持將一張表水平拆分成多份分別放入不同的庫來實現表的水平拆分
2. Cobar也支持將不同的表放入不同的庫
3. 多數情況下,用戶會將以上兩種方式混合使用
注意:Cobar不支持將一張表,例如test表拆分成test_1, test_2, test_3.....放在同一個庫中,必須將拆分後的表分別放入不同的庫來實現分布式。
HA:
在用戶配置了MySQL心跳的情況下,Cobar可以自動向後端連接的MySQL發送心跳,判斷MySQL運行狀況,一旦運行出現異常,Cobar可以自動切換到備機工作。但需要強調的是:
1. Cobar的主備切換有兩種觸發方式,一種是用戶手動觸發,一種是Cobar的心跳語句檢測到異常後自動觸發。那麼,當心跳檢測到主機異常,切換到備機,如果主機恢復了,需要用戶手動切回主機工作,Cobar不會在主機恢復時自動切換回主機,除非備機的心跳也返回異常。
2. Cobar只檢查MySQL主備異常,不關心主備之間的數據同步,因此用戶需要在使用Cobar之前在MySQL主備上配置雙向同步,詳情可以參閱MySQL參考手冊。
一款產品有優點也會有缺點,就像人無完人一樣,產品也是一樣的,沒有完美的,只有適合自己的。
使用Cobar產品的一些約束
不支持跨庫情況下的join、分頁、排序、子查詢操作。SET語句執行會被忽略,事務和字符集設置除外。分庫情況下,insert語句必須包含拆分字段列名。分庫情況下,update語句不能更新拆分字段的值。不支持SAVEPOINT操作。暫時只支持MySQL數據節點。使用JDBC時,不支持rewriteBatchedStatements=true參數設置(默認為false)。使用JDBC時,不支持useServerPrepStmts=true參數設置(默認為false)。使用JDBC時,BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法設置參數。