欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

數(shù)據(jù)庫(kù)分庫(kù)分表有哪些利弊

這篇文章主要介紹“數(shù)據(jù)庫(kù)分庫(kù)分表有哪些利弊”,在日常操作中,相信很多人在數(shù)據(jù)庫(kù)分庫(kù)分表有哪些利弊問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”數(shù)據(jù)庫(kù)分庫(kù)分表有哪些利弊”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供磐安網(wǎng)站建設(shè)、磐安做網(wǎng)站、磐安網(wǎng)站設(shè)計(jì)、磐安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、磐安企業(yè)網(wǎng)站模板建站服務(wù),十多年磐安做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

為什么要分庫(kù)分表?

當(dāng)一張表的數(shù)據(jù)達(dá)到幾千萬(wàn)時(shí),查詢一次所花的時(shí)間會(huì)變長(zhǎng)。這時(shí)候,如果有聯(lián)合查詢的話,可能會(huì)卡死在那兒,甚至把系統(tǒng)給拖垮。
而分庫(kù)分表的目的就在于此:減小數(shù)據(jù)庫(kù)的負(fù)擔(dān),提高數(shù)據(jù)庫(kù)的效率,縮短查詢時(shí)間。另外,因?yàn)榉謳?kù)分表這種改造是可控的,底層還是基于RDBMS,因此整個(gè)數(shù)據(jù)庫(kù)的運(yùn)維體系以及相關(guān)基礎(chǔ)設(shè)施都是可重用的。
目前我們系統(tǒng)將近20億數(shù)據(jù),每張表最大的接近600w條/表,每條數(shù)據(jù)大約3k,每個(gè)表將近1.5G的數(shù)據(jù)。查詢經(jīng)常超時(shí),單條SQL執(zhí)行count(*)查詢時(shí)間達(dá)到了最大260ms,0.26s(標(biāo)準(zhǔn)是超過(guò)0.1s的數(shù)據(jù)為慢SQL)。
為了說(shuō)明我們?yōu)槭裁匆謳?kù)分表,我們看一下sql的執(zhí)行過(guò)程。
MySQL執(zhí)行一條sql的過(guò)程如下:
1、收到sql
2、把sql放到排隊(duì)隊(duì)列中
3、執(zhí)行sql
4、返回結(jié)果
在這個(gè)執(zhí)行過(guò)程中最花時(shí)間的地方在于:
1.排隊(duì)等待的時(shí)間,
2.sql的執(zhí)行時(shí)間。
如果有2個(gè)sql都要同時(shí)修改同一張表的同一條數(shù)據(jù),mysql對(duì)這種情況的處理是:一種是表鎖定(MyISAM存儲(chǔ)引擎),一個(gè)是行鎖定(InnoDB存儲(chǔ)引擎)。
表鎖定表示其他操作都不能對(duì)這張表進(jìn)行操作,必須等當(dāng)前對(duì)表的操作完才行。行鎖定也一樣,別的sql必須等這條數(shù)據(jù)操作完了,其他人才能對(duì)這條數(shù)據(jù)進(jìn)行操作。
如果數(shù)據(jù)太多,一次執(zhí)行的時(shí)間太長(zhǎng),等待的時(shí)間就越長(zhǎng),這也是我們?yōu)槭裁匆直淼脑颉?/p>

分庫(kù)分表術(shù)語(yǔ):

讀寫(xiě)分離: 不同的數(shù)據(jù)庫(kù),同步相同的數(shù)據(jù),分別只負(fù)責(zé)數(shù)據(jù)的讀和寫(xiě);
分區(qū): 指定分區(qū)列表達(dá)式,把記錄拆分到不同的區(qū)域中(必須是同一服務(wù)器,可以是不同硬盤(pán)),應(yīng)用看來(lái)還是同一張表,沒(méi)有變化;
分庫(kù): 一個(gè)系統(tǒng)的多張數(shù)據(jù)表,存儲(chǔ)到多個(gè)數(shù)據(jù)庫(kù)實(shí)例中;
分表: 對(duì)于一張多行(記錄)多列(字段)的二維數(shù)據(jù)表,又分兩種情形:
垂直分表: 豎向切分,不同分表存儲(chǔ)不同的字段,可以把不常用或者大容量、或者不同業(yè)務(wù)的字段拆分出去;
水平分表(最復(fù)雜): 橫向切分,按照特定分片算法,不同分表存儲(chǔ)不同的記錄。

在實(shí)際生產(chǎn)中,通常的進(jìn)化過(guò)程是:?jiǎn)螏?kù)單表->單庫(kù)多表->多庫(kù)多表;;分區(qū)->分表->分庫(kù)(垂直分庫(kù) - 水平分庫(kù) - 讀寫(xiě)分離)

單庫(kù)單表
單庫(kù)單表是最常見(jiàn)的數(shù)據(jù)庫(kù)設(shè)計(jì),例如,有一張訂單表(order)放在數(shù)據(jù)庫(kù)中,所有的訂單都可以在order表中查到。
單庫(kù)多表
隨著訂單數(shù)量的增加,order表的數(shù)據(jù)量會(huì)越來(lái)越大,當(dāng)數(shù)據(jù)量達(dá)到一定程度的時(shí)候,對(duì)order表的查詢會(huì)變慢,從而影響整個(gè)DB的性能。
另外,隨著需求的迭代,如果增加添加一列的時(shí)候,mysql會(huì)鎖表,期間所有的讀寫(xiě)操作只能等待,別無(wú)他法。
這時(shí)候,可以將order進(jìn)行水平的切分,產(chǎn)生多個(gè)表結(jié)構(gòu)完全一樣的order表。比如:order_01,order_02…,order_n,那么order_01+order_02+order_n的數(shù)據(jù)是一份完整的訂單數(shù)據(jù)。
這個(gè)水平切分,簡(jiǎn)單的做法如:
按數(shù)量切分,1 ~ 1000的存在第一張表,1001 ~ 2000存在第二張表;
按時(shí)間切分,比如:2019年1月份存在第一張表,2019年2月份存在第二張表;還可以按照id的哈希值進(jìn)行切分,等等等等
多庫(kù)多表
隨著數(shù)據(jù)量增加,單臺(tái)數(shù)據(jù)庫(kù)的硬件存儲(chǔ)不夠了,并且,隨著查詢量的增加,單臺(tái)數(shù)據(jù)庫(kù)服務(wù)器已經(jīng)沒(méi)辦法支撐。這時(shí)候就需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行水平區(qū)分。
比如按地區(qū)分庫(kù),一個(gè)省份在一個(gè)物理數(shù)據(jù)庫(kù)等等

分庫(kù)分表后引入的新問(wèn)題

1.分布式事務(wù)問(wèn)題
做了垂直分庫(kù)或者水平分庫(kù)以后,就必然會(huì)涉及到跨庫(kù)執(zhí)行SQL的問(wèn)題,就會(huì)引發(fā)互聯(lián)網(wǎng)界的老大難問(wèn)題-“分布式事務(wù)”。那么要如何解決這個(gè)問(wèn)題呢?
使用分布式事務(wù)中間件
使用MySQL自帶的針對(duì)跨庫(kù)的事務(wù)一致性方案(XA),不過(guò)性能要比單庫(kù)的慢10倍左右。
能否避免掉跨庫(kù)操作(比如將用戶和商品放在同一個(gè)庫(kù)中)
2.跨庫(kù)join的問(wèn)題
分庫(kù)分表后,表之間的關(guān)聯(lián)操作將受到限制,就無(wú)法join位于不同分庫(kù)的表,也無(wú)法join分表粒度不同的表, 結(jié)果原本一次查詢能夠完成的業(yè)務(wù),可能需要多次查詢才能完成。
那么要如何解決這個(gè)問(wèn)題呢?
簡(jiǎn)單的解決方法:
全局表:基礎(chǔ)數(shù)據(jù),所有庫(kù)都拷貝一份。
字段冗余:把需要join的字段冗余在各個(gè)表中,這樣有些字段就不用join去查詢了。
系統(tǒng)層組裝:應(yīng)用端先分別查詢出所有復(fù)核條件的,然后在應(yīng)用端組裝起來(lái),類(lèi)似于一個(gè)mapreduce的過(guò)程(較復(fù)雜)。
3.橫向擴(kuò)容的問(wèn)題
當(dāng)我們使用哈希取模做分表的時(shí)候,針對(duì)數(shù)據(jù)量的遞增,可能需要?jiǎng)討B(tài)的增加表,此時(shí)就需要考慮數(shù)據(jù)遷移的問(wèn)題。
原來(lái)使用的是hash后對(duì)8進(jìn)行取模,那么,數(shù)據(jù)是均分在8個(gè)表(庫(kù))上。
如果8個(gè)表不夠的時(shí)候,我們要擴(kuò)展到16個(gè)表,這時(shí)候,我們hash后對(duì)16取模,新數(shù)據(jù)是沒(méi)有問(wèn)題的,舊數(shù)據(jù)就會(huì)發(fā)生錯(cuò)亂。
如果哈希后是9,那么,原來(lái)我們對(duì)8取模后,是1,會(huì)到表1進(jìn)行查詢;但是,現(xiàn)在我們是對(duì)16取模,那么是到表9進(jìn)行查詢的,而這個(gè)數(shù)據(jù)在表9又不存在,因此,就會(huì)找不到數(shù)據(jù)了
4.結(jié)果集合并、排序的問(wèn)題
因?yàn)槲覀兪菍?shù)據(jù)分散存儲(chǔ)到不同的庫(kù)、表里的,當(dāng)我們查詢指定數(shù)據(jù)列表時(shí),數(shù)據(jù)來(lái)源于不同的子庫(kù)或者子表,就必然會(huì)引發(fā)結(jié)果集合并、排序的問(wèn)題。
如果每次查詢都需要排序、合并等操作,性能肯定會(huì)受非常大的影響。

到此,關(guān)于“數(shù)據(jù)庫(kù)分庫(kù)分表有哪些利弊”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

分享文章:數(shù)據(jù)庫(kù)分庫(kù)分表有哪些利弊
分享網(wǎng)址:http://www.chinadenli.net/article12/gisjdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版營(yíng)銷(xiāo)型網(wǎng)站建設(shè)網(wǎng)站制作網(wǎng)頁(yè)設(shè)計(jì)公司云服務(wù)器品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)