色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

分庫分表的21條法則速來碼?。ㄉ希?/h1>

(一)好好的系統,為什么要分庫分表?

還是不著急實戰,咱們先介紹下在分庫分表架構實施過程中,會接觸到的一些通用概念,了解這些概念能夠幫助理解市面上其他的分庫分表工具,盡管它們的實現方法可能存在差異,但整體思路基本一致。因此,在開始實際操作之前,我們有必要先掌握這些通用概念,以便更好地理解和應用分庫分表技術。

我們結合具體業務場景,以t_order表為例進行架構優化。由于數據量已經達到億級別,查詢性能嚴重下降,因此我們采用了分庫分表技術來處理這個問題。具體而言,我們將原本的單庫分成了兩個庫,分別為DB_1DB_2,并在每個庫中再次進行分表處理,生成t_order_1t_order_2兩張表,實現對訂單表的分庫分表處理。

圖片

數據分片

通常我們在提到分庫分表的時候,大多是以水平切分模式(水平分庫、分表)為基礎來說的,數據分片它將原本一張數據量較大的表 t_order 拆分生成數個表結構完全一致的小數據量表(拆分表) t_order_0、t_order_1、···、t_order_n,每張表只存儲原大表中的一部分數據。

圖片

數據節點

數據節點是數據分片中一個不可再分的最小單元(表),它由數據源名稱和數據表組成,例如上圖中 DB_1.t_order_1DB_2.t_order_2 就表示一個數據節點。

圖片

邏輯表

邏輯表是指具有相同結構的水平拆分表的邏輯名稱。

比如我們將訂單表t_order 分表拆分成 t_order_0 ··· t_order_9等10張表,這時我們的數據庫中已經不存在 t_order這張表,取而代之的是若干的t_order_n表。

分庫分表通常對業務代碼都是無侵入式的,開發者只專注于業務邏輯SQL編碼,我們在代碼中SQL依然按 t_order來寫,而在執行邏輯SQL前將其解析成對應的數據庫真實執行的SQL。此時 t_order 就是這些拆分表的邏輯表。

業務邏輯SQL

select * from t_order where order_no='A11111'

真實執行SQL

select * from DB_1.t_order_n where order_no='A11111'

真實表

真實表就是在數據庫中真實存在的物理表DB_1.t_order_n

圖片

廣播表

廣播表是一類特殊的表,其表結構和數據在所有分片數據源中均完全一致。與拆分表相比,廣播表的數據量較小、更新頻率較低,通常用于字典表或配置表等場景。由于其在所有節點上都有副本,因此可以大大降低JOIN關聯查詢的網絡開銷,提高查詢效率。

需要注意的是,對于廣播表的修改操作需要保證同步性,以確保所有節點上的數據保持一致。

廣播表的特點

  • 在所有分片數據源中,廣播表的數據完全一致。因此,對廣播表的操作(如插入、更新和刪除)會實時在每個分片數據源中執行一遍,以保證數據的一致性。
  • 對于廣播表的查詢操作,僅需要在任意一個分片數據源中執行一次即可。
  • 與任何其他表進行JOIN操作都是可行的,因為由于廣播表的數據在所有節點上均一致,所以可以訪問到任何一個節點上的相同數據。

什么樣的表可以作為廣播表呢?

訂單管理系統中,往往需要查詢統計某個城市地區的訂單數據,這就會涉及到省份地區表t_city與訂單流水表DB_n.t_order_n進行JOIN查詢,因此可以考慮將省份地區表設計為廣播表,核心理念就是 避免跨庫JOIN操作 。

圖片

注意 :上邊我們提到廣播表在數據插入、更新與刪除會實時在每個分片數據源均執行,也就是說如果你有1000個分片數據源,那么修改一次廣播表就要執行1000次SQL,所以盡量不在并發環境下和業務高峰時進行,以免影響系統的性能。

單表

單表指所有的分片數據源中僅唯一存在的表(沒有分片的表),適用于數據量不大且無需分片的表。

如果一張表的數據量預估在千萬級別,且沒有與其他拆分表進行關聯查詢的需求,建議將其設置為單表類型,存儲在默認分片數據源中。

分片鍵

分片鍵決定了數據落地的位置,也就是數據將會被分配到哪個數據節點上存儲。因此,分片鍵的選擇非常重要。

比如我們將 t_order 表進行分片后,當插入一條訂單數據執行SQL時,需要通過解析SQL語句中指定的分片鍵來計算數據應該落在哪個分片中。以表中order_no字段為例,我們可以通過對其取模運算(比如 order_no % 2)來得到分片編號,然后根據分片編號分配數據到對應的數據庫實例(比如 DB_1DB_2)。拆分表也是同理計算。

在這個過程中,order_no 就是 t_order 表的分片鍵。也就是說,每一條訂單數據的 order_no 值決定了它應該存放的數據庫實例和表。選擇一個適合作為分片鍵的字段可以更好地利用水平分片帶來的性能提升。

圖片

這樣同一個訂單的相關數據就會落在同一個數據庫、表中,查詢訂單時同理計算,就可直接定位數據位置,大幅提升數據檢索的性能,避免了全庫表掃描。

不僅如此 ShardingSphere 還支持根據多個字段作為分片健進行分片,這個在后續對應章節中會詳細講。

分片策略

分片策略來指定使用哪種分片算法、選擇哪個字段作為分片鍵以及如何將數據分配到不同的節點上。

分片策略是由分片算法分片健組合而成,分片策略中可以使用多種分片算法和對多個分片鍵進行運算。

圖片

分庫、分表的分片策略配置是相對獨立的,可以各自使用不同的策略與算法,每種策略中可以是多個分片算法的組合,每個分片算法可以對多個分片健做邏輯判斷。

分片算法

分片算法則是用于對分片鍵進行運算,將數據劃分到具體的數據節點中。

常用的分片算法有很多:

  • 哈希分片 :根據分片鍵的哈希值來決定數據應該落到哪個節點上。例如,根據用戶 ID 進行哈希分片,將屬于同一個用戶的數據分配到同一個節點上,便于后續的查詢操作。
  • 范圍分片 :分片鍵值按區間范圍分配到不同的節點上。例如,根據訂單創建時間或者地理位置來進行分片。
  • 取模分片 :將分片鍵值對分片數取模,將結果作為數據應該分配到的節點編號。例如, order_no % 2 將訂單數據分到兩個節點之一。
  • .....

實際業務開發中分片的邏輯要復雜的多,不同的算法適用于不同的場景和需求,需要根據實際情況進行選擇和調整。

綁定表

綁定表是那些具有相同分片規則的一組分片表,由于分片規則一致所產生的的數據落地位置相同,在JOIN聯合查詢時能有效避免跨庫操作。

比如:t_order 訂單表和 t_order_item 訂單項目表,都以 order_no 字段作為分片鍵,并且使用 order_no 進行關聯,因此兩張表互為綁定表關系。

使用綁定表進行多表關聯查詢時,必須使用分片鍵進行關聯,否則會出現笛卡爾積關聯或跨庫關聯,從而影響查詢效率。

當使用 t_ordert_order_item 表進行多表聯合查詢,執行如下聯合查詢的邏輯SQL。

SELECT * FROM t_order o JOIN t_order_item i ON o.order_no=i.order_no

如果不配置綁定表關系,兩個表的數據位置不確定就會全庫表查詢,出現笛卡爾積關聯查詢,將產生如下四條SQL。

SELECT * FROM t_order_0 o JOIN t_order_item_0 i ON o.order_no=i.order_no 
SELECT * FROM t_order_0 o JOIN t_order_item_1 i ON o.order_no=i.order_no 
SELECT * FROM t_order_1 o JOIN t_order_item_0 i ON o.order_no=i.order_no 
SELECT * FROM t_order_1 o JOIN t_order_item_1 i ON o.order_no=i.order_no

圖片

而配置綁定表關系后再進行關聯查詢時,分片規則一致產生的數據就會落到同一個庫表中,那么只需在當前庫中 t_order_nt_order_item_n 表關聯即可。

SELECT * FROM t_order_0 o JOIN t_order_item_0 i ON o.order_id=i.order_id 
SELECT * FROM t_order_1 o JOIN t_order_item_1 i ON o.order_id=i.order_id

圖片

注意 :在關聯查詢時 t_order 它作為整個聯合查詢的主表。所有相關的路由計算都只使用主表的策略,t_order_item 表的分片相關的計算也會使用 t_order 的條件,所以要保證綁定表之間的分片鍵要完全相同。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SQL
    SQL
    +關注

    關注

    1

    文章

    766

    瀏覽量

    44159
  • 路由
    +關注

    關注

    0

    文章

    278

    瀏覽量

    41857
  • 架構
    +關注

    關注

    1

    文章

    515

    瀏覽量

    25488
收藏 人收藏

    評論

    相關推薦

    數據庫分區、分庫

    今天先說說數據庫的數據分區,分庫以及的內容吧! 數據庫分區、分庫 數據庫分區、
    的頭像 發表于 09-30 11:24 ?2834次閱讀

    談分布式數據庫中間件之分庫   

      分庫,顧名思義就是把原本存儲于一個庫的數據分塊存儲到多個庫,把原本存儲于一個的數據分塊存儲到多個
    發表于 08-02 20:19

    10PCB設計黃金法則

    時應牢記并踐行的十最有效的設計法則。工程師無需按時間先后或相對重要性依次執行這些法則,只需全部遵循便可極大地改變產品設計。  法則一:選擇正確的網格 - 設置并始終使用能夠匹配最多元
    發表于 09-21 16:46

    分庫是什么?怎么實現?

    數據庫分庫、讀寫分離的原理實現,使用場景
    發表于 10-25 17:24

    買大硬盤的6法則

    買大硬盤的6法則 采購話題1:別光顧容量和價格!         沒錯,容量和價格是大家在選購硬盤時問得最多的關鍵詞。事實,除了這兩
    發表于 12-17 14:39 ?1024次閱讀

    利用Mycat實現MySQL讀寫分離、分庫最佳實踐

    利用Mycat實現MySQL讀寫分離、分庫最佳實踐
    發表于 09-08 10:20 ?14次下載
    利用Mycat實現MySQL讀寫分離、<b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>最佳實踐

    數據庫分庫基礎和實踐

    因為單張表里面的數據多。如果是因為多而數據多,使用垂直切分,根據業務切分成不同的庫。如果是因為單張的數據量太大,這時要用水平切分,即把的數據按某種規則切分成多張,甚至多個庫
    發表于 09-05 16:40 ?259次閱讀

    你們知道為什么要分庫

    在文章開頭先拋幾個問題: (1)什么時候才需要分庫呢?我們的評判標準是什么? (2)一張存儲了多少數據的時候,才需要考慮分庫
    的頭像 發表于 08-16 10:37 ?1532次閱讀

    優化MySQL數據庫中樸實無華的和花里胡哨的分庫

    blog.csdn.net/qq_39390545/article/details/116248222 一、樸實無華的 - 1、垂直 2、水平分
    的頭像 發表于 08-26 16:33 ?1259次閱讀

    你是否知道分庫需要哪些要素?

    分庫會重新影響數據的分布,無論是全量還是增量,都會涉及到數據遷移,所以Databus是必要的。
    的頭像 發表于 10-12 10:39 ?786次閱讀

    什么是分庫?為什么分庫?什么情況下會用分庫呢?

    分庫是由分庫這兩個獨立概念組成的,只不過通常分庫
    的頭像 發表于 11-30 09:37 ?7555次閱讀

    PCB布局的十設計法則

    本文以下內容介紹了電子設計工程師在使用設計軟件進行PCB布局設計及商業制造時應牢記并踐行的十最有效的設計法則。工程師無需按時間先后或相對重要性依次執行這些法則,只需全部遵循便可極大地改變產品設計。
    發表于 04-08 11:19 ?307次閱讀

    分庫21法則速來(下)

    還是不著急實戰,咱們先介紹下在分庫架構實施過程中,會接觸到的一些通用概念,了解這些概念能夠幫助理解市面上其他的分庫表工具,盡管它們的實
    的頭像 發表于 05-26 17:33 ?636次閱讀
    <b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>的<b class='flag-5'>21</b><b class='flag-5'>條</b><b class='flag-5'>法則</b><b class='flag-5'>速來</b><b class='flag-5'>碼</b><b class='flag-5'>住</b>(下)

    分庫后復雜查詢的應對之道:基于DTS實時性ES寬構建技術實踐

    ,通過分庫應對存系統讀寫性能瓶頸和存儲瓶頸;分庫
    的頭像 發表于 06-25 18:30 ?876次閱讀
    <b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>后復雜查詢的應對之道:基于DTS實時性ES寬<b class='flag-5'>表</b>構建技術實踐

    軟件系統數據庫的分庫設計

    軟件系統數據庫的分庫設計 系統讀寫分離、分庫技術實現采用MyCat中間件,MyCat 是
    的頭像 發表于 08-22 11:39 ?330次閱讀
    軟件系統數據庫的<b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>設計

    主站蜘蛛池模板: 国产在线高清亚洲精品一区| 女性酥酥影院| 脱女学小内内摸出水网站免费| 电影 qvod| 性满足久久久久久久久| 国产在线精品亚洲观看不卡欧美| 亚洲你我色| 免费看欧美xxx片| 俄罗斯xxxxxbbbbb| 亚洲欧美日本久久综合网站| 麻豆精品人妻一区二区三区蜜桃| yellow日本动漫观看免费| 午夜爽喷水无码成人18禁三级| 久久精品免费观看久久| xxxx69中国| 亚洲人成77777在线视频| 暖暖视频免费高清在线观看 视频| 干极品美女| 在线黑人抽搐潮喷| 日日夜夜狠狠干| 久久99re7在线视频精品| 被免费网站在线视频| 亚洲日本欧美国产在线视| 欧美日韩另类在线观看视频| 国产亚洲精品 在线视频 香蕉| 97人妻丰满熟妇AV无码| 天天狠狠色综合图片区| 伦理片 a在线线版韩国| 国产麻豆精品人妻无码A片| 45分钟做受片免费观看| 无限资源在线看影院免费观看| 男女爽爽无遮挡午夜视频在线观看| 国产精品久久久久久搜索| 1000视频在线播放| 亚洲AV精品乱码专区| 欧美亚洲日韩一道免费观看| 精品国产在线观看福利| 富婆大保健嗷嗷叫普通话对白| 68日本xxxxxxxx79| 亚洲精品无码久久久久A片空| 秋秋影视午夜福利高清|