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

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入探究數(shù)據(jù)庫分片技術,提高數(shù)據(jù)處理效率(數(shù)據(jù)庫分片)

在一個日益數(shù)字化、信息化的時代,數(shù)據(jù)處理效率是一個極為重要的任務。對于大型企業(yè)、互聯(lián)網(wǎng)公司等大規(guī)模數(shù)據(jù)處理的場景來說,傳統(tǒng)數(shù)據(jù)庫技術已經無法滿足處理效率的需求。因此,數(shù)據(jù)庫分片技術的出現(xiàn)成為提高數(shù)據(jù)處理效率的有效手段。本文從數(shù)據(jù)庫分片概念、優(yōu)勢與劣勢以及應用場景三個方面為大家深入探究數(shù)據(jù)庫分片技術。

專注于為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)泌陽免費做網(wǎng)站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉變。

一、數(shù)據(jù)庫分片的概念

數(shù)據(jù)庫分片是將一張表按照某種規(guī)則分散存儲在多個物理節(jié)點上的技術,每個節(jié)點稱為一個分片。根據(jù)分片規(guī)則,對于不同的數(shù)據(jù)進行分區(qū)存儲和處理。此時,不同的數(shù)據(jù)可以分散在不同的數(shù)據(jù)庫中,從而實現(xiàn)數(shù)據(jù)的擴展存儲。在實際應用中,數(shù)據(jù)分片一般指水平分片。即按照行進行數(shù)據(jù)分割,使每個數(shù)據(jù)節(jié)點只存儲部分數(shù)據(jù)。

二、優(yōu)勢與劣勢

數(shù)據(jù)庫分片技術可以帶來顯著的優(yōu)勢,主要體現(xiàn)在以下幾個方面:

1.提高性能:在高并發(fā)或者大規(guī)模數(shù)據(jù)情況下,使用數(shù)據(jù)庫分片技術可以提高系統(tǒng)的承載能力,減少單個節(jié)點的壓力,提高系統(tǒng)響應速度。

2.可擴展性:在系統(tǒng)面臨擴展的情況下,數(shù)據(jù)庫分片可以通過添加節(jié)點的方式進行水平擴展,無需對系統(tǒng)進行大規(guī)模的修改和改變。

3.增強可用性:由于數(shù)據(jù)經過分散存儲和處理,系統(tǒng)故障時只會影響部分數(shù)據(jù),其他節(jié)點的數(shù)據(jù)仍可被訪問,因此分片可以提高系統(tǒng)的可用性。

4.節(jié)約成本:使用數(shù)據(jù)庫分片技術可以為企業(yè)節(jié)約成本。由于分片技術可以實現(xiàn)擴展存儲,無需進行大規(guī)模的升級和更換,因此降低了企業(yè) IT 系統(tǒng)維護的成本。

然而,數(shù)據(jù)庫分片技術也存在一些劣勢。主要包括以下幾點:

1.數(shù)據(jù)一致性:由于不同節(jié)點存儲的數(shù)據(jù)不同,分片技術無法保證全局數(shù)據(jù)一致性,因此需要合理的設計分片規(guī)則,以避免數(shù)據(jù)不一致的問題。

2.分片規(guī)則設計:分片規(guī)則的設計需要考慮多個因素,比如數(shù)據(jù)量大小、性能瓶頸、負載均衡、數(shù)據(jù)分布規(guī)律等。因此,分片技術需要深入探究和合理的設計。

3.修改難度:當系統(tǒng)數(shù)據(jù)規(guī)模發(fā)生變化時,需要修改分片規(guī)則,對系統(tǒng)的影響程度較大,因此更換分片技術需要進行完整的數(shù)據(jù)遷移,難度較大。

三、應用場景

數(shù)據(jù)庫分片技術主要應用于大規(guī)模數(shù)據(jù)信息處理場景,如互聯(lián)網(wǎng)企業(yè)、金融、物聯(lián)網(wǎng)等領域。具體應用場景如下:

1.熱點數(shù)據(jù)處理:大型互聯(lián)網(wǎng)公司中經常需要處理熱點數(shù)據(jù),比如電商平臺的訂單數(shù)據(jù)。此時,可以根據(jù)優(yōu)先級將這些數(shù)據(jù)單獨分片存儲,以便快速查詢和計算。

2.數(shù)據(jù)擴展:企業(yè)高速發(fā)展的情況下,數(shù)據(jù)量增長迅速,此時可以使用數(shù)據(jù)庫分片技術進行水平擴展,以滿足更加快速和高效的數(shù)據(jù)處理能力。

3.分布式應用:分布式應用中,需要根據(jù)不同的分片規(guī)則實現(xiàn)數(shù)據(jù)的分散存儲,從而使分布式應用具有高擴展性、高并發(fā)性能。

4.全球數(shù)據(jù)中心:在全球化的領域,企業(yè)需要在不同的數(shù)據(jù)中心之間存儲和傳輸數(shù)據(jù)。此時,可以使用分片技術將數(shù)據(jù)存儲在不同的數(shù)據(jù)庫中,以便于處理和維護。

數(shù)據(jù)庫分片技術是一種重要的大規(guī)模數(shù)據(jù)處理方法,它可以提高數(shù)據(jù)處理效率,實現(xiàn)系統(tǒng)的高擴展性、高并發(fā)性能。但是,為了利用數(shù)據(jù)庫分片技術,需要合理的分片規(guī)則和數(shù)據(jù)一致性控制。在實際應用中,需要根據(jù)具體場景和需求進行靈活的選擇和設計。

成都網(wǎng)站建設公司-創(chuàng)新互聯(lián),建站經驗豐富以策略為先導10多年以來專注數(shù)字化網(wǎng)站建設,提供企業(yè)網(wǎng)站建設,高端網(wǎng)站設計,響應式網(wǎng)站制作,設計師量身打造品牌風格,熱線:028-86922220

數(shù)據(jù)庫為什么要分庫分表

一、NewSQL數(shù)據(jù)庫先進在哪兒?

首先關于“中間件+關系數(shù)據(jù)庫分庫分表”算不算NewSQL分布式數(shù)據(jù)庫問題,國外有篇論文pavlo-newsql-sigmodrec,如果根據(jù)該文中的分類,Spanner、TiDB、OB算是之一種新架構型,Sharding-Sphere、Mycat、DRDS等中間件方案算是第二種(文中還有第三種云數(shù)據(jù)庫,本文暫不詳細介紹)。

「pavlo-newsql-sigmodrec」 參考鏈接:

基于中間件(包括SDK和Proxy兩種形式)+傳統(tǒng)關系數(shù)據(jù)庫(分庫分表)模式是不是分布式架構?我覺得是的,因為存儲確實也分布式了,也能實現(xiàn)橫向擴展。但是不是“偽”分布式數(shù)據(jù)庫?從架構先進性來看,這么說也有一定道理。

“偽”主要體現(xiàn)在中間件層與底層DB重復的SQL解析與執(zhí)行計劃生成、存儲引擎基于B+Tree等,這在分布式數(shù)據(jù)庫架構中實際上冗余低效的。為了避免引起真?zhèn)畏植际綌?shù)據(jù)庫的口水戰(zhàn),本文中NewSQL數(shù)據(jù)庫特指這種新架構NewSQL數(shù)據(jù)庫。

NewSQL數(shù)據(jù)庫相比中間件+分庫分表的先進在哪兒?畫一個簡單的架構對比圖:

請點擊輸入圖片描述

傳統(tǒng)數(shù)據(jù)庫面向磁盤設計,基于內存的存儲管理及并發(fā)控制,不如NewSQL數(shù)據(jù)庫那般高效利用;

中間件模式SQL解析、執(zhí)行計劃優(yōu)化等在中間件與數(shù)據(jù)庫中重復工作,效率相比較低;

NewSQL數(shù)據(jù)庫的分布式事務相比于XA進行了優(yōu)化,性能更高;

新架構NewSQL數(shù)據(jù)庫存儲設計即為基于paxos(或Raft)協(xié)議的多副本,相比于傳統(tǒng)數(shù)據(jù)庫主從模式(半同步轉異步后也存在丟數(shù)問題),在實現(xiàn)了真正的高可用、高可靠(RTO

NewSQL數(shù)據(jù)庫天生支持數(shù)據(jù)分片,數(shù)據(jù)的遷移、擴容都是自動化的,大大減輕了DBA的工作,同時對應用透明,無需在SQL指定分庫分表鍵。

這些大多也是NewSQL數(shù)據(jù)庫產品主要宣傳的點,不過這些看起來很美好的功能是否真的如此?接下來針對以上幾點分別闡述下的我的理解。

二、分布式事務

這是把雙刃劍。

1、CAP限制想想更早些出現(xiàn)的NoSQL數(shù)據(jù)庫為何不支持分布式事務(最新版的MongoDB等也開始支持了),是缺乏理論與實踐支撐嗎?并不是,原因是CAP定理依然是分布式數(shù)據(jù)庫頭上的緊箍咒,在保證強一致的同時必然會犧牲可用性A或分區(qū)容忍性P。為什么大部分NoSQL不提供分布式事務?

《為什么大部分NoSQL不提供分布式事務?》

參考鏈接:

那么NewSQL數(shù)據(jù)庫突破CAP定理限制了嗎?并沒有。NewSQL數(shù)據(jù)庫的鼻祖Google Spanner(目前絕大部分分布式數(shù)據(jù)庫都是按照Spanner架構設計的)提供了一致性和大于5個9的可用性,宣稱是一個“實際上是CA”的,其真正的含義是系統(tǒng)處于CA狀態(tài)的概率非常高,由于網(wǎng)絡分區(qū)導致的服務停用的概率非常小,究其真正原因是其打造私有全球網(wǎng)保證了不會出現(xiàn)網(wǎng)絡中斷引發(fā)的網(wǎng)絡分區(qū),另外就是其高效的運維隊伍,這也是cloud spanner的賣點。詳細可見CAP提出者Eric Brewer寫的《Spanner, TrueTime和CAP理論》?!禨panner, TrueTime和CAP理論》

參考鏈接:

推薦一篇關于分布式系統(tǒng)有趣的文章《站在巨人的分布式肩膀上》,其中提到:分布式系統(tǒng)中,您可以知道工作在哪里,或者您可以知道工作何時完成,但您無法同時了解兩者;兩階段協(xié)議本質上是反可用性協(xié)議。

《站在巨人的分布式肩膀上》

參考鏈接:

2、完備性

兩階段提交協(xié)議是否嚴格支持ACID,各種異常場景是不是都可以覆蓋?

2PC在commit階段發(fā)送異常,其實跟更大努力一階段提交類似也會有部分可見問題,嚴格講一段時間內并不能保證A原子性和C一致性(待故障恢復后recovery機制可以保證最終的A和C)。完備的分布式事務支持并不是一件簡單的事情,需要可以應對網(wǎng)絡以及各種硬件包括網(wǎng)卡、磁盤、CPU、內存、電源等各類異常,通過嚴格的測試。

之前跟某友商交流,他們甚至說目前已知的NewSQL在分布式事務支持上都是不完整的,他們都有案例跑不過,圈內人士這么篤定,也說明了分布式事務的支持完整程度其實是層次不齊的。

但分布式事務又是這些NewSQL數(shù)據(jù)庫的一個非常重要的底層機制,跨資源的DML、DDL等都依賴其實現(xiàn),如果這塊的性能、完備性打折扣,上層跨分片SQL執(zhí)行的正確性會受到很大影響。

3、性能傳統(tǒng)關系數(shù)據(jù)庫也支持分布式事務XA,但為何很少有高并發(fā)場景下用呢?因為XA的基礎兩階段提交協(xié)議存在網(wǎng)絡開銷大,阻塞時間長、死鎖等問題,這也導致了其實際上很少大規(guī)模用在基于傳統(tǒng)關系數(shù)據(jù)庫的OLTP系統(tǒng)中。NewSQL數(shù)據(jù)庫的分布式事務實現(xiàn)也仍然多基于兩階段提交協(xié)議,例如google percolator分布式事務模型,采用原子鐘+MVCC+ Snapshot Isolation(SI),這種方式通過TSO(Timestamp Oracle)保證了全局一致性,通過MVCC避免了鎖,另外通過primary lock和secondary lock將提交的一部分轉為異步,相比XA確實提高了分布式事務的性能。SI是樂觀鎖,在熱點數(shù)據(jù)場景,可能會大量的提交失敗。另外SI的隔離級別與RR并非完全相同,它不會有幻想讀,但會有寫傾斜。但不管如何優(yōu)化,相比于1PC,2PC多出來的GID獲取、網(wǎng)絡開銷、prepare日志持久化還是會帶來很大的性能損失,尤其是跨節(jié)點的數(shù)量比較多時會更加顯著,例如在銀行場景做個批量扣款,一個文件可能上W個賬戶,這樣的場景無論怎么做還是吞吐都不會很高。

請點擊輸入圖片描述

請點擊輸入圖片描述

▲ Spanner給出的分布式事務測試數(shù)據(jù)

雖然NewSQL分布式數(shù)據(jù)庫產品都宣傳完備支持分布式事務,但這并不是說應用可以完全不用關心數(shù)據(jù)拆分,這些數(shù)據(jù)庫的更佳實踐中仍然會寫到,應用的大部分場景盡可能避免分布式事務。既然強一致事務付出的性能代價太大,我們可以反思下是否真的需要這種強一致的分布式事務?尤其是在做微服務拆分后,很多系統(tǒng)也不太可能放在一個統(tǒng)一的數(shù)據(jù)庫中。嘗試將一致性要求弱化,便是柔性事務,放棄ACID(Atomicity, Consistency, Isolation,  Durability),轉投BASE(Basically Available, Soft state, Eventually consistent),例如Saga、TCC、可靠消息保證最終一致等模型,對于大規(guī)模高并發(fā)OLTP場景,我個人更建議使用柔性事務而非強一致的分布式事務。關于柔性事務,筆者之前也寫過一個技術組件,最近幾年也涌現(xiàn)出了一些新的模型與框架(例如阿里剛開源的Fescar),限于篇幅不再贅述,詳細可閱讀《分布式事務選型的取舍》。解決分布式事務是否只能用兩階段提交協(xié)議?OceanBase 1.0中通過updateserver避免分布式事務的思路很有啟發(fā)性 ,不過2.0版后也變成了2PC。業(yè)界分布式事務也并非只有兩階段提交這一解。其它方案參考鏈接:its-time-to-move-on-from-two-phase翻譯版參考鏈接:

三、HA與異地多活

主從模式并不是更優(yōu)的方式,就算是半同步復制,在極端情況下(半同步轉異步)也存在丟數(shù)據(jù)問題,目前業(yè)界公認更好的方案是基于paxos分布式一致性協(xié)議或者其它類paxos如raft方式,Google Spanner、TiDB、CockcoachDB、OB都采用了這種方式,基于Paxos協(xié)議的多副本存儲,遵循過半寫原則,支持自動選主,解決了數(shù)據(jù)的高可靠,縮短了failover時間,提高了可用性,特別是減少了運維的工作量,這種方案技術上已經很成熟,也是NewSQL數(shù)據(jù)庫底層的標配。當然這種方式其實也可以用在傳統(tǒng)關系數(shù)據(jù)庫,阿里、微信團隊等也有將MySQL存儲改造支持paxos多副本的,MySQL也推出了官方版MySQL Group Cluster,預計不遠的未來主從模式可能就成為歷史了。分布式一致性算法本身并不難,但具體在工程實踐時,需要考慮很多異常并做很多優(yōu)化,實現(xiàn)一個生產級可靠成熟的一致性協(xié)議并不容易。例如實際使用時必須轉化實現(xiàn)為multi-paxos或multi-raft,需要通過batch、異步等方式減少網(wǎng)絡、磁盤IO等開銷。需要注意的是很多NewSQL數(shù)據(jù)庫廠商宣傳基于paxos或raft協(xié)議可以實現(xiàn)【異地多活】,這個實際上是有前提的,那就是異地之間網(wǎng)絡延遲不能太高。以銀行“兩地三中心”為例,異地之間多相隔數(shù)千里,延時達到數(shù)十毫秒,如果要多活,那便需異地副本也參與數(shù)據(jù)庫日志過半確認,這樣高的延時幾乎沒有OLTP系統(tǒng)可以接受的。數(shù)據(jù)庫層面做異地多活是個美好的愿景,但距離導致的延時目前并沒有好的方案。之前跟螞蟻團隊交流,螞蟻異地多活的方案是在應用層通過MQ同步雙寫交易信息,異地DC將交易信息保存在分布式緩存中,一旦發(fā)生異地切換,數(shù)據(jù)庫同步中間件會告之數(shù)據(jù)延遲時間,應用從緩存中讀取交易信息,將這段時間內涉及到的業(yè)務對象例如用戶、賬戶進行黑名單管理,等數(shù)據(jù)同步追上之后再將這些業(yè)務對象從黑名單中剔除。由于雙寫的不是所有數(shù)據(jù)庫操作日志而只是交易信息,數(shù)據(jù)延遲只影響一段時間內數(shù)據(jù),這是目前我覺得比較靠譜的異地度多活方案。另外有些系統(tǒng)進行了單元化改造,這在paxos選主時也要結合考慮進去,這也是目前很多NewSQL數(shù)據(jù)庫欠缺的功能。

四、Scale橫向擴展與分片機制

paxos算法解決了高可用、高可靠問題,并沒有解決Scale橫向擴展的問題,所以分片是必須支持的。NewSQL數(shù)據(jù)庫都是天生內置分片機制的,而且會根據(jù)每個分片的數(shù)據(jù)負載(磁盤使用率、寫入速度等)自動識別熱點,然后進行分片的分裂、數(shù)據(jù)遷移、合并,這些過程應用是無感知的,這省去了DBA的很多運維工作量。以TiDB為例,它將數(shù)據(jù)切成region,如果region到64M時,數(shù)據(jù)自動進行遷移。分庫分表模式下需要應用設計之初就要明確各表的拆分鍵、拆分方式(range、取模、一致性哈?;蛘咦远x路由表)、路由規(guī)則、拆分庫表數(shù)量、擴容方式等。相比NewSQL數(shù)據(jù)庫,這種模式給應用帶來了很大侵入和復雜度,這對大多數(shù)系統(tǒng)來說也是一大挑戰(zhàn)。分庫分表模式也能做到在線擴容,基本思路是通過異步復制先追加數(shù)據(jù),然后設置只讀完成路由切換,最后放開寫操作,當然這些需要中間件與數(shù)據(jù)庫端配合一起才能完成。這里有個問題是NewSQL數(shù)據(jù)庫統(tǒng)一的內置分片策略(例如TiDB基于range)可能并不是更高效的,因為與領域模型中的劃分要素并不一致,這導致的后果是很多交易會產生分布式事務。舉個例子,銀行核心業(yè)務系統(tǒng)是以客戶為維度,也就是說客戶表、該客戶的賬戶表、流水表在絕大部分場景下是一起寫的,但如果按照各表主鍵range進行分片,這個交易并不能在一個分片上完成,這在高頻OLTP系統(tǒng)中會帶來性能問題。

五、分布式SQL支持

常見的單分片SQL,這兩者都能很好支持。NewSQL數(shù)據(jù)庫由于定位與目標是一個通用的數(shù)據(jù)庫,所以支持的SQL會更完整,包括跨分片的join、聚合等復雜SQL。中間件模式多面向應用需求設計,不過大部分也支持帶拆分鍵SQL、庫表遍歷、單庫join、聚合、排序、分頁等。但對跨庫的join以及聚合支持就不夠了。NewSQL數(shù)據(jù)庫一般并不支持存儲過程、視圖、外鍵等功能,而中間件模式底層就是傳統(tǒng)關系數(shù)據(jù)庫,這些功能如果只是涉及單庫是比較容易支持的。NewSQL數(shù)據(jù)庫往往選擇兼容MySQL或者PostgreSQL協(xié)議,所以SQL支持僅局限于這兩種,中間件例如驅動模式往往只需做簡單的SQL解析、計算路由、SQL重寫,所以可以支持更多種類的數(shù)據(jù)庫SQL。SQL支持的差異主要在于分布式SQL執(zhí)行計劃生成器,由于NewSQL數(shù)據(jù)庫具有底層數(shù)據(jù)的分布、統(tǒng)計信息,因此可以做CBO,生成的執(zhí)行計劃效率更高,而中間件模式下沒有這些信息,往往只能基于規(guī)則RBO(Rule-Based-Opimization),這也是為什么中間件模式一般并不支持跨庫join,因為實現(xiàn)了效率也往往并不高,還不如交給應用去做。這里也可以看出中間件+分庫分表模式的架構風格體現(xiàn)出的是一種妥協(xié)、平衡,它是一個面向應用型的設計;而NewSQL數(shù)據(jù)庫則要求更高、“大包大攬”,它是一個通用底層技術軟件,因此后者的復雜度、技術門檻也高很多。

六、存儲引擎

傳統(tǒng)關系數(shù)據(jù)庫的存儲引擎設計都是面向磁盤的,大多都基于B+樹。B+樹通過降低樹的高度減少隨機讀、進而減少磁盤尋道次數(shù),提高讀的性能,但大量的隨機寫會導致樹的分裂,從而帶來隨機寫,導致寫性能下降。NewSQL的底層存儲引擎則多采用L,相比B+樹L將對磁盤的隨機寫變成順序寫,大大提高了寫的性能。不過L的的讀由于需要合并數(shù)據(jù)性能比B+樹差,一般來說L更適合應在寫大于讀的場景。當然這只是單純數(shù)據(jù)結構角度的對比,在數(shù)據(jù)庫實際實現(xiàn)時還會通過SSD、緩沖、bloom filter等方式優(yōu)化讀寫性能,所以讀性能基本不會下降太多。NewSQL數(shù)據(jù)由于多副本、分布式事務等開銷,相比單機關系數(shù)據(jù)庫SQL的響應時間并不占優(yōu),但由于集群的彈性擴展,整體QPS提升還是很明顯的,這也是NewSQL數(shù)據(jù)庫廠商說分布式數(shù)據(jù)庫更看重的是吞吐,而不是單筆SQL響應時間的原因。

七、成熟度與生態(tài)

分布式數(shù)據(jù)庫是個新型通用底層軟件,準確的衡量與評價需要一個多維度的測試模型,需包括發(fā)展現(xiàn)狀、使用情況、社區(qū)生態(tài)、監(jiān)控運維、周邊配套工具、功能滿足度、DBA人才、SQL兼容性、性能測試、高可用測試、在線擴容、分布式事務、隔離級別、在線DDL等等,雖然NewSQL數(shù)據(jù)庫發(fā)展經過了一定時間檢驗,但多集中在互聯(lián)網(wǎng)以及傳統(tǒng)企業(yè)非核心交易系統(tǒng)中,目前還處于快速迭代、規(guī)模使用不斷優(yōu)化完善的階段。相比而言,傳統(tǒng)關系數(shù)據(jù)庫則經過了多年的發(fā)展,通過完整的評測,在成熟度、功能、性能、周邊生態(tài)、風險把控、相關人才積累等多方面都具有明顯優(yōu)勢,同時對已建系統(tǒng)的兼容性也更好。對于互聯(lián)網(wǎng)公司,數(shù)據(jù)量的增長壓力以及追求新技術的基因會更傾向于嘗試NewSQL數(shù)據(jù)庫,不用再考慮庫表拆分、應用改造、擴容、事務一致性等問題怎么看都是非常吸引人的方案。對于傳統(tǒng)企業(yè)例如銀行這種風險意識較高的行業(yè)來說,NewSQL數(shù)據(jù)庫則可能在未來一段時間內仍處于探索、審慎試點的階段?;谥虚g件+分庫分表模式架構簡單,技術門檻更低,雖然沒有NewSQL數(shù)據(jù)庫功能全面,但大部分場景最核心的訴求也就是拆分后SQL的正確路由,而此功能中間件模式應對還是綽綽有余的,可以說在大多數(shù)OLTP場景是夠用的。限于篇幅,其它特性例如在線DDL、數(shù)據(jù)遷移、運維工具等特性就不在本文展開對比。

八、總結

如果看完以上內容,您還不知道選哪種模式,那么結合以下幾個問題,先思考下NewSQL數(shù)據(jù)庫解決的點對于自身是不是真正的痛點:

強一致事務是否必須在數(shù)據(jù)庫層解決?

數(shù)據(jù)的增長速度是否不可預估的?

擴容的頻率是否已超出了自身運維能力?

相比響應時間更看重吞吐?

是否必須做到對應用完全透明?

是否有熟悉NewSQL數(shù)據(jù)庫的DBA團隊?

如果以上有兩到三個是肯定的,那么你可以考慮用NewSQL數(shù)據(jù)庫了,雖然前期可能需要一定的學習成本,但它是數(shù)據(jù)庫的發(fā)展方向,未來收益也會更高,尤其是互聯(lián)網(wǎng)行業(yè),隨著數(shù)據(jù)量的突飛猛進,分庫分表帶來的痛苦會與日俱增。當然選擇NewSQL數(shù)據(jù)庫你也要做好承擔一定風險的準備。如果你還未做出抉擇,不妨再想想下面幾個問題:

最終一致性是否可以滿足實際場景?

數(shù)據(jù)未來幾年的總量是否可以預估?

擴容、DDL等操作是否有系統(tǒng)維護窗口?

對響應時間是否比吞吐更敏感?

是否需要兼容已有的關系數(shù)據(jù)庫系統(tǒng)?

是否已有傳統(tǒng)數(shù)據(jù)庫DBA人才的積累?

是否可容忍分庫分表對應用的侵入?

如果這些問題有多數(shù)是肯定的,那還是分庫分表吧。在軟件領域很少有完美的解決方案,NewSQL數(shù)據(jù)庫也不是數(shù)據(jù)分布式架構的銀彈。相比而言分庫分表是一個代價更低、風險更小的方案,它更大程度復用傳統(tǒng)關系數(shù)據(jù)庫生態(tài),通過中間件也可以滿足分庫分表后的絕大多數(shù)功能,定制化能力更強。在當前NewSQL數(shù)據(jù)庫還未完全成熟的階段,分庫分表可以說是一個上限低但下限高的方案,尤其傳統(tǒng)行業(yè)的核心系統(tǒng),如果你仍然打算把數(shù)據(jù)庫當做一個黑盒產品來用,踏踏實實用好分庫分表會被認為是個穩(wěn)妥的選擇。

1 基本思想之什么是分庫分表?

從字面上簡單理解,就是把原本存儲于一個庫的數(shù)據(jù)分塊存儲到多個庫上,把原本存儲于一個表的數(shù)據(jù)分塊存儲到多個表上。

2 基本思想之為什么要分庫分表?

數(shù)

據(jù)庫中的數(shù)據(jù)量不一定是可控的,在未進行分庫分表的情況下,隨著時間和業(yè)務的發(fā)展,庫中的表會越來越多,表中的數(shù)據(jù)量也會越來越大,相應地,數(shù)據(jù)操作,增

刪改查的開銷也會越來越大;另外,由于無法進行分布式式部署,而一臺服務器的資源(CPU、磁盤、內存、IO等)是有限的,最終數(shù)據(jù)庫所能承載的數(shù)據(jù)量、

數(shù)據(jù)處理能力都將遭遇瓶頸。

3 分庫分表的實施策略。

分庫分表有垂直切分和水平切分兩種。

3.1

何謂垂直切分,即將表按照功能模塊、關系密切程度劃分出來,部署到不同的庫上。例如,我們會建立定義數(shù)據(jù)庫workDB、商品數(shù)據(jù)庫payDB、用戶數(shù)據(jù)

庫userDB、日志數(shù)據(jù)庫logDB等,分別用于存儲項目數(shù)據(jù)定義表、商品定義表、用戶數(shù)據(jù)表、日志數(shù)據(jù)表等。

3.2

何謂水平切分,當一個表中的數(shù)據(jù)量過大時,我們可以把該表的數(shù)據(jù)按照某種規(guī)則,例如userID散列,進行劃分,然后存儲到多個結構相同的表,和不同的庫

上。例如,我們的userDB中的用戶數(shù)據(jù)表中,每一個表的數(shù)據(jù)量都很大,就可以把userDB切分為結構相同的多個userDB:part0DB、

part1DB等,再將userDB上的用戶數(shù)據(jù)表userTable,切分為很多userTable:userTable0、userTable1等,

然后將這些表按照一定的規(guī)則存儲到多個userDB上。

3.3 應該使用哪一種方式來實施數(shù)據(jù)庫分庫分表,這要看數(shù)據(jù)庫中數(shù)據(jù)量的瓶頸所在,并綜合項目的業(yè)務類型進行考慮。

如果數(shù)據(jù)庫是因為表太多而造成海量數(shù)據(jù),并且項目的各項業(yè)務邏輯劃分清晰、低耦合,那么規(guī)則簡單明了、容易實施的垂直切分必是首選。

如果數(shù)據(jù)庫中的表并不多,但單表的數(shù)據(jù)量很大、或數(shù)據(jù)熱度很高,這種情況之下就應該選擇水平切分,水平切分比垂直切分要復雜一些,它將原本邏輯上屬于一體

的數(shù)據(jù)進行了物理分割,除了在分割時要對分割的粒度做好評估,考慮數(shù)據(jù)平均和負載平均,后期也將對項目人員及應用程序產生額外的數(shù)據(jù)管理負擔。

在現(xiàn)實項目中,往往是這兩種情況兼而有之,這就需要做出權衡,甚至既需要垂直切分,又需要水平切分。我們的游戲項目便綜合使用了垂直與水平切分,我們首先對數(shù)據(jù)庫進行垂直切分,然后,再針對一部分表,通常是用戶數(shù)據(jù)表,進行水平切分。

4 分庫分表存在的問題。

4.1 事務問題。

在執(zhí)行分庫分表之后,由于數(shù)據(jù)存儲到了不同的庫上,數(shù)據(jù)庫事務管理出現(xiàn)了困難。如果依賴數(shù)據(jù)庫本身的分布式事務管理功能去執(zhí)行事務,將付出高昂的性能代價;如果由應用程序去協(xié)助控制,形成程序邏輯上的事務,又會造成編程方面的負擔。

4.2 跨庫跨表的join問題。

在執(zhí)行了分庫分表之后,難以避免會將原本邏輯關聯(lián)性很強的數(shù)據(jù)劃分到不同的表、不同的庫上,這時,表的關聯(lián)操作將受到限制,我們無法join位于不同分庫的表,也無法join分表粒度不同的表,結果原本一次查詢能夠完成的業(yè)務,可能需要多次查詢才能完成。

4.3 額外的數(shù)據(jù)管理負擔和數(shù)據(jù)運算壓力。

外的數(shù)據(jù)管理負擔,最顯而易見的就是數(shù)據(jù)的定位問題和數(shù)據(jù)的增刪改查的重復執(zhí)行問題,這些都可以通過應用程序解決,但必然引起額外的邏輯運算,例如,對于

一個記錄用戶成績的用戶數(shù)據(jù)表userTable,業(yè)務要求查出成績更好的100位,在進行分表之前,只需一個order

by語句就可以搞定,但是在進行分表之后,將需要n個order

by語句,分別查出每一個分表的前100名用戶數(shù)據(jù),然后再對這些數(shù)據(jù)進行合并計算,才能得出結果。

TiDB 社區(qū)(AskTUG)

樓上說的很對,傳統(tǒng)關系型數(shù)據(jù)當數(shù)據(jù)量達到一定程度,但是還存在一定要查詢的數(shù)據(jù),只能將數(shù)據(jù)拆分,要嘛就是引用其他數(shù)據(jù)庫來分擔 傳統(tǒng)數(shù)據(jù)庫的壓力,然而,數(shù)據(jù)的校驗和遷移又是一個很繁瑣很耗時耗力的工作

所以 TiDB 應運而生,完美解決傳統(tǒng)數(shù)據(jù)庫分庫分表的麻煩,具體看下官網(wǎng),

TiDB 官網(wǎng)

簡述分布式數(shù)據(jù)庫的模式結構

布式數(shù)據(jù)庫系統(tǒng)通常使用較小的計算機系統(tǒng),每臺計算機可單獨放在一個地方,每臺計算機中都有DBMS的一份完整拷貝副本,并具有自己局部的數(shù)據(jù)庫,位于不同地點的許多計算機通過網(wǎng)絡互相連接,共同組成一個完整的、全局的大型數(shù)據(jù)庫。

這種組織數(shù)據(jù)庫的方法克服了物理中心數(shù)據(jù)庫組織的弱點。首先,降低了數(shù)據(jù)傳送代價,因為大多數(shù)的對數(shù)據(jù)庫的訪問操作都是針對局部數(shù)據(jù)庫的,而不是對其他位置的數(shù)據(jù)庫訪問;其次,系統(tǒng)的可靠性提高了很多,因為當網(wǎng)絡出現(xiàn)故障時,仍然允許對局部數(shù)據(jù)庫的操作,而且一個位置的故障不影響其他位置的處理工作,只有當訪問出現(xiàn)故障位置的數(shù)據(jù)時,在某種程度上才受影響;第三,便于系統(tǒng)的擴充,增加一個新的局部數(shù)據(jù)庫,或在某個位置擴充一臺適當?shù)男⌒陀嬎銠C,都很容易實現(xiàn)。然而有些功能要付出更高的代價。例如,為了調配在幾個位置上的活動,事務管理的性能比在中心數(shù)據(jù)庫時花費更高,而且甚至抵消許多其他的優(yōu)點。

  分布式數(shù)據(jù)庫系統(tǒng)主要特點:

  · 多數(shù)處理就地完成;

  · 各地的計算機由數(shù)據(jù)通信網(wǎng)絡相聯(lián)系。

  · 克服了中心數(shù)據(jù)庫的弱點:降低了數(shù)據(jù)傳輸代價;

  · 提高了系統(tǒng)的可靠性,局部系統(tǒng)發(fā)生故障,其他部分還可繼續(xù)工作;

  · 各個數(shù)據(jù)庫的位置是透明的,方便系統(tǒng)的擴充;

  · 為了協(xié)調整個系統(tǒng)的事務活動,事務管理的性能花費高;

  數(shù)據(jù)分片

  類型:

 ?。?)水平分片:按一定的條件把全局關系的所有元組劃分成若干不相交的子集,每個子集為關系的一個片段。

 ?。?)垂直分片:把一個全局關系的屬性集分成若干子集,并在這些子集上作投影運算,每個投影稱為垂直分片。

 ?。?)導出分片:又稱為導出水平分片,即水平分片的條件不是本關系屬性的條件,而是其他關系屬性的條件。

 ?。?)混合分片:以上三種方法的混合。可以先水平分片再垂直分片,或先垂直分片再水平分片,或其他形式,但他們的結果是不相同的。

  條件:

 ?。?)完備性條件:必須把全局關系的所有數(shù)據(jù)映射到片段中,決不允許有屬于全局關系的數(shù)據(jù)卻不屬于它的任何一個片段。

 ?。?)可重構條件:必須保證能夠由同一個全局關系的各個片段來重建該全局關系。對于水平分片可用并操作重構全局關系;對于垂直分片可用聯(lián)接操作重構全局關系。

 ?。?)不相交條件:要求一個全局關系被分割后所得的各個數(shù)據(jù)片段互不重疊(對垂直分片的主鍵除外)。

  數(shù)據(jù)分配方式

 ?。?)集中式:所有數(shù)據(jù)片段都安排在同一個場地上。

  (2)分割式:所有數(shù)據(jù)只有一份,它被分割成若干邏輯片段,每個邏輯片段被指派在一個特定的場地上。

  (4)全復制式:數(shù)據(jù)在每個場地重復存儲。也就是每個場地上都有一個完整的數(shù)據(jù)副本。

 ?。?)混合式:這是一種介乎于分割式和全復制式之間的分配方式。

  目前分布式數(shù)據(jù)庫分配的設計,越來越多的采用尋找更優(yōu)解的算法,比如遺傳算法、退火機制等

  查詢優(yōu)化

  指在執(zhí)行分布式查詢時選擇查詢執(zhí)行計劃的方法和關系運算符的實現(xiàn)算法。根據(jù)系統(tǒng)環(huán)境的不同,查詢優(yōu)化所使用的算法也有所不同,通常分為遠程廣域網(wǎng)環(huán)境和高速局域網(wǎng)環(huán)境,其區(qū)別主要在網(wǎng)絡的帶寬。對于一元運算符可以采用集中式數(shù)據(jù)庫中的查詢優(yōu)化方法。而對于二元運算符,由于涉及場地間的數(shù)據(jù)傳輸,因此必須考慮通信代價。分布式查詢中常見的連接運算執(zhí)行策略包括:

  (1)半連接方法:利用半連接運算的轉換方法R∞S=(RμS)∞S。假設場地1和場地2上分別有關系R和關系S,首先在S上執(zhí)行連接屬性上的投影并將結果傳輸至場地1,在場地1上執(zhí)行關系R與投影的連接操作,再將結果傳輸至場地2與關系S執(zhí)行連接操作。這種方法能夠降低執(zhí)行連接運算時的網(wǎng)絡通信代價,主要適用于帶寬較低的遠程廣域網(wǎng)絡。

 ?。?)枚舉法方法:指枚舉關系運算符的物理執(zhí)行計劃,通過對比執(zhí)行計劃的代價選擇執(zhí)行算法的方法。其中,連接運算符的物理執(zhí)行計劃包括嵌套循環(huán)方法、哈希連接法和歸并連接法。枚舉法主要適用于以磁盤IO代價為主的高速局域網(wǎng)環(huán)境。

分布式數(shù)據(jù)庫系統(tǒng)是在集中式數(shù)據(jù)庫系統(tǒng)的基礎上發(fā)展來的。是數(shù)據(jù)庫技術與網(wǎng)絡技術結合的產物。  什么是分布式數(shù)據(jù)庫:   分布式數(shù)據(jù)庫系統(tǒng)是在集中式數(shù)據(jù)庫系統(tǒng)的基礎上發(fā)展來的。是數(shù)據(jù)庫技術與網(wǎng)絡技術結合的產物?! 》植际綌?shù)據(jù)庫系統(tǒng)有兩種:一種是物理上分布的,但邏輯上卻是集中的。這種分布式數(shù)據(jù)庫只適宜用途比較單一的、不大的單位或部門。另一種分布式數(shù)據(jù)庫系統(tǒng)在物理上和邏輯上都是分布的,也就是所謂聯(lián)邦式分布數(shù)據(jù)庫系統(tǒng)。由于組成聯(lián)邦的各個子數(shù)據(jù)庫系統(tǒng)是相對“自治”的,這種系統(tǒng)可以容納多種不同用途的、差異較大的數(shù)據(jù)庫,比較適宜于大范圍內數(shù)據(jù)庫的集成?! 》植际綌?shù)據(jù)庫系統(tǒng)(DDBS)包含分布式數(shù)據(jù)庫管理系統(tǒng)(DDBMS)和分布式數(shù)據(jù)庫(DDB)?! ≡诜植际綌?shù)據(jù)庫系統(tǒng)中,一個應用程序可以對數(shù)據(jù)庫進行透明操作,數(shù)據(jù)庫中的數(shù)據(jù)分別在不同的局部數(shù)據(jù)庫中存儲、由不同的DBMS進行管理、在不同的機器上運行、由不同的操作系統(tǒng)支持、被不同的通信網(wǎng)絡連接在一起?! ∫粋€分布式數(shù)據(jù)庫在邏輯上是一個統(tǒng)一的整體:即在用戶面前為單個邏輯數(shù)據(jù)庫,在物理上則是分別存儲在不同的物理節(jié)點上。一個應用程序通過網(wǎng)絡的連接可以訪問分布在不同地理位置的數(shù)據(jù)庫。它的分布性表現(xiàn)在數(shù)據(jù)庫中的數(shù)據(jù)不是存儲在同一場地。更確切地講,不存儲在同一計算機的存儲設備上。 這就是與集中式數(shù)據(jù)庫的區(qū)別。從用戶的角度看,一個分布式數(shù)據(jù)庫系統(tǒng)在邏輯上和集中式數(shù)據(jù)庫系統(tǒng)一樣,用戶可以在任何一個場地執(zhí)行全局應用。就好那些數(shù)據(jù)是存儲在同一臺計算機上,有單個數(shù)據(jù)庫管理系統(tǒng)(DBMS)管理一樣,用戶并沒有什么感覺不一樣?! 》植际綌?shù)據(jù)庫中每一個數(shù)據(jù)庫服務器合作地維護全局數(shù)據(jù)庫的一致性?! 》植际綌?shù)據(jù)庫系統(tǒng)是一個客戶/服務器體系結構。

數(shù)據(jù)庫 分片的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于數(shù)據(jù)庫 分片,深入探究數(shù)據(jù)庫分片技術,提高數(shù)據(jù)處理效率,數(shù)據(jù)庫為什么要分庫分表,簡述分布式數(shù)據(jù)庫的模式結構的信息別忘了在本站進行查找喔。

成都創(chuàng)新互聯(lián)科技有限公司,經過多年的不懈努力,公司現(xiàn)已經成為一家專業(yè)從事IT產品開發(fā)和營銷公司。廣泛應用于計算機網(wǎng)絡、設計、SEO優(yōu)化、關鍵詞排名等多種行業(yè)!


網(wǎng)頁標題:深入探究數(shù)據(jù)庫分片技術,提高數(shù)據(jù)處理效率(數(shù)據(jù)庫分片)
分享鏈接:http://m.5511xx.com/article/coiihpd.html