日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì):從設(shè)計(jì)原則到實(shí)際應(yīng)用(設(shè)計(jì)數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì))

近年來(lái),隨著數(shù)據(jù)領(lǐng)域的不斷發(fā)展和應(yīng)用的不斷擴(kuò)展,數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)已成為一個(gè)越來(lái)越重要的領(lǐng)域。而在數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)中,設(shè)計(jì)原則及其實(shí)際應(yīng)用更是至關(guān)重要,因?yàn)檎_的設(shè)計(jì)原則和實(shí)際應(yīng)用能夠保證數(shù)據(jù)庫(kù)的高效性和可靠性。在本文中,我們將從設(shè)計(jì)原則和實(shí)際應(yīng)用兩個(gè)方面來(lái)介紹數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)。

成都創(chuàng)新互聯(lián)公司主營(yíng)長(zhǎng)春網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開發(fā),長(zhǎng)春h5重慶小程序開發(fā)搭建,長(zhǎng)春網(wǎng)站營(yíng)銷推廣歡迎長(zhǎng)春等地區(qū)企業(yè)咨詢

一、設(shè)計(jì)原則

1. 數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)

數(shù)據(jù)庫(kù)的規(guī)范化設(shè)計(jì)是一種減少數(shù)據(jù)冗余、優(yōu)化數(shù)據(jù)結(jié)構(gòu)的方法,一般包括三個(gè)層次:之一層歸納式范式(1NF)、第二層第二范式(2NF)和第三層第三范式(3NF)。

2. 數(shù)據(jù)庫(kù)的冗余設(shè)計(jì)

數(shù)據(jù)庫(kù)的冗余設(shè)計(jì)是一種通過(guò)復(fù)制數(shù)據(jù)來(lái)提高讀取速度、減少數(shù)據(jù)庫(kù)訪問(wèn)量的方法。但是在冗余設(shè)計(jì)中必須要注意數(shù)據(jù)的一致性,否則數(shù)據(jù)的錯(cuò)誤會(huì)隨著冗余不斷擴(kuò)大。

3. 數(shù)據(jù)庫(kù)的分區(qū)設(shè)計(jì)

數(shù)據(jù)庫(kù)的分區(qū)設(shè)計(jì)是一種通過(guò)將數(shù)據(jù)庫(kù)分成多個(gè)分區(qū),減少數(shù)據(jù)庫(kù)訪問(wèn)并提高讀寫速度的方法。分區(qū)可以基于數(shù)據(jù)分布、數(shù)據(jù)定位、數(shù)據(jù)類型等多種方式進(jìn)行劃分,并可以靈活地添加、刪除分區(qū),以適應(yīng)動(dòng)態(tài)的業(yè)務(wù)需求。

4. 數(shù)據(jù)庫(kù)的索引設(shè)計(jì)

索引設(shè)計(jì)是一種通過(guò)索引來(lái)優(yōu)化數(shù)據(jù)庫(kù)搜索和查詢的方法。索引必須能夠正確地選擇索引列,并考慮索引的大小、文件結(jié)構(gòu)、索引更新等因素。

二、實(shí)際應(yīng)用

1. 數(shù)據(jù)庫(kù)的安全性

數(shù)據(jù)庫(kù)的安全性是設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)必須考慮的一項(xiàng)重要因素。數(shù)據(jù)庫(kù)安全性包括:訪問(wèn)控制、加密算法、安全存儲(chǔ)以及安全監(jiān)控等。

2. 數(shù)據(jù)庫(kù)的備份和恢復(fù)

數(shù)據(jù)庫(kù)的備份和恢復(fù)是一項(xiàng)極其重要的工作。備份可以建立數(shù)據(jù)恢復(fù)的保障,而恢復(fù)可以讓數(shù)據(jù)在發(fā)生災(zāi)害時(shí)能夠及時(shí)恢復(fù)。

3. 數(shù)據(jù)庫(kù)的性能優(yōu)化

數(shù)據(jù)庫(kù)的性能是一個(gè)評(píng)價(jià)數(shù)據(jù)庫(kù)質(zhì)量的重要指標(biāo)。合理的數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)可以更大程度地提高數(shù)據(jù)庫(kù)的性能,并通過(guò)對(duì)數(shù)據(jù)庫(kù)的性能進(jìn)行監(jiān)控和調(diào)優(yōu),保證數(shù)據(jù)庫(kù)的穩(wěn)定性和高效性。

結(jié)語(yǔ)

在數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)中,設(shè)計(jì)原則和實(shí)際應(yīng)用是相輔相成的。設(shè)計(jì)原則的正確使用能夠確保數(shù)據(jù)庫(kù)的高效性和可靠性,而實(shí)際應(yīng)用則能夠能夠保證數(shù)據(jù)庫(kù)的實(shí)際運(yùn)用效果。同時(shí),對(duì)于不同類型的應(yīng)用場(chǎng)景,數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)也需要不斷地去適應(yīng)和調(diào)整,以應(yīng)對(duì)不斷變化的業(yè)務(wù)需求。

相關(guān)問(wèn)題拓展閱讀:

  • 寫入mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)量很大,數(shù)據(jù)庫(kù)架構(gòu)該怎么去設(shè)計(jì)?
  • 數(shù)據(jù)庫(kù)架構(gòu)選型與落地,看這篇就夠了

寫入mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)量很大,數(shù)據(jù)庫(kù)架構(gòu)該怎么去設(shè)計(jì)?

1.設(shè)置讀寫分離

2.進(jìn)行分庫(kù)分表,用中間件路由,分?jǐn)偭髁?/p>

3.可以先寫入mq,然后慢慢寫入

4.可以使用tidb,tps很高

數(shù)據(jù)庫(kù)架構(gòu)選型與落地,看這篇就夠了

隨著時(shí)間和業(yè)務(wù)的發(fā)展,數(shù)據(jù)庫(kù)中的數(shù)據(jù)量增長(zhǎng)是不可控的,庫(kù)和表中的數(shù)據(jù)會(huì)越來(lái)越大,隨之帶來(lái)的是更高的

磁盤

、

IO

系統(tǒng)開銷

,甚至

性能

上的瓶頸,而單臺(tái)服務(wù)器的

資源終究是有限

的。

因此在面對(duì)業(yè)務(wù)擴(kuò)張過(guò)程中,應(yīng)用程序?qū)?shù)據(jù)庫(kù)系統(tǒng)的

健壯性

,

安全性

,

擴(kuò)展性

提出了更高的要求。

以下,我從數(shù)據(jù)庫(kù)架構(gòu)、選型與落地來(lái)讓大家入門。

數(shù)據(jù)庫(kù)會(huì)面臨什么樣的挑戰(zhàn)呢?

業(yè)務(wù)剛開始我們只用單機(jī)數(shù)據(jù)庫(kù)就夠了,但隨著業(yè)務(wù)增長(zhǎng),數(shù)據(jù)規(guī)模和用戶規(guī)模上升,這個(gè)時(shí)候數(shù)據(jù)庫(kù)會(huì)面臨IO瓶頸、存儲(chǔ)瓶頸、可用性、安全性問(wèn)題。

為了解決上述的各種問(wèn)題,數(shù)據(jù)庫(kù)衍生了出不同的架構(gòu)來(lái)解決不同的場(chǎng)景需求。

將數(shù)據(jù)庫(kù)的寫操作和讀操作分離,主庫(kù)接收寫請(qǐng)求,使用多個(gè)從庫(kù)副本負(fù)責(zé)讀請(qǐng)求,從庫(kù)和主庫(kù)同步更新數(shù)據(jù)保持?jǐn)?shù)據(jù)一致性,從庫(kù)可以水平擴(kuò)展,用于面對(duì)讀請(qǐng)求的增加。

這個(gè)模式也就是常說(shuō)的讀寫分離,針對(duì)的是小規(guī)模數(shù)據(jù),而且存在大量讀操作的場(chǎng)景。

因?yàn)橹鲝牡臄?shù)據(jù)是相同的,一旦主庫(kù)宕機(jī)的時(shí)候,從庫(kù)可以

切換為主庫(kù)提供寫入

,所以這個(gè)架構(gòu)也可以提高數(shù)據(jù)庫(kù)系統(tǒng)的

安全性

可用性

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

缺點(diǎn):

在數(shù)據(jù)庫(kù)遇到

IO瓶頸

過(guò)程中,如果IO集中在某一塊的業(yè)務(wù)中,這個(gè)時(shí)候可以考慮的就是垂直分庫(kù),將熱點(diǎn)業(yè)務(wù)拆分出去,避免由

熱點(diǎn)業(yè)務(wù)

密集IO請(qǐng)求

影響了其他正常業(yè)務(wù),所以垂直分庫(kù)也叫

業(yè)務(wù)分庫(kù)

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

缺點(diǎn):

在數(shù)據(jù)庫(kù)遇到存儲(chǔ)瓶頸的時(shí)候,由于數(shù)據(jù)量過(guò)大造成索引性能下降。

這個(gè)時(shí)候可以考慮將數(shù)據(jù)做水平拆分,針對(duì)數(shù)據(jù)量巨大的單張表,按照某種規(guī)則,切分到多張表里面去。

但是這些表還是在同一個(gè)庫(kù)中,所以庫(kù)級(jí)別的數(shù)據(jù)庫(kù)操作還是有IO瓶頸(單個(gè)服務(wù)器的IO有上限)。

所以水平分嘩槐尺表主要還是針對(duì)

數(shù)據(jù)量較大

,整體業(yè)務(wù)

請(qǐng)求量較低

的場(chǎng)景。

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

缺點(diǎn):

四、分庫(kù)分表

在數(shù)據(jù)庫(kù)遇到存儲(chǔ)瓶頸和IO瓶頸的時(shí)候,數(shù)據(jù)量過(guò)大造成索引性能下降,加上同一時(shí)間需要處理大規(guī)模的業(yè)務(wù)請(qǐng)求,這個(gè)時(shí)候單庫(kù)的IO上限會(huì)限制處理效率。

所以需要將單張表的數(shù)據(jù)切分到多個(gè)服務(wù)器上去,每個(gè)服務(wù)器具有相應(yīng)的庫(kù)與表,只是表中數(shù)據(jù)不同。

分庫(kù)分表能夠有效地緩解單機(jī)和單庫(kù)的

性能瓶頸和壓力

,突破IO、連接數(shù)、硬件資源等的瓶頸。

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

缺點(diǎn):

注:分庫(kù)還是分表核心關(guān)鍵是有沒有IO瓶頸

。

分片方式都有什么呢?

RANGE(范圍分片)

將業(yè)務(wù)表中的某個(gè)

關(guān)鍵字段排序

后,按照順序從0到10000一個(gè)表,10001到20230一個(gè)表。最常見的就是

按照時(shí)間切分

(月表、年表)。

比如將6個(gè)月前,甚至一年前的數(shù)據(jù)切出去放到另外的一張表,因?yàn)殡S著時(shí)間流明睜逝,這些表的數(shù)據(jù)被查詢的概率變小,銀行的交易記錄多數(shù)是采用這種方式。

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

缺點(diǎn):

HASH(哈希分片)

將訂單作為主表,然后將其相關(guān)的業(yè)務(wù)表作為附表,取用戶id然后

hash取模

,分配到不同的數(shù)據(jù)表或者數(shù)據(jù)庫(kù)上。

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

缺點(diǎn):

講到這里,我們已經(jīng)知道數(shù)據(jù)庫(kù)有哪些架構(gòu),解決的是哪些問(wèn)題,因此,

我們?cè)谌粘TO(shè)計(jì)中需要根據(jù)數(shù)據(jù)的特點(diǎn),數(shù)據(jù)的傾向性,數(shù)據(jù)的安全性等來(lái)選擇不同的架構(gòu)

。

那么,我們應(yīng)該如何選擇數(shù)據(jù)庫(kù)架構(gòu)呢?

雖然把上面的架構(gòu)全部組合在一起可以形成一個(gè)強(qiáng)大的高可用,高負(fù)載的數(shù)據(jù)庫(kù)系統(tǒng),但是架構(gòu)選擇合適才是最重要的。

混合架構(gòu)雖然能夠解決所有的場(chǎng)景的問(wèn)題,但是也會(huì)面臨更多的挑戰(zhàn),你以為的完美架構(gòu),背后其實(shí)有著更多的坑。

1、對(duì)事務(wù)支持

分庫(kù)分表后(無(wú)論是垂直還是水平拆分亂高),就成了分布式事務(wù)了,如果依賴數(shù)據(jù)庫(kù)本身的分布式事務(wù)管理功能去執(zhí)行事務(wù),將付出高昂的性能代價(jià)(XA事務(wù));如果由應(yīng)用程序去協(xié)助控制,形成程序邏輯上的事務(wù),又會(huì)造成編程方面的負(fù)擔(dān)(TCC、SAGA)。

2、多庫(kù)結(jié)果并

(group by,order by)

由于數(shù)據(jù)分布于不同的數(shù)據(jù)庫(kù)中,無(wú)法直接對(duì)其做分頁(yè)、分組、排序等操作,一般應(yīng)對(duì)這種多庫(kù)結(jié)果并的查詢業(yè)務(wù)都需要采用數(shù)據(jù)清洗、同步等其他手段處理(TIDB、KUDU等)。

3、數(shù)據(jù)延遲

主從架構(gòu)下的多副本機(jī)制和水平分庫(kù)后的聚合庫(kù)都會(huì)存在主數(shù)據(jù)和副本數(shù)據(jù)之間的延遲問(wèn)題。

4、跨庫(kù)join

分庫(kù)分表后表之間的關(guān)聯(lián)操作將受到限制,我們無(wú)法join位于不同分庫(kù)的表(垂直),也無(wú)法join分表粒度不同的表(水平), 結(jié)果原本一次查詢就能夠完成的業(yè)務(wù),可能需要多次查詢才能完成。

5、分片擴(kuò)容

水平分片之后,一旦需要做擴(kuò)容時(shí)。需要將對(duì)應(yīng)的數(shù)據(jù)做一次遷移,成本代價(jià)都極高的。

6、ID生成

分庫(kù)分表后由于數(shù)據(jù)庫(kù)獨(dú)立,原有的基于數(shù)據(jù)庫(kù)自增ID將無(wú)法再使用,這個(gè)時(shí)候需要采用其他外部的ID生成方案。

一、應(yīng)用層依賴類(JDBC)

這類分庫(kù)分表中間件的特點(diǎn)就是和應(yīng)用強(qiáng)耦合,需要應(yīng)用顯示依賴相應(yīng)的jar包(以Java為例),比如老牌的TDDL、當(dāng)當(dāng)開源的

sharding-jdbc

、蘑菇街的TSharding等。

此類中間件的基本思路就是重新實(shí)現(xiàn)JDBC的API,通過(guò)重新實(shí)現(xiàn)

DataSource

PrepareStatement

等操作數(shù)據(jù)庫(kù)的接口,讓應(yīng)用層在

基本

不改變業(yè)務(wù)代碼的情況下透明地實(shí)現(xiàn)分庫(kù)分表的能力。

中間件給上層應(yīng)用提供熟悉的JDBC API,內(nèi)部通過(guò)

sql解析

、

sql重寫

、

sql路由

等一系列的準(zhǔn)備工作獲取真正可執(zhí)行的sql,然后底層再按照傳統(tǒng)的方法(比如數(shù)據(jù)庫(kù)連接池)獲取物理連接來(lái)執(zhí)行sql,最后把數(shù)據(jù)

結(jié)果合并

處理成ResultSet返回給應(yīng)用層。

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

缺點(diǎn)

二、中間層代理類(Proxy)

這類分庫(kù)分表中間件的核心原理是在應(yīng)用和數(shù)據(jù)庫(kù)的連接之間搭起一個(gè)

代理層

,上層應(yīng)用以

標(biāo)準(zhǔn)的MySQL協(xié)議

來(lái)連接代理層,然后代理層負(fù)責(zé)

轉(zhuǎn)發(fā)請(qǐng)求

到底層的MySQL物理實(shí)例,這種方式對(duì)應(yīng)用只有一個(gè)要求,就是只要用MySQL協(xié)議來(lái)通信即可。

所以用MySQL Navicat這種純的客戶端都可以直接連接你的分布式數(shù)據(jù)庫(kù),自然也天然

支持所有的編程語(yǔ)言

。

在技術(shù)實(shí)現(xiàn)上除了和應(yīng)用層依賴類中間件基本相似外,代理類的分庫(kù)分表產(chǎn)品必須實(shí)現(xiàn)標(biāo)準(zhǔn)的MySQL協(xié)議,某種意義上講數(shù)據(jù)庫(kù)代理層轉(zhuǎn)發(fā)的就是MySQL協(xié)議請(qǐng)求,就像Nginx轉(zhuǎn)發(fā)的是Http協(xié)議請(qǐng)求。

比較有代表性的產(chǎn)品有開創(chuàng)性質(zhì)的Amoeba、阿里開源的Cobar、社區(qū)發(fā)展比較好的

Mycat

(基于Cobar開發(fā))等。

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

缺點(diǎn)

JDBC方案

:無(wú)中心化架構(gòu),兼容市面上大多數(shù)關(guān)系型數(shù)據(jù)庫(kù),適用于開發(fā)高性能的輕量級(jí) OLTP 應(yīng)用(面向前臺(tái))。

Proxy方案

:提供靜態(tài)入口以及異構(gòu)語(yǔ)言的支持,適用于 OLAP 應(yīng)用(面向后臺(tái))以及對(duì)分片數(shù)據(jù)庫(kù)進(jìn)行管理和運(yùn)維的場(chǎng)景。

混合方案

:在大型復(fù)雜系統(tǒng)中存在面向C端用戶的前臺(tái)應(yīng)用,也有面向企業(yè)分析的后臺(tái)應(yīng)用,這個(gè)時(shí)候就可以采用混合模式。

JDBC 采用無(wú)中心化架構(gòu),適用于 Java 開發(fā)的高性能的輕量級(jí) OLTP 應(yīng)用;Proxy 提供靜態(tài)入口以及異構(gòu)語(yǔ)言的支持,適用于 OLAP 應(yīng)用以及對(duì)分片數(shù)據(jù)庫(kù)進(jìn)行管理和運(yùn)維的場(chǎng)景。

ShardingSphere是一套開源的分布式數(shù)據(jù)庫(kù)中間件解決方案組成的生態(tài)圈,它由

Sharding-JDBC

、

Sharding-Proxy

Sharding-Sidecar

(計(jì)劃中)這3款相互獨(dú)立的產(chǎn)品組成,他們均提供標(biāo)準(zhǔn)化的數(shù)據(jù)分片、分布式事務(wù)和數(shù)據(jù)庫(kù)治理功能,可適用于如Java同構(gòu)、異構(gòu)語(yǔ)言、容器、云原生等各種多樣化的應(yīng)用場(chǎng)景。

ShardingSphere提供的核心功能:

Sharding-Proxy

定位為透明化的

數(shù)據(jù)庫(kù)代理端

,提供封裝了

數(shù)據(jù)庫(kù)二進(jìn)制協(xié)議的服務(wù)端版本

,用于完成對(duì)

異構(gòu)語(yǔ)言的支持

目前已提供MySQL版本,它可以使用

任何兼容MySQL協(xié)議的訪問(wèn)客戶端

(如:MySQL Command Client, MySQL Workbench, Navicat等)操作數(shù)據(jù),對(duì)DBA更加友好。

應(yīng)用程序完全透明

,可直接當(dāng)做MySQL使用。

適用于任何兼容MySQL協(xié)議的客戶端。

Sharding-JDBC

定位為

輕量級(jí)Java框架

,在Java的JDBC層提供的額外服務(wù)。 它使用客戶端直連數(shù)據(jù)庫(kù),以jar包形式提供服務(wù),無(wú)需額外部署和依賴,可理解為

增強(qiáng)版的JDBC驅(qū)動(dòng),完全兼容JDBC和各種ORM框架

以電商SaaS系統(tǒng)為例,前臺(tái)應(yīng)用采用Sharding-JDBC,根據(jù)業(yè)務(wù)場(chǎng)景的差異主要分為三種方案。

分庫(kù)(用戶)

問(wèn)題解析:頭部企業(yè)日活高并發(fā)高,單獨(dú)分庫(kù)避免干擾其他企業(yè)用戶,用戶數(shù)據(jù)的增長(zhǎng)緩慢可以不分表。

拆分維度:企業(yè)ID分庫(kù)

拆分策略:頭部企業(yè)單獨(dú)庫(kù)、非頭部企業(yè)一個(gè)庫(kù)

分庫(kù)分表(訂單)

問(wèn)題解析:訂單數(shù)據(jù)增長(zhǎng)速度較快,在分庫(kù)之余需要分表。

拆分維度:企業(yè)ID分庫(kù)、用戶ID分表

拆分策略:頭部企業(yè)單獨(dú)庫(kù)、非頭部企業(yè)一個(gè)庫(kù),分庫(kù)之后用戶ID取模拆分表

單庫(kù)分表(附件)

問(wèn)題解析:附件數(shù)據(jù)特點(diǎn)是并發(fā)量不大,只需要解決數(shù)據(jù)增長(zhǎng)問(wèn)題,所以單庫(kù)IO足以支撐的情況下分表即可。

拆分維度:用戶ID分表

拆分策略:用戶ID取模分表

問(wèn)題一:分布式事務(wù)

分布式事務(wù)過(guò)于復(fù)雜也是分布式系統(tǒng)最難處理的問(wèn)題,由于篇幅有限,后續(xù)會(huì)開篇專講這一塊內(nèi)容。

問(wèn)題二:分布式ID

問(wèn)題三:跨片查詢

舉個(gè)例子,以用戶id分片之后,需要根據(jù)企業(yè)id查詢企業(yè)所有用戶信息。

sharding針對(duì)跨片查詢也是能夠支持的,本質(zhì)上sharding的跨片查詢是采用同時(shí)查詢多個(gè)分片的數(shù)據(jù),然后聚合結(jié)果返回,這個(gè)方式對(duì)資源耗費(fèi)比較大,特別是對(duì)數(shù)據(jù)庫(kù)連接資源的消耗。

假設(shè)分4個(gè)數(shù)據(jù)庫(kù),8個(gè)表,則sharding會(huì)同時(shí)發(fā)出32個(gè)SQL去查詢。一下子消耗掉了32個(gè)連接;

特別是針對(duì)單庫(kù)分表的情況要注意,假設(shè)單庫(kù)分64個(gè)表,則要消耗64個(gè)連接。如果我們部署了2個(gè)節(jié)點(diǎn),這個(gè)時(shí)候兩個(gè)節(jié)點(diǎn)同時(shí)查詢的話,就會(huì)遇到數(shù)據(jù)庫(kù)連接數(shù)上限問(wèn)題(mysql默認(rèn)100連接數(shù))

問(wèn)題四:分片擴(kuò)容

隨著數(shù)據(jù)增長(zhǎng),每個(gè)片區(qū)的數(shù)據(jù)也會(huì)達(dá)到瓶頸,這個(gè)時(shí)候需要將原有的分片數(shù)量進(jìn)行增加。由于增加了片區(qū),原先的hash規(guī)則也跟著變化,造成了需要將舊數(shù)據(jù)做遷移。

假設(shè)原先1個(gè)億的數(shù)據(jù),hash分64個(gè)表,現(xiàn)在增長(zhǎng)到50億的數(shù)據(jù),需要擴(kuò)容到128個(gè)表,一旦擴(kuò)容就需要將這50億的數(shù)據(jù)做一次遷移,遷移成本是無(wú)法想象的。

問(wèn)題五:一致性哈希

首先,求出每個(gè)

服務(wù)器的hash值

,將其配置到一個(gè)

0~2^n 的圓環(huán)上

(n通常取32)

其次,用同樣的方法求出待

存儲(chǔ)對(duì)象的主鍵 hash值

,也將其配置到這個(gè)圓環(huán)上。

然后,從數(shù)據(jù)映射到的位置開始順時(shí)針查找,將數(shù)據(jù)分布到找到的之一個(gè)服務(wù)器節(jié)點(diǎn)上。

一致性hash的優(yōu)點(diǎn)在于加入和刪除節(jié)點(diǎn)時(shí)只會(huì)影響到在哈希環(huán)中相鄰的節(jié)點(diǎn),而對(duì)其他節(jié)點(diǎn)沒有影響。

所以使用一致性哈希在集群擴(kuò)容過(guò)程中可以減少數(shù)據(jù)的遷移。

好了,這次分享到這里,我們?nèi)粘5膶?shí)踐可能只會(huì)用到其中一種方案,但它不是數(shù)據(jù)庫(kù)架構(gòu)的全貌,打開技術(shù)視野,才能更好地把存儲(chǔ)工具利用起來(lái)。

老規(guī)矩,一鍵三連,日入兩千,點(diǎn)贊在看,年薪百萬(wàn)!

本文作者:Jensen

7年Java老兵,小米主題設(shè)計(jì)師,手機(jī)輸入法設(shè)計(jì)師,ProcessOn特邀講師。

曾涉獵航空、電信、IoT、垂直電商產(chǎn)品研發(fā),現(xiàn)就職于某老牌電商企業(yè)。

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

【架構(gòu)師修行錄】

號(hào)主,專注于分享日常架構(gòu)、技術(shù)、職場(chǎng)干貨,Java Goals:架構(gòu)師。

交個(gè)朋友,一起成長(zhǎng)!

設(shè)計(jì)數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于設(shè)計(jì)數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì),數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì):從設(shè)計(jì)原則到實(shí)際應(yīng)用,寫入mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)量很大,數(shù)據(jù)庫(kù)架構(gòu)該怎么去設(shè)計(jì)?,數(shù)據(jù)庫(kù)架構(gòu)選型與落地,看這篇就夠了的信息別忘了在本站進(jìn)行查找喔。

創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。


文章題目:數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì):從設(shè)計(jì)原則到實(shí)際應(yīng)用(設(shè)計(jì)數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì))
文章分享:http://www.5511xx.com/article/djsgsie.html