最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)庫分庫分表的方案

 更新時(shí)間:2023年11月23日 08:55:56   作者:終有救贖  
隨著項(xiàng)目不斷迭代,使用人數(shù)的不斷增加,數(shù)據(jù)庫中某些表數(shù)據(jù)正在逐步膨脹,往單表千萬迅速靠攏,,所以最近也在考慮做一下分庫分表,本文就給大家詳細(xì)講解了什么分庫分表和分庫分表的方案,需要的朋友可以參考下

一、什么是分庫分表?

分庫:從單個(gè)數(shù)據(jù)庫拆分成多個(gè)數(shù)據(jù)庫的過程,將數(shù)據(jù)散落在多個(gè)數(shù)據(jù)庫中。
分表:從單張表拆分成多張表的過程,將數(shù)據(jù)散落在多張表內(nèi)。

二、為什么分庫分表?

隨著平臺(tái)的業(yè)務(wù)發(fā)展,數(shù)據(jù)可能會(huì)越來越多,甚至達(dá)到億級(jí)。以MySQL為例,單庫數(shù)據(jù)量在5000萬以內(nèi)性能比較好,超過閾值后性能會(huì)隨著數(shù)據(jù)量的增大而明顯降低。單表的數(shù)據(jù)量超過1000w,性能也會(huì)下降嚴(yán)重。這就會(huì)導(dǎo)致查詢一次所花的時(shí)間變長(zhǎng),并發(fā)操作達(dá)到一定量時(shí)可能會(huì)卡死,甚至把系統(tǒng)給拖垮。

三、怎么選擇分庫分表策略?

切分方案解決的問題
只分庫不分表數(shù)據(jù)庫讀?寫QPS過高,數(shù)據(jù)庫連接數(shù)不足
只分表不分庫單表數(shù)據(jù)過大,存儲(chǔ)性能遇到瓶頸
即分庫又分表連接數(shù)不足+數(shù)據(jù)量過大引起的存儲(chǔ)性能瓶頸

四、分庫分表方式及帶來的問題?

分庫分表有效的緩解了大數(shù)據(jù)、高并發(fā)帶來的性能和壓力,也能突破網(wǎng)絡(luò)IO、硬件資源、連接數(shù)的瓶頸,但同時(shí)也帶來了一些問題。

4.1、事務(wù)一致性問題

由于分庫分表把數(shù)據(jù)分布在不同庫甚至不同服務(wù)器,不可避免會(huì)帶來分布式事務(wù)問題,我們需要額外編程解決該問題。

4.2、跨節(jié)點(diǎn)join

在沒有進(jìn)行分庫分表前,我們檢索商品時(shí)可以通過以下SQL對(duì)店鋪信息進(jìn)行關(guān)聯(lián)查詢:

SELECT p.*,s.[店鋪名稱],s.[信譽(yù)]
FROM [商品信息] p 
LEFT JOIN [店鋪信息] s ON p.id = s.[所屬店鋪]
WHERE...ORDER BY...LIMIT...

但經(jīng)過分庫分表后,[商品信息]和[店鋪信息]不在一個(gè)數(shù)據(jù)庫或一個(gè)表中,甚至不在一臺(tái)服務(wù)器上,無法通過sql語句進(jìn)行關(guān)聯(lián)查詢,我們需要額外編程解決該問題。

4.3、跨節(jié)點(diǎn)分頁、排序和聚合函數(shù)

跨節(jié)點(diǎn)多庫進(jìn)行查詢時(shí),limit分頁、order by排序以及聚合函數(shù)等問題,就變得比較復(fù)雜了。需要先在不同的分片節(jié)點(diǎn)中將數(shù)據(jù)進(jìn)行排序并返回,然后將不同分片返回的結(jié)果集進(jìn)行匯總和再次排序。例如,進(jìn)行水平分庫后的商品庫,按ID倒序排序分頁,取第一頁:

以上流程是取第一頁的數(shù)據(jù),性能影響不大,但由于商品信息的分布在各數(shù)據(jù)庫的數(shù)據(jù)可能是隨機(jī)的,如果是取第N頁,需要將所有節(jié)點(diǎn)前N頁數(shù)據(jù)都取出來合并,再進(jìn)行整體的排序,操作效率可想而知,所以請(qǐng)求頁數(shù)越大,系統(tǒng)的性能也會(huì)越差。

在使用Max、Min、Sum、Count之類的函數(shù)進(jìn)行計(jì)算的時(shí)候,與排序分頁同理,也需要先在每個(gè)分片上執(zhí)行相應(yīng)的函數(shù),然后將各個(gè)分片的結(jié)果集進(jìn)行匯總和再次計(jì)算,最終將結(jié)果返回。

4.4、主鍵避重

在分庫分表環(huán)境中,由于表中數(shù)據(jù)同時(shí)存在不同數(shù)據(jù)庫中,主鍵值平時(shí)使用的自增長(zhǎng)將無用武之地,某個(gè)分區(qū)數(shù)據(jù)庫生成的ID無法保證全局唯一。因此需要單獨(dú)設(shè)計(jì)全局主鍵,以避免跨庫主鍵重復(fù)問題。

由于分庫分表之后,數(shù)據(jù)被分散在不同的服務(wù)器、數(shù)據(jù)庫和表中。因此,對(duì)數(shù)據(jù)的操作也就無法通過常規(guī)方式完成,并且它還帶來了一系列的問題。我們?cè)陂_發(fā)過程中需要通過一些中間件解決這些問題,市面上有很多中間件可供我們選擇,其中Sharding-JDBC和mycat較為流行。

五、使用分庫分表組件幫我們解決一些問題

分庫分表的技術(shù)方案總體上來講分為兩大類:應(yīng)用層依賴類中間件、中間層代理類中間件。

我們選擇技術(shù)方案時(shí)主要考慮的是,開源、開發(fā)成本、學(xué)習(xí)成本、技術(shù)復(fù)雜度,技術(shù)使用人數(shù),參考資料的多少等方面。

由于我本人也不是每樣技術(shù)都有用過。所以在這里只是在能力范圍內(nèi)做一個(gè)初步了解,并進(jìn)行選型。目前這些組件對(duì)于分庫分表的一些主要問題都有相對(duì)完善的解決方案,區(qū)別的只是一些細(xì)節(jié)的問題。又結(jié)合目前項(xiàng)目所在只需要輕量級(jí)的分庫分表。所以我還是比較偏向成本較低,復(fù)雜度較低的方案。

目前市面上使用較多的是,mycat及sharding-jdbc。mycat屬于中間層代理類中間件、sharding-jdbc屬于應(yīng)用層依賴類中間件

5.1. Atlas

奇虎360
關(guān)鍵詞:分庫分表 Atlas
百度為您找到相關(guān)結(jié)果約707,000個(gè)
中間層代理類中間件

https://github.com/Qihoo360/Atlas github上最后維護(hù)時(shí)間為4年前

  • 優(yōu)點(diǎn)

    實(shí)現(xiàn)了讀寫分離(并通過hint/master/可強(qiáng)制?主庫,并且加?了權(quán)重配置可進(jìn)?讀的負(fù)載均衡

    ??維護(hù)了?套連接池,減少了創(chuàng)建連接帶來的性能消耗

    ?持DB動(dòng)態(tài)上下線,?便橫向擴(kuò)展

    ?持ip過濾,實(shí)現(xiàn)了簡(jiǎn)單的權(quán)限控制

    可記錄所有sql,實(shí)現(xiàn)了簡(jiǎn)單的審計(jì)功能

  • 缺點(diǎn)

    使?atlas?直連DB,性能損耗?概是30%-35%左右

    使?atlas?直連DB,響應(yīng)時(shí)間?概是直連DB的1.5~2倍

    對(duì)分表的?持不是太好,不支持不同庫間分表

    atlas配置暫時(shí)不?持配置參數(shù)的動(dòng)態(tài)加載,如果修改了配置需要重啟atlas,這可能會(huì)對(duì)業(yè)務(wù)有?點(diǎn)的影響(不過?般可以做ha或者業(yè)務(wù)低峰進(jìn)?重啟,這個(gè)問題不是特別迫切)總的來說作為?款開源mysql proxy,atlas總體表現(xiàn)還是不錯(cuò)的,持續(xù)壓測(cè)3天都?較穩(wěn)定,只是對(duì)分表的?持不是太好(?如不?持基于時(shí)間的分表模式),?般沒有太?并發(fā)和對(duì)響應(yīng)時(shí)間嚴(yán)格要求的業(yè)務(wù)可以考慮嘗試使?

5.2. Cobar

阿里
關(guān)鍵詞:分庫分表 Cobar
百度為您找到相關(guān)結(jié)果約936,000個(gè)
中間層代理類中間件

https://github.com/alibaba/cobar/ github上最后維護(hù)時(shí)間為3年前

5.3. TDDL

阿里 關(guān)鍵詞:分庫分表 TDDL 百度為您找到相關(guān)結(jié)果約1,080,000個(gè) 應(yīng)用層依賴類中間件

https://github.com/alibaba/tb_tddl

github上TDDL處于停滯狀態(tài),應(yīng)該是部分功能不開源了吧。

TDDL 必須要依賴 diamond 配置中心( diamond 是淘寶內(nèi)部使用的一個(gè)管理持久配置的系統(tǒng),目前淘寶內(nèi)部絕大多數(shù)系統(tǒng)的配置)

5.4. heisenberg

百度
關(guān)鍵詞:分庫分表 heisenberg
百度為您找到相關(guān)結(jié)果約74,900個(gè)
中間層代理類中間件

資料少之又少,不考慮。

5.5. Oceanus

58同城
關(guān)鍵詞:分庫分表 Oceanus
百度為您找到相關(guān)結(jié)果約118,000個(gè)

https://github.com/wuba/Oceanus github上最后維護(hù)時(shí)間為3年前

資料較少,不考慮。

5.6. OneProxy

原支付寶首席架構(gòu)師樓方鑫開發(fā)
關(guān)鍵詞:分庫分表 OneProxy
百度為您找到相關(guān)結(jié)果約139,000個(gè)
應(yīng)該是不開源的

5.7. vitess

YouTube
關(guān)鍵詞:分庫分表 vitess
百度為您找到相關(guān)結(jié)果約177,000個(gè)
中間層代理類中間件

https://github.com/vitessio/vitess github當(dāng)前活躍

Vitess是一個(gè)用于部署、擴(kuò)展和管理大型MySQL實(shí)例集群的數(shù)據(jù)庫解決方案。是開源的,在github上有很多星星,但是國內(nèi)的應(yīng)用較少,資料不多。技術(shù)架構(gòu)復(fù)雜,這位更是重量級(jí)。

5.8. TSharding

蘑菇街
關(guān)鍵詞:分庫分表 TSharding
百度為您找到相關(guān)結(jié)果約100,000個(gè)

https://github.com/baihui212/tsharding github上最后維護(hù)時(shí)間為5年前
應(yīng)該也是不開源了

資料少之又少,不考慮

5.9. dal

攜程
關(guān)鍵詞:分庫分表 dal
百度為您找到相關(guān)結(jié)果約315,000個(gè)
應(yīng)用層依賴類中間件

https://github.com/ctripcorp/dal github當(dāng)前活躍,提供部分教程及demo(需要科學(xué)上網(wǎng))

開源范圍包括代碼生成器,Java客戶端和C#客戶端。
國內(nèi)資料少,需要科學(xué)上網(wǎng)。

5.10. zdal

支付寶
關(guān)鍵詞:分庫分表 zdal
百度為您找到相關(guān)結(jié)果約30,600個(gè)
中間層代理類中間件

國內(nèi)資料少,應(yīng)該不開源。

5.11.MyCat

基于cobar社區(qū)開源
關(guān)鍵詞:分庫分表 MyCat
百度為您找到相關(guān)結(jié)果約9,030,000個(gè)
中間層代理類中間件
http://mycatone.top/社區(qū)當(dāng)前活躍,無需科學(xué)上網(wǎng)
資料很多也開源,可以考慮。

5.11.1不支持項(xiàng)

  • DDL語句

    • 不支持修改拆分鍵
    • 支持物理庫的視圖視為普通表來使用
    • 僅普通表支持外鍵
    • DML語句
  • DELETE語句

    • 不支持涉及分布式運(yùn)算的子查詢。
    • 不支持多表delete。
  • UPDATE語句

    • 不支持涉及分布式運(yùn)算的子查詢。
    • 不支持多表update。
  • SELECT語句

    • 對(duì)于for update語句會(huì)把sql中出現(xiàn)的表都加鎖。
    • 具體是行鎖還是表鎖要看sql語句。
    • 不支持SELECT INTO OUTFILE。
  • SET語句

    • 支持SET SESSION級(jí)別的變量,但是不能被預(yù)處理語句引用變量,只有autocommit變量具有正確語義
    • 不支持SET GLOBAL級(jí)別的變量
    • 不支持SET USER級(jí)別的變量
  • SHOW語句

    • 所有SHOW語句都視為兼容性SQL進(jìn)行處理,發(fā)往prototype節(jié)點(diǎn)處理,所以不具備分布式語義高級(jí)功能
    • 不支持用戶自定義數(shù)據(jù)類型(改代碼), 自定義函數(shù)(改代碼)
    • 支持物理視圖,但是不支持Mycat中的邏輯視圖
    • 有限支持存儲(chǔ)過程
    • 不支持游標(biāo)
    • 不支持觸發(fā)器

5.12.Sharding-jdbc

當(dāng)當(dāng)開源,已加入apache豪華套餐
關(guān)鍵詞:分庫分表 Sharding-jdbc
百度為您找到相關(guān)結(jié)果約4,240,000個(gè)
應(yīng)用層依賴類中間件

https://shardingsphere.apache.org/ 社區(qū)當(dāng)前活躍,無需科學(xué)上網(wǎng)

5.12.1不支持項(xiàng)

  • DataSource 接口

    • 不支持 timeout 相關(guān)操作。
  • Connection 接口

    • 不支持存儲(chǔ)過程,函數(shù),游標(biāo)的操作;
    • 不支持執(zhí)行 native SQL;
    • 不支持 savepoint 相關(guān)操作;
    • 不支持 Schema/Catalog 的操作;
    • 不支持自定義類型映射。
  • Statement 和 PreparedStatement 接口

    • 不支持返回多結(jié)果集的語句(即存儲(chǔ)過程,非 SELECT 多條數(shù)據(jù));
    • 不支持國際化字符的操作。
  • ResultSet 接口

    • 不支持對(duì)于結(jié)果集指針位置判斷;
    • 不支持通過非 next 方法改變結(jié)果指針位置;
    • 不支持修改結(jié)果集內(nèi)容;
    • 不支持獲取國際化字符;
    • 不支持獲取 Array。
  • JDBC 4.1

    • 不支持 JDBC 4.1 接口新功能。

六、詳細(xì)比較

主要指標(biāo)Sharding-jdbcMycat
ORM支持適用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC任意
事務(wù)自帶XA、兩(三)階段事務(wù)、柔性事務(wù)BASE(最終一致)XA事務(wù)
分庫支持支持
分表支持支持
開發(fā)集成springboot較好,代碼入侵中(需要寫些配置類等)開發(fā)成本小,代碼入侵小
所屬公司當(dāng)當(dāng)網(wǎng)開源,加入apache基于阿里Cobar二次開發(fā),社區(qū)維護(hù)
數(shù)據(jù)庫支持支持任意實(shí)現(xiàn) JDBC 規(guī)范的數(shù)據(jù)庫,目前支持 MySQL,PostgreSQL,Oracle,SQLServer 以及任何可使用 JDBC 訪問的數(shù)據(jù)庫Mysql、Oracle、 SQL Server、DB2、mongodb
活躍度活躍度高社區(qū)活躍度很高,一些公司已在使用
監(jiān)控
讀寫分離支持支持
資料資料少、github、官網(wǎng)、網(wǎng)上討論貼資料多,github、官網(wǎng)、Q群、書籍
運(yùn)維維護(hù)成本低維護(hù)成本高
限制部分JDBC方法不支持、SQL語句限制SQL語句限制
連接池支持任何第三方的數(shù)據(jù)庫連接池,如:DBCP, C3P0, BoneCP, HikariCP 等無要求
配置難度一般復(fù)雜

總結(jié)

挑選了兩個(gè)使用最多的進(jìn)行了比較,綜合來看的話感覺還是Sharding-jdbc更省事一些,無需部署中間件,只通過引入jar包進(jìn)行分庫分表操作,省去一些事情。而且多一個(gè)中間件的話系統(tǒng)穩(wěn)定性也會(huì)降低了。對(duì)與目前來說,只需要輕量級(jí)的分庫分表,功能不需要太多,所以還是選擇Sharding-jdbc合適些。

以上就是MySQL數(shù)據(jù)庫分庫分表的方案的詳細(xì)內(nèi)容,更多關(guān)于MySQL數(shù)據(jù)庫分庫分表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • windows下傻瓜式安裝mysql5.7

    windows下傻瓜式安裝mysql5.7

    本文給大家介紹的是簡(jiǎn)單幾步輕松搞定Windows上安裝Mysql5.7,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • mysql用戶管理操作實(shí)例分析

    mysql用戶管理操作實(shí)例分析

    這篇文章主要介紹了mysql用戶管理操作,結(jié)合實(shí)例形式分析了mysql用戶管理查看、創(chuàng)建、修改、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2020-04-04
  • 幾個(gè)比較重要的MySQL變量

    幾個(gè)比較重要的MySQL變量

    這篇文章主要介紹了幾個(gè)比較重要的MySQL變量,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • MySQL視圖簡(jiǎn)介及基本操作教程

    MySQL視圖簡(jiǎn)介及基本操作教程

    這篇文章主要給大家介紹了關(guān)于MySQL視圖簡(jiǎn)介及基本操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • mysql 數(shù)據(jù)類型轉(zhuǎn)換的實(shí)現(xiàn)

    mysql 數(shù)據(jù)類型轉(zhuǎn)換的實(shí)現(xiàn)

    這篇文章主要介紹了mysql 數(shù)據(jù)類型轉(zhuǎn)換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情

    mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情

    這篇文章主要介紹了mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情,刪除數(shù)據(jù)表的時(shí)候,表的定義和表中所有的數(shù)據(jù)均會(huì)被刪除。因此,在進(jìn)行刪除操作前,最好對(duì)表中的數(shù)據(jù)做一個(gè)備份,以免造成無法挽回的后果
    2022-07-07
  • MySQL8中大小寫敏感與不敏感排序規(guī)則的選擇(根據(jù)字段語義)

    MySQL8中大小寫敏感與不敏感排序規(guī)則的選擇(根據(jù)字段語義)

    MySQL排序規(guī)則決定字符比較、排序等行為,與字符集綁定,影響ORDER?BY等操作,這篇文章主要介紹了MySQL8中大小寫敏感與不敏感排序規(guī)則的選擇,需要的朋友可以參考下
    2026-04-04
  • MySQL兩種臨時(shí)表的用法詳解

    MySQL兩種臨時(shí)表的用法詳解

    這篇文章主要介紹了MySQL兩種臨時(shí)表的用法詳解,.內(nèi)容比較詳細(xì),這里分享給大家,供大家參考,學(xué)習(xí)。
    2017-10-10
  • MySql基礎(chǔ)知識(shí)總結(jié)SQL優(yōu)化技巧

    MySql基礎(chǔ)知識(shí)總結(jié)SQL優(yōu)化技巧

    本文深入探討了MySQL的SQL優(yōu)化,包括explain分析、索引使用技巧、單表與雙表SQL優(yōu)化、避免索引失效原則、其他優(yōu)化方法及鎖機(jī)制,通過實(shí)例解析,展示了如何通過修改SQL和創(chuàng)建索引來提升查詢性能,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • MySQL中的引號(hào)和反引號(hào)的區(qū)別與用法詳解

    MySQL中的引號(hào)和反引號(hào)的區(qū)別與用法詳解

    這個(gè)問題是我在學(xué)習(xí)數(shù)據(jù)庫的時(shí)候遇到的一個(gè)問題,我當(dāng)時(shí)并不能理解下圖中的一些情況,后來我也請(qǐng)教了一位大佬給我解答,最后在大佬和度娘的幫助下我大概理解了這個(gè)反引號(hào)的東西
    2021-10-10

最新評(píng)論

洛扎县| 金昌市| 巩留县| 榆中县| 封丘县| 南溪县| 达日县| 巴青县| 扶余县| 巴林右旗| 龙海市| 东山县| 金山区| 富裕县| 延吉市| 荣成市| 佳木斯市| 张北县| 都匀市| 崇阳县| 揭西县| 靖宇县| 蒙自县| 方城县| 民丰县| 淄博市| 繁昌县| 新民市| 永川市| 宜兴市| 仪陇县| 万全县| 安丘市| 海南省| 舟曲县| 邹城市| 云南省| 浦江县| 潼南县| 大邑县| 建水县|