認識sharding-jdbc:輕量級數(shù)據(jù)庫中間件(一)

一帘瞭、Sharding-JDBC 采用在 JDBC 層擴展分庫分表朱浴,支持讀寫分離,是一個以 jar 形式提供服務的輕量級組件顶捷,其核心思路是小而美地完成最核心的事情,基于 JDBC 層進行分片的好處是輕量屎篱、簡單服赎、兼容性好以及無需額外的運維工作。缺點是無法跨語言交播,目前僅支持 Java

二重虑、Sharding-JDBC 適用于哪些場景,不適用于哪些場景秦士?是否有性能評估缺厉?

(1)適合場景:

對于關系型數(shù)據(jù)庫數(shù)據(jù)量很大的情況,需要進行水平拆庫和拆表(即分庫和分表),這種場景很適合使用 Sharding-JDBC提针。

舉例說明:假設有一億數(shù)據(jù)的用戶庫命爬,放在 MySQL 數(shù)據(jù)庫里查詢性能會比較低,而采用水平拆庫辐脖,將其分為 10 個庫饲宛,根據(jù)用戶的 ID 模10,這樣數(shù)據(jù)就能比較平均的分在 10 個庫中嗜价,每個庫只有 1000w 記錄艇抠,查詢性能會大大提升。分片策略類型非常多久锥,大致分為 Hash +Mod家淤、Range、Tag 等瑟由。

Sharding-JDBC 還提供了讀寫分離的能力絮重,用于減輕寫庫的壓力。

此外错妖,Sharding-JDBC 可以用在 JPA 場景中绿鸣,如?JPA、Hibernate暂氯、Mybatis潮模,Spring JDBC Template 等任何 Java 的 ORM 框架。Java 的 ORM 框架也都是采用 JDBC 與數(shù)據(jù)庫交互痴施。這也是我們選擇在 JDBC 層擎厢,而非選擇一個 ORM 框架進行開發(fā)的原因。我們希望 Sharding-JDBC 可以盡量的兼容所有的 Java 數(shù)據(jù)庫訪問層辣吃,并且無縫的接入業(yè)務應用动遭。

(2)不合適的場景主要是兩方面:

(2.1)不適合 OLAP 的場景。雖然 Sharding-JDBC 也能做聚合分組查詢神得,但大量的 OLAP 場景厘惦,仍然會比較慢,而且復雜的SQL(如子查詢等)目前還沒有支持哩簿。這種查詢不太適合大數(shù)據(jù)和高并發(fā)的互聯(lián)網(wǎng) online 數(shù)據(jù)庫宵蕉,建議使用合理的 OLTP 查詢。

(2.2)不適合事務強一致的要求节榜。目前 Sharding-JDBC 的事務支持兩種羡玛,一種是弱 XA,另一種是柔性事務(BASE)宗苍。因為 XA的兩階段或三階段提交其性能較低稼稿,因此互聯(lián)網(wǎng)公司基本不會采用薄榛。而無論是弱 XA還是柔性事務,都無法保證事務在任意時間段完全保證一致让歼,其中柔性事務能保證數(shù)據(jù)的最終一致性敞恋,但達到最終一致性的時間仍然不可控。因此對于對跨庫事務強一致要求很高的場景是越,需要從設計方面去考慮數(shù)據(jù)庫schema 的合理性耳舅。

對于 JTA 事務,目前 Shariding-JDBC 沒有實現(xiàn) JTA 的標準倚评。而且由于在互聯(lián)網(wǎng)場景下使用 JTA 比較少見浦徊,因此暫時不支持 JTA 事務。

(3)性能測試報告如下:

(3.1)使用Sharding-JDBC天梧,性能是大家最關心的問題盔性。在數(shù)據(jù)量一致的情況下,使用Sharding-JDBC和原生JDBC的性能測試報告如下:

查詢操作:Sharding-JDBC的TPS為JDBC的TPS的99.8%呢岗。

插入操作:Sharding-JDBC的TPS為JDBC的TPS的90.2%冕香。

更新操作:Sharding-JDBC的TPS為JDBC的TPS的93.1%。

可以看到后豫,Sharding-JDBC在查詢中的性能損失非常低悉尾,插入和更新略高。

(3.2)將單表的數(shù)據(jù)拆分為二挫酿,放入兩個表中构眯,使用Sharding-JDBC和原生JDBC的性能測試報告如下:

查詢操作:TPS雙庫比單庫可以增加大約94%的性能。

插入操作:TPS雙庫比單庫可以增加大約60%的性能早龟。

更新操作:TPS雙庫比單庫可以增加大約89%的性能惫霸。

結果表明,Sharding-JDBC可有效利用水平擴展大幅度提升性能葱弟。

三壹店、sharding-jdbc架構圖

四、sharding-jdbc與mycat 相似性以及區(qū)別

從設計理念上看確實有一定的相似性芝加。主要流程都是SQL 解析 -> SQL 路由 -> SQL 改寫 -> SQL 執(zhí)行 -> 結果歸并硅卢。但架構設計上是不同的。Mycat 是基于 Proxy藏杖,它復寫了 MySQL 協(xié)議将塑,將 Mycat Server 偽裝成一個 MySQL 數(shù)據(jù)庫,而 Sharding-JDBC 是基于 JDBC 的擴展制市,是以 jar 包的形式提供輕量級服務的。

五弊予、sharding-jdbc支持讀寫分離

Sharding-JDBC 從 1.3.0 開始支持讀寫分離祥楣。其功能包括:

(5.1)根據(jù)配置區(qū)分寫庫和多個讀庫,目前暫時只有輪訓策略選取讀庫,可以配合分庫分表使用误褪。

(5.2)通過 Hint 強制指定某次查詢走寫庫责鳍。

(5.3)如果在同一線程且同一數(shù)據(jù)庫連接中有發(fā)現(xiàn) DML 語句,則該 DML 之后的查詢都從寫庫查詢兽间,DML 之前的 DQL 語句不受影響历葛,仍然查詢讀庫。其目的是保持同一用戶線程的數(shù)據(jù)一致性嘀略。

但限于 Sharding-JDBC 本身設計的考慮恤溶,數(shù)據(jù)庫層面的主從切換以及主從數(shù)據(jù)同步,Sharding-JDBC并不負責帜羊。Sharding-JDBC 定位仍然是輕量級的增強版數(shù)據(jù)庫驅動咒程。因此由于主庫和從庫同步延遲導致的數(shù)據(jù)不一致,并不是Sharding-JDBC 的處理范疇讼育。

六帐姻、sharding-jdbc 3.0版本:更名為sharding-sphere

Sharding-Sphere是一套開源的分布式數(shù)據(jù)庫中間件解決方案組成的生態(tài)圈,它由Sharding-JDBC奶段、Sharding-Proxy和Sharding-Sidecar這3款相互獨立的產(chǎn)品組成饥瓷,詳情請參考官網(wǎng)地址:http://shardingsphere.io/document/current/en/quick-start/。

(6.1) Sharding-JDBC

Sharding-JDBC是Sharding-Sphere的第一個產(chǎn)品痹籍,也是Sharding-Sphere的前身呢铆。

它定位為輕量級Java框架,在Java的JDBC層提供分庫分表词裤、讀寫分離刺洒、數(shù)據(jù)庫治理、柔性事務等服務吼砂。它使用客戶端直連數(shù)據(jù)庫逆航,以jar包形式提供服務,無需額外部署和依賴渔肩,可理解為增強版的JDBC驅動因俐,完全兼容JDBC和各種ORM框架。

(6.2) Sharding-Proxy

Sharding-Proxy是Sharding-Sphere的第二個產(chǎn)品周偎。

它定位為透明化的數(shù)據(jù)庫代理端抹剩,提供封裝了數(shù)據(jù)庫二進制協(xié)議的服務端版本,用于完成對異構語言的支持蓉坎。

Sharding-Proxy屏蔽了底層的分庫分表澳眷,您可以像使用一個簡單的數(shù)據(jù)庫一樣來操作分庫分表的數(shù)據(jù)。目前提供MySQL版本蛉艾,它可以使用任何兼容MySQL協(xié)議的訪問客戶端(如:MySQL Command Client, MySQLWorkbench等)來訪問Sharding-Proxy钳踊,進而進行DDL/DML等操作來變更數(shù)據(jù)衷敌,對DBA更加友好。

七拓瞪、目前分庫分表的中間件有兩種思想缴罗,分別是:

(7.1)類似 Sharding-JDBC 及 TDDL 的增強版 JDBC 驅動思想

(7.2)類似 Mycat 增加中間層,然后在中間層進行分庫分表思想

JDBC 驅動版的優(yōu)點:

1祭埂、輕量面氓,范圍更加容易界定,只是 JDBC 增強蛆橡,不包括 HA舌界、事務以及數(shù)據(jù)庫元數(shù)據(jù)管理

2、開發(fā)的工作量較小航罗,無需關注 nio禀横,各個數(shù)據(jù)庫協(xié)議等

3、運維無需改動粥血,無需關注中間件本身的 HA

4柏锄、性能高,JDBC 直連數(shù)據(jù)庫复亏,無需二次轉發(fā)

5趾娃、可支持各種基于 JDBC 協(xié)議的數(shù)據(jù)庫,如:MySQL缔御,Oralce抬闷,SQLServer

Proxy 版的優(yōu)點:

1、可以負責更多的內(nèi)容耕突,將數(shù)據(jù)遷移笤成,分布式事務等納入 Proxy 的范疇

2、更有效的管理數(shù)據(jù)庫的連接

3眷茁、整合大數(shù)據(jù)思路炕泳,將 OLTP 和 OLAP 分離處理

因此兩種方式互相可以互補,建議使用 Java 的團隊上祈,且僅 OLTP 的互聯(lián)網(wǎng)前端操作培遵。有可能會使用多種數(shù)據(jù)庫的情況,可以選擇 JDBC層的中間件登刺;如果需要 OLAP 和 OLTP 混合籽腕,加以重量級的操作,如數(shù)據(jù)遷移纸俭,分布式事務等皇耗,可以考慮 Proxy 層的中間件。

八揍很、項目地址:

GitHub:https://github.com/shardingjdbc/sharding-jdbc

碼云:https://gitee.com/shardingjdbc/sharding-jdbc

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末郎楼,一起剝皮案震驚了整個濱河市矾瘾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箭启,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛉迹,死亡現(xiàn)場離奇詭異傅寡,居然都是意外死亡,警方通過查閱死者的電腦和手機北救,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門荐操,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人珍策,你說我怎么就攤上這事托启。” “怎么了攘宙?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵屯耸,是天一觀的道長。 經(jīng)常有香客問我蹭劈,道長疗绣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任铺韧,我火速辦了婚禮多矮,結果婚禮上,老公的妹妹穿的比我還像新娘哈打。我一直安慰自己塔逃,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布料仗。 她就那樣靜靜地躺著湾盗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罢维。 梳的紋絲不亂的頭發(fā)上淹仑,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音肺孵,去河邊找鬼匀借。 笑死,一個胖子當著我的面吹牛平窘,可吹牛的內(nèi)容都是我干的吓肋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼瑰艘,長吁一口氣:“原來是場噩夢啊……” “哼是鬼!你這毒婦竟也來了肤舞?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤均蜜,失蹤者是張志新(化名)和其女友劉穎李剖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囤耳,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡篙顺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了充择。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片德玫。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖椎麦,靈堂內(nèi)的尸體忽然破棺而出宰僧,到底是詐尸還是另有隱情,我是刑警寧澤观挎,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布琴儿,位于F島的核電站,受9級特大地震影響嘁捷,放射性物質發(fā)生泄漏凤类。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一普气、第九天 我趴在偏房一處隱蔽的房頂上張望谜疤。 院中可真熱鬧,春花似錦现诀、人聲如沸夷磕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坐桩。三九已至,卻和暖如春封锉,著一層夾襖步出監(jiān)牢的瞬間绵跷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工成福, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碾局,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓奴艾,卻偏偏與公主長得像净当,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 目錄;(一) 拆分實施策略和示例演示(二) 全局主鍵生成策略(三) 關于使用框架還是自主開發(fā)以及sharding實...
    linking12閱讀 10,427評論 1 52
  • Sharding的基本思想其實就是采用分治的思想像啼,要把一個數(shù)據(jù)庫切分成多個部分放到不同的數(shù)據(jù)庫(server)上俘闯,...
    jiangmo閱讀 9,377評論 0 7
  • 轉 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 9,698評論 0 44
  • 和老公相戀七年,一起經(jīng)歷過很多酸甜苦辣忽冻。在外人眼中活潑真朗,幽默的他在我面前超級靦腆,我們之間最頻繁出現(xiàn)的對話就是我在...
    胖胖臉閱讀 516評論 2 4
  • 失眠的時候僧诚,我喜歡光著腳在冰涼的地板上走來走去蜜猾,徘徊轉圈,轉累了就坐在窗臺上振诬,麻木地看萬家璀璨的燈火。 獨居的日子...
    李玉米啊李玉米閱讀 147評論 0 0