分布式數據庫DDB introduce

jopen 10年前發布 | 29K 次閱讀 DDB introduce

DDB(Distributed database)是網易杭研院立項最早,應用最為廣泛的后臺產品之一,也是國內最早出現的基于現有database之上開發的分布式數據庫中間件,目前 依然在為網易易信,云音樂,云閱讀等大型互聯網產品提供穩定的數據庫服務。業界中同類型的產品有阿里集團的TDDL,阿里B2B的cobar等。

DDB主要以兩種方式向應用方提供服務:

一種是以JDBC的jar包形式為JAVA應用提供直接依賴,JAVA應用(如tomcat)通過依賴DDB提供的JDBC包實現透明訪問分布式數據庫集群中的各個分庫分表,這種服務方式與淘寶TDDL如出一轍,我們稱之為中間件模式。

另一種方式是為應用部署獨立的DDBProxy服務來滿足應用分庫分表的需求,在這種方式下,應用通過標準JDBC訪問Proxy,而Proxy則 根據MySQL標準通信協議對客戶端請求解析,還原應用SQL請求,然后通過本地的DDB JDBC訪問數據庫集群,最后再將得到的結果根據MySQL標準通信協議編碼返回給客戶端。這種服務方式與B2B的cobar以及現在阿里云的DRDS類 似,不同的是DDB的Proxy與DDB在語法特性上一脈相承,而根據目前已有的資料來看,與TDDL相比DRDS在語法特性和事務支持上是有所閹割的。

DDB的中間件模式概念架構:

分布式數據庫DDB introduce

dbi architecture

DDB Proxy概念架構:

分布式數據庫DDB introduce

proxy architecture

DDB支持的語法功能:

  1. General Insert(support batch, on duplicate key..), update, delete, replace, select(with alias)
  2. Global group by, order by, limit, having
  3. Global aggregate: max, min, count, avg, concat
  4. Global incremental id
  5. Multiple table join(limited), union
  6. Subquery(need trade off sometimes)

一些語法細節上DDB無法支持,如全局跨表表達式:select A.num + B.num from a, b where …,其中A和B都是跨庫的表,這種類似功能我個人認為在中間件層面是難以實現的,或者說即使實現了對實際應用場景也是不可用的。

總體來說,DDB的語法集屬于“大而全”的類型,對一些情況如limit一個很大的數據所帶來的性能折損,需要DBA幫助應用去優化SQL寫法,或 者直接在SQL審核中砍掉。對分布式數據庫來說,DBA的把關至關重要,尤其在表模式設計和均衡字段選擇上,一旦一張表的均衡字段選擇和表設計上存在疏 漏,會給應用未來的開發造成極大的困擾。

無論是阿里系的各種分布式數據庫(TDDL, DRDS, OceanBase)還是DDB,又或是其他公司自研項目如油Tube Vitess和google spanner,它們的運維和學習成本要比傳統數據庫高很多,不同系統在功能,性能以及高可用架構上的取舍體現了不同開發團隊的品味。

來自:http://www.majin163.com/2014/09/24/ddb-introduce/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!