dble簡介及相對於MyCAT的優勢方面的介紹

chenfeng發表於2019-03-22

dble是上海愛可生資訊科技股份有限公司基於mysql的高可擴充套件性的分散式中介軟體,存在以下幾個優勢特性:


資料水平拆分 隨著業務的發展,您可以使用dble來替換原始的單個MySQL例項。


相容Mysql 與MySQL協議相容,在大多數情況下,您可以用它替換MySQL來為你的應用程式提供新的儲存,而無需更改任何程式碼。


高可用性 dble伺服器可以用作叢集,業務不會受到單節點故障的影響。


SQL支援 支援SQL 92標準和MySQL方言。我們支援複雜的SQL查詢,如group by,order by,distinct,join,union,sub-query等等。


複雜查詢最佳化 最佳化複雜查詢,包括但不限於全域性表連線分片表,ER關係表,子查詢,簡化選擇項等。


分散式事務支援 使用兩階段提交的分散式事務。您可以為了效能選擇普通模式或者為了資料安全採用XA模式。當然,XA模式依賴於MySQL-5.7的XA Transaction,MySQL節點的高可用性和資料的可靠性。


DBLE官方網站:



dble對MyCat做的增強的方面:

一.缺陷修復

由於對堆外記憶體的使用不當,導致高併發操作時對同一片記憶體可能發生“double free",從而造成JVM異常,服務崩潰。 

XA事務漏洞:包亂序導致客戶端崩潰 

where關鍵字寫錯時,會忽視後面的where條件,會得到錯誤的結果,比如select * from customer wher id=1;

對於一些隱式分散式事務,例如insert into table values(節點1),(節點2);原生mycat直接下發,這樣當某個節點錯誤時,會造成該SQL執行了一部分

許可權黑名單針對同一條sql只在第一次生效。

聚合/排序的支援度非常有限,而且在很多場景下還存在結果不正確、執行異常等問題 

針對between A and B語法,hash拆分演算法計算出來的範圍有誤

開啟全域性表一致性檢查時,對全域性表的處理存在諸多問題,例如不能alter table、insert...on duplicate...時不更新時間戳、update...in ()報錯等

多值插入時,全域性序列生成重複值 

ER表在一個事務內被隔離,不能正確插入子表資料

sharding-join結果集不正確



二.實現改進

對某些標準SQL語法支援不夠好的方面作了改進,例如對create table if not exists...、alter table add/drop [primary] key...等語法的支援

對整體內部IO結構進行了大幅的改造和調優

禁止普通使用者連線管理埠進行管理操作,增強安全性

對全域性序列做了如下改進:

刪去無工程意義的本地檔案方式

改進資料庫方式、ZK方式,使獲取的序列號更加準確

改進時間戳方式和ZK ID生成器方式,消除併發低時的資料分佈傾斜問題

修復了資料庫方式全域性序列中執行緒安全的問題#489

移除自定義語法 限制:全域性序列值不能顯式指定

原來:insert into table1(id,name) values(next value for MYCATSEQ_GLOBAL,‘test’);

現在1:insert into table1(name) values(‘test’);

現在2:insert into table1 values(‘test’);

注意時間戳方式需要該欄位是bigint

改進對ER表的支援,智慧處理連線隔離,解決同一事務內不可以同時寫入父子表的問題,並最佳化ER表的執行計劃

系統透過智慧判斷,對於一些沒有顯式配置但實際符合ER條件的表視作ER表同樣處理

在中介軟體內進行智慧解析與判斷,使用正確的schema,替換有缺陷的checkSQLschema 引數

conf/index_to_charset.properties的內容固化到程式碼 。

對於前端按照使用者限制連線數,限制總連線數

改進原本的SQL統計,增加UPDATE/DELETE/INSERT


三. 功能增強

提供了更強大的查詢解析樹,取代ShareJoin,使跨節點的語法支援度更廣(join,union,subquery),執行效率更高,同時聚合/排序也有了較大改進

提供科學的後設資料管理機制,更好的支援show、desc等管理命令,支援不指定columns的insert語句 #7

後設資料自動檢查

啟動時對後設資料進行一致性檢查

配置定時任務,對後設資料進行一致性檢查

提供更詳實的執行計劃,更準確的反映SQL語句的執行過程

set 系統變數語句的改進

set charset/names 語句的支援

分散式事務:XA實現方式的異常處理的改進

大小寫敏感支援

支援DUAL

支援單次請求多語句(部分客戶端有使用C,C++常見)

不斷豐富的路由規則最佳化和條件最佳化

升級Druid,跟進最新的解析器

升級fastjson,避免安全問題

智慧判斷reload連線變更,熱更新連線池

對MySQL協議及GUI工具/Driver更友好的支援

增加更多的管理端命令,滿足更多運維需要

快取支援使用RocksDB

增加慢查詢日誌功能,相容mysqldumpslow 和 pt-query-digest

Trace功能,用於分析單條查詢的效能瓶頸

大小寫敏感依賴於後端MySQL

支援Prepared SQL Statement Syntax

支援以下子查詢

The Subquery as Scalar Operand

Comparisons Using Subqueries

Subqueries with ANY, IN, or SOME

Subqueries with ALL

Subqueries with EXISTS or NOT EXISTS

Derived Tables (Subqueries in the FROM Clause)

支援dble層面的 View


四. 功能裁減

僅保留列舉、範圍、HASH、日期等分片演算法,對這幾個演算法進行了可用性的改進,使之更加貼合實際應用,專案需要時可以按需提供

移除異構資料庫支援

禁止某些不支援的功能,這些功能客戶端呼叫時不會報錯,但結果並非使用者想要的結果,例如無效的set語句

移除目前實現有問題的第一結點庫內分表模式

移除writeType引數,等效於原來writeType = 1

移除handleDistributedTransactions 選項,直接支援分散式事務


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2639090/,如需轉載,請註明出處,否則將追究法律責任。

相關文章