0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

或許我們都被分庫(kù)分表約束了思維

京東云 ? 來(lái)源:張俊杰 ? 作者:張俊杰 ? 2025-02-21 09:51 ? 次閱讀

作者:張俊杰

概述

這篇文章沒(méi)什么太多的干貨,純純是一篇討論和思考帖。

從業(yè)數(shù)據(jù)庫(kù)領(lǐng)域三年有余了,從分庫(kù)分表中間件到數(shù)據(jù)庫(kù)團(tuán)隊(duì)內(nèi)核學(xué)到了很多東西。也接觸了很多項(xiàng)目,包括TiDB、Vitess、Polardb、StarDB等等。

國(guó)內(nèi)的項(xiàng)目好像很多都聚焦于分庫(kù)分表的概念,包括很多的數(shù)據(jù)庫(kù)團(tuán)隊(duì)都在嘗試這個(gè)概念的落地和沉溺于性能的跑分。

最近我在預(yù)覽MySQL官方,看到了Partitioning的概念,而且占據(jù)了很大的篇幅。不由得引人思考,為什么這個(gè)概念在我接觸的業(yè)務(wù)中沒(méi)有被廣泛的使用呢?或許我們將來(lái)可以有分庫(kù)分區(qū)的概念?

接下來(lái)從頭縷一下數(shù)據(jù)庫(kù)選型的問(wèn)題吧(以下均以MySQL的Innodb場(chǎng)景為例):

分表、分區(qū)、分庫(kù)有什么用處

在那個(gè)遠(yuǎn)古的時(shí)代,物理機(jī)器的配置很低,當(dāng)數(shù)據(jù)量增大的時(shí)候,傳統(tǒng)的B+樹(shù)的高度會(huì)越來(lái)越高,我們對(duì)硬件資源的要求很高,機(jī)器往往內(nèi)存爆倉(cāng)、IO打滿等等。

這導(dǎo)致:

查詢(xún)速度顯著下降。復(fù)雜的查詢(xún)、索引失效、全表掃描等操作變得緩慢。

在大表中創(chuàng)建和維護(hù)索引可能會(huì)消耗大量的時(shí)間和資源。插入、更新和刪除操作可能需要花費(fèi)更長(zhǎng)的時(shí)間來(lái)維護(hù)索引,導(dǎo)致性能下降。

讀寫(xiě)操作可能導(dǎo)致鎖沖突,降低系統(tǒng)的并發(fā)處理能力,甚至引發(fā)死鎖問(wèn)題。

備份、恢復(fù)、數(shù)據(jù)清理、空間管理等操作變得困難,維護(hù)成本和風(fēng)險(xiǎn)增加。

等等。。

后來(lái)我們引出了第一個(gè)概念:分表

分表

在 5.1版本以前,MySQL并沒(méi)有分區(qū)的概念,為了解決這個(gè)問(wèn)題,無(wú)非是單表拆成雙表、多表之類(lèi)的,這樣將一個(gè)表要面臨的問(wèn)題分散成了兩個(gè)表或者多個(gè)表共同承受。

反思當(dāng)下,在當(dāng)前這個(gè)物理資源冗余的時(shí)代,大部分業(yè)務(wù)場(chǎng)景下我們的單表真的會(huì)比分表的性能差很多嗎?有多少時(shí)候我們是為了分表而分表?我們的分表邏輯或許需要我們支持更多的功能,比如彈性、事務(wù)、一些查詢(xún)語(yǔ)句的改寫(xiě),然后一遍一遍的造輪子給運(yùn)維帶來(lái)無(wú)盡的痛苦。

分庫(kù)

分表的解決能力還是有限的,我們一臺(tái)物理機(jī)器的能力也是有限的,這時(shí)候或許我們可以采用分表的形式,來(lái)避免熱點(diǎn)問(wèn)題或者單機(jī)器壓力過(guò)載的問(wèn)題。

將一個(gè)庫(kù)要面臨的問(wèn)題分散成了兩個(gè)庫(kù)或者多個(gè)庫(kù)共同承受。

分區(qū)

?相關(guān)文檔

在5.1版本以后MySQL出了一個(gè)國(guó)內(nèi)幾乎無(wú)人問(wèn)津的分區(qū)表的功能。

分區(qū)表的實(shí)現(xiàn)原理其實(shí)和分表差不太多,不過(guò)它更靠近文件系統(tǒng),而沒(méi)有經(jīng)過(guò)MySQL的應(yīng)用層或者引擎層。MySQL的物理數(shù)據(jù),存儲(chǔ)在表空間文件(.ibdata1和.ibd)中,這里講的分區(qū)的意思是指將同一表中不同行的記錄分配到不同的物理文件中,幾個(gè)分區(qū)就有幾個(gè).idb文件。

隨著 MySQL 版本的更新迭代,分區(qū)功能也在后續(xù)版本中不斷得到改進(jìn)和增強(qiáng)。具體的分區(qū)功能支持情況如下:

?MySQL 5.1:引入了 Range 和 List 兩種分區(qū)類(lèi)型。支持基本的分區(qū)管理和查詢(xún)優(yōu)化。

?MySQL 5.5:對(duì)分區(qū)表的查詢(xún)優(yōu)化有所改進(jìn),提升了性能。

?MySQL 5.6:引入了更多的分區(qū)管理功能,包括 subpartition 子分區(qū)、分區(qū)交換操作、CHECK 約束等。

?MySQL 5.7:進(jìn)一步增強(qiáng)了分區(qū)表的功能,包括 hash 分區(qū)類(lèi)型、NOWAIT 選項(xiàng)、ALTER TABLE ... EXCHANGE PARTITION 和 ALTER TABLE ... REBUILD PARTITION 等操作。

?MySQL 8.0:繼續(xù)對(duì)分區(qū)表進(jìn)行優(yōu)化和增強(qiáng),包括對(duì)于自動(dòng)生成分區(qū)鍵值、分區(qū)表的查詢(xún)性能提升等方面的改進(jìn)。

這樣看起來(lái),這不完全Cover住了分表的概念嗎?甚至,這不比業(yè)界的分表做的還要好嗎。

那為什么我們還要癡迷于分表,或許我們可以采用分區(qū)的邏輯吧?

當(dāng)然,還有一些延伸到運(yùn)維操作,舉個(gè)例子:

分區(qū)表怎么擴(kuò)容

詳見(jiàn) ALTER TABLE 語(yǔ)句

1.創(chuàng)建新分區(qū):使用 ALTER TABLE 命令添加新的分區(qū)。例如,如果是按照時(shí)間范圍分區(qū)的表,可以增加新的時(shí)間范圍的分區(qū)。

ALTER TABLE your_partitioned_table
ADD PARTITION (PARTITION p_new VALUES LESS THAN (new_value));

這里的 new_value 是新的分區(qū)范圍。

2. 數(shù)據(jù)遷移:使用 ALTER TABLE ... REORGANIZE PARTITION 命令將現(xiàn)有分區(qū)中的數(shù)據(jù)遷移到新的分區(qū)中。例如,可以通過(guò)將舊分區(qū)的數(shù)據(jù)移動(dòng)到新分區(qū)來(lái)實(shí)現(xiàn)。

ALTER TABLE your_partitioned_table
REORGANIZE PARTITION old_partition INTO
(PARTITION p_new VALUES LESS THAN (new_value));

這里的 old_partition 是要移動(dòng)數(shù)據(jù)的舊分區(qū)。

3. 數(shù)據(jù)清理(可選):在確認(rèn)數(shù)據(jù)遷移成功后,可以考慮清理不再需要的舊分區(qū)。使用 ALTER TABLE ... DROP PARTITION 命令可以刪除不再需要的舊分區(qū)。

ALTER TABLE your_partitioned_table
DROP PARTITION old_partition;

這里的 old_partition 是要?jiǎng)h除的舊分區(qū)。

顯而易見(jiàn),這是一個(gè)原地?cái)U(kuò)容操作,我們或許不需要引入什么復(fù)雜的組建或者邏輯去做resharding。

落地方案猜測(cè)

我們或許可以在單表業(yè)務(wù)場(chǎng)景下遇到問(wèn)題瓶頸后采用分區(qū)的概念,如果分區(qū)不夠可以采用原地?cái)U(kuò)容邏輯。當(dāng)機(jī)器達(dá)到瓶頸后采用分庫(kù)的概念達(dá)成分庫(kù)分區(qū)的邏輯。

這只是一個(gè)猜想,對(duì)于我們的數(shù)據(jù)庫(kù)廠商,其實(shí)只需要將這套邏輯維護(hù)好做到高可用的邏輯即可。

當(dāng)然,圍繞著分區(qū)和物理數(shù)據(jù)庫(kù)我們還有很多擴(kuò)展內(nèi)容可以去做,但是這篇文章旨在說(shuō)明,或許我們不應(yīng)該被分庫(kù)分表約束了思維,或許我們不需要做分布式的邏輯,或許在機(jī)器性能良好的場(chǎng)景下我們單機(jī)器就可以cover住我們的數(shù)據(jù)量。

此外,一個(gè)數(shù)據(jù)庫(kù)產(chǎn)品或許應(yīng)該做到serverless的概念,我們用戶(hù)不需要理解這么多的邏輯,至于分區(qū)或許這個(gè)看MySQL文檔都可以學(xué)習(xí)到。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    849

    瀏覽量

    27563
收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    PCB Layout 約束管理,助力優(yōu)化設(shè)計(jì)

    本文重點(diǎn)PCBlayout約束管理在設(shè)計(jì)中的重要性Layout約束有助避免一些設(shè)計(jì)問(wèn)題設(shè)計(jì)中可以使用的不同約束在PCB設(shè)計(jì)規(guī)則和約束管理方面,許多設(shè)計(jì)師試圖采用“一刀切”的方法,認(rèn)為同
    的頭像 發(fā)表于 05-16 13:02 ?263次閱讀
    PCB Layout <b class='flag-5'>約束</b>管理,助力優(yōu)化設(shè)計(jì)

    PanDao:實(shí)際約束條件下成像系統(tǒng)的初始結(jié)構(gòu)的生成

    的平均RMS光斑尺寸約為55 μm,色差校正效果中等。基于同等規(guī)格與約束,我們采用自主研發(fā)的FTR初始透鏡生成器,在數(shù)分鐘內(nèi)即創(chuàng)建出多個(gè)更加優(yōu)質(zhì)的設(shè)計(jì)方案。圖1展示由FTR程序生成的五類(lèi)不同透鏡系統(tǒng)
    發(fā)表于 05-07 08:57

    FPGA時(shí)序約束之設(shè)置時(shí)鐘組

    Vivado中時(shí)序分析工具默認(rèn)會(huì)分析設(shè)計(jì)中所有時(shí)鐘相關(guān)的時(shí)序路徑,除非時(shí)序約束中設(shè)置時(shí)鐘組或false路徑。使用set_clock_groups命令可以使時(shí)序分析工具不分析時(shí)鐘組中時(shí)鐘的時(shí)序路徑,使用set_false_path約束
    的頭像 發(fā)表于 04-23 09:50 ?306次閱讀
    FPGA時(shí)序<b class='flag-5'>約束</b>之設(shè)置時(shí)鐘組

    一文詳解Vivado時(shí)序約束

    Vivado的時(shí)序約束是保存在xdc文件中,添加或創(chuàng)建設(shè)計(jì)的工程源文件后,需要?jiǎng)?chuàng)建xdc文件設(shè)置時(shí)序約束。時(shí)序約束文件可以直接創(chuàng)建或添加已存在的約束文件,創(chuàng)建
    的頭像 發(fā)表于 03-24 09:44 ?2759次閱讀
    一文詳解Vivado時(shí)序<b class='flag-5'>約束</b>

    VirtualLab Fusion應(yīng)用:使用自定義的評(píng)價(jià)函數(shù)優(yōu)化高NA束器

    ,我們演示兩種具有不同配置目標(biāo)和約束的優(yōu)化: ?在優(yōu)化#1中,優(yōu)先考慮均勻性誤差。 ?在優(yōu)化#2中,0級(jí)也要最小化。 關(guān)于評(píng)價(jià)函數(shù)約束,用戶(hù)可以指定 ?單獨(dú)的目標(biāo)值、范圍、下限或上限
    發(fā)表于 03-07 08:54

    數(shù)顯千分表的數(shù)據(jù)如何用存儲(chǔ)器進(jìn)行接收?

    數(shù)顯千分表的數(shù)據(jù)如何用存儲(chǔ)器進(jìn)行接收
    發(fā)表于 02-11 06:01

    不是!讓高速先生給個(gè)過(guò)孔優(yōu)化方案就那么難嗎?

    ,我們之前的文章也有分享過(guò),不同長(zhǎng)度的層出線,過(guò)孔阻抗也會(huì)有不小的差異哈。 差分過(guò)孔間距不同 仔細(xì)看給過(guò)來(lái)的過(guò)孔指導(dǎo),其實(shí)只約束了信號(hào)孔到地過(guò)孔的距離,但是沒(méi)對(duì)信號(hào)孔之間的距離做約束,那我們
    發(fā)表于 01-21 08:50

    和 Dr Peter 一起學(xué) KiCad 4.3:輪廓與約束 (Edge cut板框)

    “ ?在本節(jié)中,您將學(xué)會(huì)如何繪制 PCB 的板框。 ? ” 4 .3.? 2- 輪廓與約束 (Edge cut板框) 在本章中,我們將完成在本書(shū)第三部第二章中學(xué)到的 PCB 工作流程的第二步。在這
    的頭像 發(fā)表于 12-03 12:13 ?1023次閱讀
    和 Dr Peter 一起學(xué) KiCad 4.3:輪廓與<b class='flag-5'>約束</b> (Edge cut板框)

    時(shí)序約束一主時(shí)鐘與生成時(shí)鐘

    的輸出,對(duì)于Ultrascale和Ultrascale+系列的器件,定時(shí)器會(huì)自動(dòng)地接入到GT的輸出。 1.2 約束設(shè)置格式 主時(shí)鐘約束使用命令create_clock進(jìn)行創(chuàng)建,進(jìn)入Timing
    的頭像 發(fā)表于 11-29 11:03 ?1257次閱讀
    時(shí)序<b class='flag-5'>約束</b>一主時(shí)鐘與生成時(shí)鐘

    常用時(shí)序約束使用說(shuō)明-v1

    為了節(jié)省每層導(dǎo)入網(wǎng)的時(shí)間,在設(shè)置中我們通常不會(huì)勾選Aoto Load place and route Data 前面的勾選框。這樣每次編譯完成之后Show/Hide Tcl Command
    的頭像 發(fā)表于 11-01 11:06 ?502次閱讀

    電路的兩類(lèi)約束指的是哪兩類(lèi)

    電路的兩類(lèi)約束通常指的是電氣約束和物理約束。這兩類(lèi)約束在電路設(shè)計(jì)和分析中起著至關(guān)重要的作用。 一、電氣約束 電氣
    的頭像 發(fā)表于 08-25 09:34 ?1839次閱讀

    軟件系統(tǒng)數(shù)據(jù)庫(kù)的分庫(kù)設(shè)計(jì)

    軟件系統(tǒng)數(shù)據(jù)庫(kù)的分庫(kù)設(shè)計(jì) 系統(tǒng)讀寫(xiě)分離、分庫(kù)技術(shù)實(shí)現(xiàn)采用MyCat中間件,MyCat 是
    的頭像 發(fā)表于 08-22 11:39 ?531次閱讀
    軟件系統(tǒng)數(shù)據(jù)庫(kù)的<b class='flag-5'>分庫(kù)</b><b class='flag-5'>分</b><b class='flag-5'>表</b>設(shè)計(jì)

    深度解析FPGA中的時(shí)序約束

    建立時(shí)間和保持時(shí)間是FPGA時(shí)序約束中兩個(gè)最基本的概念,同樣在芯片電路時(shí)序分析中也存在。
    的頭像 發(fā)表于 08-06 11:40 ?1269次閱讀
    深度解析FPGA中的時(shí)序<b class='flag-5'>約束</b>

    如何將精益思維應(yīng)用于傳統(tǒng)工廠的數(shù)字化轉(zhuǎn)型?

    隨著科技的不斷進(jìn)步和市場(chǎng)競(jìng)爭(zhēng)的日益激烈,傳統(tǒng)工廠正面臨著前所未有的挑戰(zhàn)。如何在這場(chǎng)數(shù)字化浪潮中站穩(wěn)腳跟,甚至實(shí)現(xiàn)彎道超車(chē)?答案或許就在精益思維中。今天,深圳天行健企業(yè)管理咨詢(xún)公司就來(lái)解析如何將精益
    的頭像 發(fā)表于 07-18 09:43 ?426次閱讀

    分庫(kù)后復(fù)雜查詢(xún)的應(yīng)對(duì)之道:基于DTS實(shí)時(shí)性ES寬構(gòu)建技術(shù)實(shí)踐

    ,通過(guò)分庫(kù)應(yīng)對(duì)存系統(tǒng)讀寫(xiě)性能瓶頸和存儲(chǔ)瓶頸;分庫(kù)
    的頭像 發(fā)表于 06-25 18:30 ?1272次閱讀
    <b class='flag-5'>分庫(kù)</b><b class='flag-5'>分</b><b class='flag-5'>表</b>后復(fù)雜查詢(xún)的應(yīng)對(duì)之道:基于DTS實(shí)時(shí)性ES寬<b class='flag-5'>表</b>構(gòu)建技術(shù)實(shí)踐

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品