官术网_书友最值得收藏!

1.5.1 分布式存儲(chǔ)概念

分布式存儲(chǔ)系統(tǒng)通常指的是有多個(gè)用于存儲(chǔ)信息的節(jié)點(diǎn)的計(jì)算機(jī)網(wǎng)絡(luò),而且對(duì)于絕大多數(shù)分布式存儲(chǔ)系統(tǒng)來(lái)說(shuō),它們都會(huì)原生支持節(jié)點(diǎn)之間的數(shù)據(jù)復(fù)制和同步。一般來(lái)說(shuō),如果用戶的數(shù)據(jù)是存儲(chǔ)在多個(gè)節(jié)點(diǎn)或?qū)Φ染W(wǎng)絡(luò)節(jié)點(diǎn)中,其中對(duì)等網(wǎng)絡(luò)節(jié)點(diǎn)指的是在網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中,各個(gè)節(jié)點(diǎn)地位相同,沒(méi)有主從關(guān)系,則把這類系統(tǒng)稱為分布式存儲(chǔ)系統(tǒng)。

考慮到分布式存儲(chǔ)系統(tǒng)的多節(jié)點(diǎn)存儲(chǔ)特性,就不得不思考如何才能高效地訪問(wèn)大批量節(jié)點(diǎn)的數(shù)據(jù)。因此,絕大多數(shù)分布式存儲(chǔ)系統(tǒng)都是非關(guān)系型數(shù)據(jù)庫(kù)。當(dāng)然,凡事都有例外,像Oracle Clusterware、MySQL的Sharding集群方案,也能解決一定程度上的分布式存儲(chǔ)需求。

提示 Oracle Clusterware是一款能讓多個(gè)服務(wù)器協(xié)同工作(作為一套系統(tǒng))的可移植的集群軟件。該軟件首次由Oracle 10g Release 1提供,其初衷是實(shí)現(xiàn)一套Oracle多點(diǎn)數(shù)據(jù)庫(kù)的集群技術(shù),基于Oracle的Real Application Clusters(RAC)技術(shù)。

MySQL Sharding與普通的集群負(fù)載均衡方案不同。完整的集群方案中,分布式系統(tǒng)會(huì)自動(dòng)幫助用戶完成負(fù)載均衡等工作,幫助用戶建立分布式索引與緩存等。但是早期的MySQL并不支持這種高級(jí)特性,MySQL中,用戶需要手動(dòng)將自己的關(guān)系數(shù)據(jù)根據(jù)表格切分到不同的數(shù)據(jù)庫(kù)或者主機(jī)中,比起完整的集群解決方案,這種方式是較為復(fù)雜的。

對(duì)于分布式存儲(chǔ)系統(tǒng)來(lái)說(shuō),最重要的問(wèn)題是如何確保在眾多節(jié)點(diǎn)中保持?jǐn)?shù)據(jù)的一致性、容錯(cuò)性、數(shù)據(jù)可恢復(fù)能力和負(fù)載均衡。一般來(lái)說(shuō),為了確保每個(gè)節(jié)點(diǎn)訪問(wèn)的負(fù)載保持在一個(gè)水平上,我們還要考慮數(shù)據(jù)的分布問(wèn)題,采用什么方法確保數(shù)據(jù)分布的均勻性,除了數(shù)據(jù)均勻,我們還要考慮數(shù)據(jù)訪問(wèn)的頻率等因素,這樣才能確保節(jié)點(diǎn)負(fù)載和訪問(wèn)頻率保持相對(duì)均衡,例如,在Apache Cassandra中,就使用Partition Key作為數(shù)據(jù)分布存儲(chǔ)的依據(jù)之一對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)。另外,對(duì)于數(shù)據(jù)寫入的事務(wù)性也是需要確保的,這是傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)必備的功能之一,但在分布式系統(tǒng)中的實(shí)現(xiàn)方法會(huì)很不一樣。事務(wù)性不僅僅是分布式存儲(chǔ)系統(tǒng)所需的特性之一,對(duì)于分布式實(shí)時(shí)處理系統(tǒng)來(lái)說(shuō),操作的事務(wù)性同樣重要,在后續(xù)章節(jié)中將會(huì)介紹實(shí)時(shí)數(shù)據(jù)處理的事務(wù)功能。

提示 Cassandra是一套開(kāi)源分布式NoSQL數(shù)據(jù)庫(kù)系統(tǒng)。它最初由Facebook開(kāi)發(fā),用于存儲(chǔ)收件箱等簡(jiǎn)單格式數(shù)據(jù),集Google BigTable的數(shù)據(jù)模型與Amazon Dynamo的完全分布式的架構(gòu)于一身。Facebook于2008將Cassandra開(kāi)源,此后,由于Cassandra良好的可擴(kuò)展性,被Digg、Twitter等知名Web 2.0網(wǎng)站所采納,成為了一種流行的分布式結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)方案。

Cassandra是一個(gè)混合型的非關(guān)系的數(shù)據(jù)庫(kù),類似于Google的BigTable。其主要功能比Dynamo(分布式的Key-Value存儲(chǔ)系統(tǒng))更豐富,但支持度卻不如文檔存儲(chǔ)MongoDB(介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的開(kāi)源產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)中功能最豐富、最像關(guān)系數(shù)據(jù)庫(kù)的。支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似JSON的BJSON格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型)。

更多內(nèi)容請(qǐng)讀者參閱項(xiàng)目官網(wǎng):https://cassandra.apache.org/。

和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)(Oracle 11g)相比,這些NoSQL數(shù)據(jù)都各有優(yōu)缺點(diǎn)。

1)模式相對(duì)自由,適合存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù):NoSQL數(shù)據(jù)庫(kù)往往沒(méi)有嚴(yán)格的數(shù)據(jù)模式限定,因此我們可以在業(yè)務(wù)需求變更時(shí)方便地修改數(shù)據(jù)庫(kù)模式而不會(huì)引起原來(lái)數(shù)據(jù)的變化。這個(gè)特性的優(yōu)點(diǎn)在于可以快速適應(yīng)業(yè)務(wù)變化,缺點(diǎn)在于沒(méi)有模式來(lái)幫助我們維護(hù)數(shù)據(jù)的合法性。

2)數(shù)據(jù)一致性和事務(wù)性較弱:NoSQL往往為了提升速度而舍棄了許多數(shù)據(jù)一致性的保證。在NoSQL中,數(shù)據(jù)一致性完全需要用戶在上層邏輯中維護(hù)。此外,NoSQL大部分都不支持事務(wù)或者事務(wù)功能較弱,基本都是基于性能而舍棄這些特性。

3)查詢與關(guān)聯(lián)功能有限:由于NoSQL沒(méi)有像關(guān)系型數(shù)據(jù)庫(kù)那樣,數(shù)據(jù)之間有那么多關(guān)聯(lián),因此難以建立很完善的查詢與關(guān)聯(lián)功能,即使有(如Cassandara),也會(huì)在功能上有諸多限制。一般關(guān)聯(lián)需要用戶在上層解決。

4)讀寫性能問(wèn)題:部分NoSQL的讀寫性能并不是非常好,如Cassandra,在寫入時(shí)非???,但是讀取時(shí)則較慢。而MongoDB這種文檔型數(shù)據(jù)庫(kù)進(jìn)行簡(jiǎn)單的檢索時(shí)很快,但是當(dāng)檢索條件復(fù)雜時(shí)(無(wú)法充分利用索引時(shí)),速度就會(huì)很慢。一般NoSQL由于不需要維護(hù)數(shù)據(jù)一致性,因此都具有很高的寫入性能。

主站蜘蛛池模板: 陵川县| 济阳县| 武冈市| 达日县| 阜南县| 长寿区| 柘荣县| 铁力市| 贡嘎县| 彭阳县| 德清县| 河源市| 娱乐| 榆树市| 全南县| 香港| 潜山县| 苗栗县| 灵丘县| 昭觉县| 轮台县| 横山县| 延川县| 喀喇沁旗| 上饶县| 东乌| 济南市| 随州市| 清苑县| 武夷山市| 淮北市| 涟水县| 遵义市| 阜新市| 栾城县| 托克逊县| 巫溪县| 甘谷县| 墨江| 邻水| 怀集县|