自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)據(jù)庫(kù)中間件的分片規(guī)則如何選擇,這篇文章告訴你

數(shù)據(jù)庫(kù)
本文對(duì)常用數(shù)據(jù)分片規(guī)則進(jìn)行優(yōu)缺點(diǎn)以及適應(yīng)場(chǎng)景的介紹,希望對(duì)讀者朋友們有所幫助!

在做數(shù)據(jù)的分庫(kù)分表時(shí),選擇合適分片規(guī)則是一件很重要的事情,如果分片規(guī)則選擇不合理,可能會(huì)導(dǎo)致以下兩種情況:

  • 數(shù)據(jù)分布不均衡,系統(tǒng)產(chǎn)生單點(diǎn)故障
  • 后期數(shù)據(jù)擴(kuò)容難

因此本文對(duì)常用數(shù)據(jù)分片規(guī)則進(jìn)行優(yōu)缺點(diǎn)以及適應(yīng)場(chǎng)景的介紹,希望對(duì)讀者朋友們有所幫助!

時(shí)間范圍分片

時(shí)間范圍分片要求分片鍵為時(shí)間類型字段,可以支持按年、按月、按日、按小時(shí)等范圍進(jìn)行數(shù)據(jù)分片

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

此分片規(guī)則在擴(kuò)容時(shí)只需要添加節(jié)點(diǎn),指定日期范圍,可以避免擴(kuò)容時(shí)的數(shù)據(jù)遷移

缺點(diǎn):

負(fù)載不均衡,容易導(dǎo)致單節(jié)點(diǎn)故障,假設(shè):2016.1->2016.6這個(gè)時(shí)間段(上圖DB2節(jié)點(diǎn)),公司在做產(chǎn)品推廣,那么這個(gè)時(shí)間段的數(shù)據(jù)量會(huì)比較大,會(huì)導(dǎo)致DB2節(jié)點(diǎn)負(fù)載會(huì)比較高,而節(jié)點(diǎn)負(fù)載又比較低。

適應(yīng)場(chǎng)景:

具有時(shí)間屬性的數(shù)據(jù),適合做范圍分片,比如日志數(shù)據(jù),前期查詢頻率比較高,可以按照季度或者月份進(jìn)行范圍分割,后期不需要直接把整個(gè)節(jié)點(diǎn)遷移走或者進(jìn)行數(shù)據(jù)清空,如下圖,假如DB1所在數(shù)據(jù)不需要,直接遷移走即可。

如下圖是一個(gè)數(shù)據(jù)擴(kuò)容示例,假設(shè)之前的分片規(guī)則規(guī)劃至2016年底,那么為了支持2017年的數(shù)據(jù),只需要增加對(duì)應(yīng)節(jié)點(diǎn)、并修改分片規(guī)則即可(DB4節(jié)點(diǎn)),不需要遷移原有數(shù)據(jù)

數(shù)值范圍分片

數(shù)值范圍分片與時(shí)間范圍分片類似,唯一不同就是每個(gè)分片數(shù)據(jù)量相對(duì)均衡,熱點(diǎn)數(shù)據(jù)存在但是相對(duì)較少。

比如時(shí)間范圍分片2016.1-2016.6為一個(gè)分片,在此分片上產(chǎn)生數(shù)據(jù)是不可控的,假如這個(gè)時(shí)間段公司不搞促銷,那么這個(gè)分片數(shù)據(jù)可能為1w條,如果搞可能為1千萬(wàn)。

但是數(shù)值范圍分片沒(méi)有此問(wèn)題,因?yàn)樵谠O(shè)置分片時(shí),已規(guī)定了每個(gè)分片的數(shù)據(jù)量,所以數(shù)據(jù)分布比較均衡。

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

  • 此分片規(guī)則在擴(kuò)容時(shí)只需要添加節(jié)點(diǎn),指定數(shù)值范圍,可以避免擴(kuò)容時(shí)的數(shù)據(jù)遷移。
  • 數(shù)據(jù)量可控,可以均衡,也可以不均衡。

缺點(diǎn):

無(wú)法解決熱點(diǎn)問(wèn)題,如果某一段數(shù)據(jù)訪問(wèn)QPS特別高,就會(huì)落到單節(jié)點(diǎn)上進(jìn)行操作。

適應(yīng)場(chǎng)景:

業(yè)務(wù)場(chǎng)景中熱點(diǎn)數(shù)據(jù)比較少的業(yè)務(wù)都可以使用,比如用戶系統(tǒng),以用戶ID進(jìn)行分片,用戶Id采用全局遞增模式。

取模分片

取模顧名思義就是對(duì)分片鍵值與對(duì)應(yīng)的節(jié)點(diǎn)數(shù)進(jìn)行取余,如下圖,假如分片鍵為6,節(jié)點(diǎn)數(shù)為3,那么6%3=0,那么此分片鍵應(yīng)該保存在DB1節(jié)點(diǎn)

取模分片擴(kuò)展又分為基礎(chǔ)分片和hash取模分片,具體如下:

  • 基礎(chǔ)分片要求分片鍵類型為數(shù)值型或者值中必須帶有數(shù)字,然后進(jìn)行截取取余計(jì)算。
  • hash取模分片不要求字段值中必須要有數(shù)字,因?yàn)椴还苁亲址€是其他值,需要先進(jìn)行hash計(jì)算,然后再進(jìn)行取模

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

節(jié)點(diǎn)負(fù)載均衡,假設(shè)key是按照全局遞增,每次保存數(shù)據(jù)時(shí)與節(jié)點(diǎn)數(shù)進(jìn)行取模,保存至對(duì)應(yīng)的節(jié)點(diǎn)。

缺點(diǎn):

在擴(kuò)容時(shí)需要全量遷移,因前期是按照規(guī)定的節(jié)點(diǎn)數(shù)取模存儲(chǔ)到各個(gè)節(jié)點(diǎn)的,如果后期新增節(jié)點(diǎn),導(dǎo)致老數(shù)據(jù)按照新的節(jié)點(diǎn)數(shù)取模無(wú)法匹配到對(duì)應(yīng)的節(jié)點(diǎn),如下圖:

因此所有的數(shù)據(jù)需要全部遷移重新分片,如下圖:

適應(yīng)場(chǎng)景:

適用于需要將數(shù)據(jù)均勻分布的場(chǎng)景,例如:銀行類客戶業(yè)務(wù)應(yīng)用,業(yè)務(wù)邏輯主體是客戶,可使用客戶對(duì)應(yīng)的表字段(例如客戶號(hào))作為拆分鍵

一致性hash分片

之前文章介紹過(guò)一致性hash分片各種特性,具體可查看一致性HASH算法,看這一篇就夠了,這里只做簡(jiǎn)單介紹

一致性哈希是指將「存儲(chǔ)節(jié)點(diǎn)」和「數(shù)據(jù)」都映射到一個(gè)首尾相連的哈希環(huán)上,增加或者移除一個(gè)節(jié)點(diǎn),只影響該節(jié)點(diǎn)在哈希環(huán)上順時(shí)針相鄰的后繼節(jié)點(diǎn),其它數(shù)據(jù)不會(huì)受到影響

但是一致性哈希算法不能夠均勻的分布節(jié)點(diǎn),會(huì)出現(xiàn)大量請(qǐng)求都集中在一個(gè)節(jié)點(diǎn)的情況,在這種情況下進(jìn)行容災(zāi)與擴(kuò)容時(shí),容易出現(xiàn)雪崩的連鎖反應(yīng),如下圖

因此需要增加虛擬節(jié)點(diǎn)來(lái)解決數(shù)據(jù)均衡分布的問(wèn)題,如下圖:

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

通過(guò)增加虛擬節(jié)點(diǎn)后數(shù)據(jù)分布相對(duì)均衡,節(jié)點(diǎn)不存在熱點(diǎn)問(wèn)題。

缺點(diǎn):

數(shù)據(jù)擴(kuò)容相對(duì)復(fù)雜,理論上一致性Hash在擴(kuò)容時(shí)只需要遷移相鄰節(jié)點(diǎn)部分?jǐn)?shù)據(jù)即可,但是為了保證節(jié)點(diǎn)的數(shù)據(jù)均衡,增加了虛擬節(jié)點(diǎn),導(dǎo)致相鄰過(guò)多,那么數(shù)據(jù)擴(kuò)容變得就沒(méi)那么簡(jiǎn)單,假設(shè)增加DB4節(jié)點(diǎn)的虛擬節(jié)點(diǎn)(紅色標(biāo)識(shí)),那么相鄰的DB1和DB3數(shù)據(jù)都需要遷移。

適應(yīng)場(chǎng)景:

適用于需要將數(shù)據(jù)均勻分布并且在擴(kuò)容時(shí)不需要大量遷移數(shù)據(jù)的場(chǎng)景。

責(zé)任編輯:趙寧寧 來(lái)源: 架構(gòu)成長(zhǎng)指南
相關(guān)推薦

2018-02-08 18:16:39

數(shù)據(jù)庫(kù)MySQL鎖定機(jī)制

2019-02-21 09:32:13

MQ中間件SQL

2020-07-09 10:21:03

網(wǎng)絡(luò)排錯(cuò)TCPIP

2020-09-18 10:18:08

MySQL數(shù)據(jù)插入數(shù)據(jù)庫(kù)

2023-04-06 11:10:31

閉包JavaScript

2022-05-27 07:49:14

RocketMQ消息中間件分布式

2017-11-27 06:01:37

數(shù)據(jù)庫(kù)中間件中間層

2017-12-01 05:04:32

數(shù)據(jù)庫(kù)中間件Atlas

2017-11-30 08:56:14

數(shù)據(jù)庫(kù)中間件架構(gòu)師

2017-11-27 05:06:42

數(shù)據(jù)庫(kù)中間件cobar

2017-11-27 05:36:16

數(shù)據(jù)庫(kù)中間件TDDL

2011-08-10 13:03:58

CJDBC數(shù)據(jù)庫(kù)集群

2018-02-24 19:37:33

Java8數(shù)據(jù)庫(kù)中間件

2017-07-12 16:56:42

卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)數(shù)據(jù)CNN

2017-07-05 15:42:58

卷積神經(jīng)網(wǎng)絡(luò)Non-Euclide計(jì)算機(jī)視覺(jué)

2019-01-08 07:43:53

路由器調(diào)制解調(diào)器

2017-05-23 18:55:05

mysql-proxy數(shù)據(jù)庫(kù)架構(gòu)

2018-10-24 16:25:24

數(shù)據(jù)庫(kù)MySQLxtraback

2017-12-11 13:30:49

Go語(yǔ)言數(shù)據(jù)庫(kù)中間件

2018-09-28 09:32:57

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)