《NOSQL數(shù)據(jù)庫(kù)技術(shù)》課件全套完整版_第1頁(yè)
《NOSQL數(shù)據(jù)庫(kù)技術(shù)》課件全套完整版_第2頁(yè)
《NOSQL數(shù)據(jù)庫(kù)技術(shù)》課件全套完整版_第3頁(yè)
《NOSQL數(shù)據(jù)庫(kù)技術(shù)》課件全套完整版_第4頁(yè)
《NOSQL數(shù)據(jù)庫(kù)技術(shù)》課件全套完整版_第5頁(yè)
已閱讀5頁(yè),還剩671頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

NoSQL

數(shù)據(jù)庫(kù)技術(shù)BEDING

UNIVERSITYOFPOSTSANDTELECOMMUNICATIONS1

是NoSQL2

NoSQL種類與特點(diǎn)3

CAP定

理4

ACID與BASE5

最終一致性技術(shù)基礎(chǔ)6

數(shù)據(jù)復(fù)制與分片7NoSQL數(shù)據(jù)庫(kù)與云計(jì)算8

NoSQL數(shù)據(jù)庫(kù)與物聯(lián)網(wǎng)9

NoSQL數(shù)據(jù)庫(kù)與區(qū)塊鏈10

小結(jié)目錄21.1什么是NoSQL

NitSQL■研究不同特點(diǎn)大數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)技術(shù);NoSQL

數(shù)據(jù)庫(kù)是非關(guān)系型數(shù)據(jù)存儲(chǔ)的廣義定義

;它不同于符合ACID

理論的關(guān)系型數(shù)據(jù)庫(kù),

數(shù)據(jù)存儲(chǔ)不需要固定的表結(jié)構(gòu);■

通常也不存在連接操作;NoSQL

數(shù)據(jù)庫(kù)不使用傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)模型

,而是使用鍵值模型、列模型、文檔模型、

圖模型等方式存儲(chǔ)數(shù)據(jù)。31.1什么是NoSQL——NoSQL誕生原因數(shù)據(jù)庫(kù)應(yīng)用需求變化■支撐OLTP型應(yīng)用:事務(wù)處理,RDB

的強(qiáng)項(xiàng)■支撐OLAP型應(yīng)用:多維分析處理■新需求:支撐面向大數(shù)據(jù)的存儲(chǔ)、處理與應(yīng)用

新挑戰(zhàn)■

one-size

does

not

fit

all■高性能、低成本■

不同類型非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)與管理計(jì)算機(jī)新技術(shù)助力NoSQL■

多核、大內(nèi)存,集群等技術(shù)的普及麻省理工MichaelStonebraker現(xiàn)代主流數(shù)據(jù)庫(kù)系統(tǒng)架構(gòu)的

奠基人,2014年獲圖靈獎(jiǎng)。1.1什么是NoSQL——NoSQL誕生原因關(guān)系型數(shù)據(jù)庫(kù)面臨的問(wèn)題擴(kuò)展困難:由于存在類似Join

這樣多表查詢機(jī)

制,使得數(shù)據(jù)庫(kù)在擴(kuò)展方面很艱難;讀寫(xiě)慢:這種情況主要發(fā)生在數(shù)據(jù)量達(dá)到一定

規(guī)模時(shí)由于關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)邏輯復(fù)雜,使得

容易發(fā)生死鎖等并發(fā)問(wèn)題,所以導(dǎo)致大數(shù)據(jù)庫(kù)

應(yīng)用場(chǎng)景中讀寫(xiě)速度下滑非常嚴(yán)重;成本高:企業(yè)級(jí)數(shù)據(jù)庫(kù)的License

價(jià)格很驚人,

并且隨著系統(tǒng)規(guī)模越大,成本越高;■有限的支撐容量:現(xiàn)有關(guān)系型解決方案還無(wú)法

支撐Google

這樣海量的數(shù)據(jù)存儲(chǔ);1.1什么是NoSQL——NoSQL誕生原因大數(shù)據(jù)庫(kù)存儲(chǔ)與管理新需求呼吁技術(shù)創(chuàng)新低延遲的讀寫(xiě)速度:應(yīng)用快速地響應(yīng)能極大地提

升用戶的滿意度;支撐海量的數(shù)據(jù)和流量:對(duì)于互聯(lián)網(wǎng)等企業(yè)級(jí)大

應(yīng)用而言,需要高效存儲(chǔ)處理PB級(jí)的數(shù)據(jù)和百萬(wàn)

級(jí)的并發(fā)訪問(wèn)量;大規(guī)模集群的管理:系統(tǒng)管理員希望分布式應(yīng)用

能更簡(jiǎn)單的部署和管理;盡可能地降低運(yùn)營(yíng)成本:IT

經(jīng)理們希望在硬件成

本、軟件成本和人力成本能夠有大幅度地降低;1.1什么是NoSQL——典型的共性需求■

假設(shè)失效是必然發(fā)生的:

需要具有高容錯(cuò)性。NOSQL實(shí)現(xiàn)都建立在硬盤(pán)、機(jī)器和網(wǎng)絡(luò)都會(huì)經(jīng)常性失效假設(shè)之上?!?/p>

不能徹底阻止這些失效,需要讓系統(tǒng)能夠在即使非常極端的條件下也能應(yīng)付這些失效。對(duì)數(shù)據(jù)進(jìn)行分區(qū):需要高性能■

分布式存儲(chǔ),將讀寫(xiě)操作的負(fù)載分布到了不同的機(jī)器上

提高數(shù)據(jù)存儲(chǔ)與訪問(wèn)的并發(fā)性?!?/p>

保存同一數(shù)據(jù)的多個(gè)副本:需要具有高可用性。NOSQL提供數(shù)據(jù)副本機(jī)制,副本個(gè)數(shù)往往可配置■

查詢支持■在這個(gè)方面,不同的實(shí)現(xiàn)有相當(dāng)本質(zhì)的區(qū)別。不同實(shí)現(xiàn)的一個(gè)共性在

于哈希表中的

key/value

匹配。類型Top

3代表特點(diǎn)圖數(shù)據(jù)庫(kù)(GraphDBMS)Neo4jMicrosoftAzure

CosmosDB(Multi-model)OrientDB(Multi-model)圖型數(shù)據(jù)的最佳存儲(chǔ)。相比使用傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)性能更優(yōu),存儲(chǔ)模式設(shè)計(jì)與使用更加靈活、簡(jiǎn)單。文檔數(shù)據(jù)庫(kù)(DocumentStores)MongoDBAmazonDynamoDB(Multi-model)CoucHBase文檔存儲(chǔ)一般用類似JSON(JavaScriptObjectNotation)的格

式存儲(chǔ),存儲(chǔ)的內(nèi)容是文檔型的嵌套

結(jié)構(gòu)??梢詫?duì)某些字段建立索引,實(shí)

現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)的某些功能。鍵值數(shù)據(jù)庫(kù)

(KV

DBMS)Redis(Multi-model)AmazonDynamoDB(Multi-model)Microsoft

Azure

CosmosDB(Multi-model)可以通過(guò)Key快速查詢到其Value。一般來(lái)說(shuō),存儲(chǔ)不管Value的格式,照單全收。列族存儲(chǔ)Cassandra顧名思義,是按列存儲(chǔ)數(shù)據(jù)的。最(WideHBase大的特點(diǎn)是方便存儲(chǔ)結(jié)構(gòu)化和半結(jié)構(gòu)ColumnMicrosoftAzure

Cosmos化數(shù)據(jù),對(duì)某一列或者某幾列的查詢Stores)DB(Multi-model)有非常大的性能優(yōu)勢(shì)。1.2NoSQL分類與特點(diǎn)https://db-engines.com/en/ranking

截止2019年11月排名如下表類型Top

3代表特點(diǎn)時(shí)序數(shù)據(jù)庫(kù)(Time

SeriesDBMS)InfluxDBKdb+Prometheus時(shí)間序列數(shù)據(jù)庫(kù)用于支撐時(shí)間序列數(shù)據(jù)的優(yōu)化存儲(chǔ),每個(gè)條目都有一個(gè)相關(guān)的時(shí)間戳。時(shí)間序列數(shù)據(jù)可以來(lái)自傳感器、智能電表等,或可以存儲(chǔ)一個(gè)高頻股票交易系統(tǒng)的股票價(jià)格波動(dòng)情況。對(duì)象存儲(chǔ)(Object

orientedDBMS)InterSystems

Caché(Multi-model)Versant

Object

DBObjectStore通過(guò)類似面向?qū)ο笳Z(yǔ)言的語(yǔ)法操作數(shù)據(jù)庫(kù),

通過(guò)對(duì)象的方式存取數(shù)據(jù)。XML數(shù)據(jù)庫(kù)MarkLogicOracleBerkeley

DBVirtuoso可以高效地存儲(chǔ)XML數(shù)據(jù),并支持XML的內(nèi)部查詢語(yǔ)法,如XQuery、Xpath等。原生類XMLDB有BaseX等。RDF數(shù)據(jù)庫(kù)MarkLogic(Multi-model)VirtuosO(Multi-model)Apache

Jena

-TDB資源描述框架存儲(chǔ)數(shù)據(jù)庫(kù)是一種信息的

描述方法,最初用于描述元數(shù)據(jù)。目前主要

用于語(yǔ)義網(wǎng)、知識(shí)圖譜的存儲(chǔ)。資源描述框

架存儲(chǔ)數(shù)據(jù)庫(kù)主要以主語(yǔ)、謂語(yǔ)、賓語(yǔ)三元

組形式表示信息。搜索引擎(SearchEngines)ElasticsearchSplunkSolr搜索引擎是用于數(shù)據(jù)內(nèi)容搜索的NoSQL數(shù)據(jù)庫(kù)管理系統(tǒng)。除了這種應(yīng)用的一般優(yōu)化,專業(yè)化數(shù)據(jù)庫(kù)通常還支持復(fù)雜搜索表達(dá)式、全文搜索、源搜索、搜索結(jié)果的排序和分組、空間搜索和高擴(kuò)展性分布式搜索等功能。1.2NoSQL種類與特點(diǎn)1.2

NoSQL種類與特點(diǎn)NoSQLDB的一般共性特點(diǎn)■

1)

不需要預(yù)定義模式:不需要事先定義數(shù)據(jù)模式

,預(yù)定義表結(jié)構(gòu)。數(shù)據(jù)中的每條記錄都可能有不同

的屬性和格式,當(dāng)插入數(shù)據(jù)時(shí),并不需要預(yù)先定義

它們的模式;■

2)

無(wú)共享架構(gòu):相對(duì)于將所有數(shù)據(jù)存儲(chǔ)在網(wǎng)絡(luò)中

的存儲(chǔ)區(qū)域全共享架構(gòu),NoSQL

往往將數(shù)據(jù)劃分

后存儲(chǔ)在各個(gè)本地服務(wù)器上。因?yàn)閺谋镜卮疟P(pán)讀取

數(shù)據(jù)的性能往往好于通過(guò)網(wǎng)絡(luò)傳輸讀取數(shù)據(jù)的性能

,從而提高系統(tǒng)的性能。1.2

NoSQL種類與特點(diǎn)3)

彈性可擴(kuò)展:可以在系統(tǒng)運(yùn)行的時(shí)候,動(dòng)態(tài)增加或者刪除結(jié)點(diǎn)。不需要停機(jī)維護(hù),

數(shù)據(jù)可以自動(dòng)遷移。4)

分區(qū):相對(duì)于將數(shù)據(jù)存放于同一個(gè)節(jié)點(diǎn)

,NoSQL

數(shù)據(jù)庫(kù)需要將數(shù)據(jù)進(jìn)行分區(qū),將記

錄分散在多個(gè)節(jié)點(diǎn)上面。并且通常分區(qū)的同

時(shí)還要做復(fù)制。這樣既提高了并行性能,又

能保證沒(méi)有單點(diǎn)失效的問(wèn)題;5)分發(fā)查詢到數(shù)據(jù),而非數(shù)據(jù)到查詢;1.2

NoSQL種類與特點(diǎn)6)

異步復(fù)制:和RAID存儲(chǔ)系統(tǒng)不同的是,NoSQL

中的復(fù)制,往往是基于日志的異步復(fù)制。這樣,數(shù)據(jù)就可以盡快地寫(xiě)入一個(gè)節(jié)點(diǎn)

,而不會(huì)被網(wǎng)絡(luò)傳輸引起遲延。缺點(diǎn)是并不

總是能保證一致性,這樣的方式在出現(xiàn)故障的時(shí)候,可能會(huì)丟失少量的數(shù)據(jù);7)

BASE:

相對(duì)于事務(wù)嚴(yán)格的ACID特性,

NoSQL數(shù)據(jù)庫(kù)保證的是BASE特性。1.2

NoSQL種類與特點(diǎn)圖數(shù)據(jù)庫(kù):將數(shù)據(jù)存儲(chǔ)在圖

(Graph)

結(jié)構(gòu)中。如下

圖示是一個(gè)簡(jiǎn)單的有向無(wú)環(huán)圖。GraphRecordsdatainRecordsdata

inRelationshipsorganizeNodeshavehaveProperties1.2

NoSQL種類與特點(diǎn)■

圖術(shù)語(yǔ):節(jié)點(diǎn)、邊、度、路徑、最短距離、連通

圖、全連通圖、子圖等等?!?/p>

圖數(shù)據(jù)庫(kù)可以看作是結(jié)點(diǎn)與關(guān)系的集合,圖數(shù)據(jù)

庫(kù)就是將數(shù)據(jù)存儲(chǔ)在擁有屬性的結(jié)點(diǎn)中,并用關(guān)

系將這些結(jié)點(diǎn)組織起來(lái)?!鰯?shù)據(jù)存儲(chǔ)的重要目的是為了檢索。圖的查找與搜

索可以通過(guò)遍歷算法完成。■

解決的查詢問(wèn)題根據(jù)算法,從開(kāi)始結(jié)點(diǎn)到與之相

連的結(jié)點(diǎn)查詢諸如“某個(gè)人好友的好友的好友是

哪些人”等問(wèn)題。■節(jié)點(diǎn)與節(jié)點(diǎn)間的距離(?)可以反映節(jié)點(diǎn)間關(guān)系

的緊密程度。1.2

NoSQL種類與特點(diǎn)文檔類:MongoDB■數(shù)據(jù)可以存儲(chǔ)為一個(gè)樹(shù)形結(jié)構(gòu)■文檔數(shù)據(jù)庫(kù)就是大量文檔樹(shù)形結(jié)構(gòu)的集合■數(shù)據(jù)存儲(chǔ)模式重點(diǎn)是樹(shù)形、森林結(jié)構(gòu)的抽象,文檔模式可變根節(jié)點(diǎn)

客戶分支

分支

客戶1………客戶n分支

分支

標(biāo)識(shí)

姓名

地址值

分支

分支

112

張三

城市

街道值

北京

0號(hào)西土城路1海淀區(qū)shard?mongodmongodmongodconfig

serversCmongodC?mongodCmongod>Config

Server-存儲(chǔ)集群的元數(shù)據(jù),如分片信息、數(shù)據(jù)塊映射等。config

服務(wù)器保存了兩個(gè)映射關(guān)系,一個(gè)是key區(qū)間的數(shù)據(jù)都存放在那些chunk

上的映射關(guān)系,另一個(gè)是chunk

都存放在哪些分片

節(jié)點(diǎn)上的映射關(guān)系。>Route

Server

客戶端訪問(wèn)路由(統(tǒng)一接入點(diǎn)),查詢優(yōu)化,數(shù)據(jù)合并、排序、裁剪,請(qǐng)求推送等

。客戶端統(tǒng)一訪問(wèn)路由節(jié)點(diǎn)mongos,

來(lái)進(jìn)行數(shù)據(jù)操作。路由節(jié)點(diǎn)先訪問(wèn)config服務(wù)器獲取信息,找到數(shù)據(jù)真正存放位置,然后再對(duì)其進(jìn)行操作。client>MongoServer-mongod實(shí)例,存儲(chǔ)實(shí)際數(shù)據(jù)的模塊。1.2

NoSQL種類與特點(diǎn)文檔類:MongoDBshard?mongodshard?mongodmongodmongodmongodmongodmongodmongodmongodshard?mongo5mongos鍵值類:Redis■簡(jiǎn)潔:數(shù)據(jù)主要采用Key-Value

形式存儲(chǔ),鍵為唯一標(biāo)識(shí)符?!龈咚伲簲?shù)據(jù)駐留內(nèi)存,Redis

也支持將內(nèi)存中的數(shù)據(jù)持久化到

磁盤(pán)中,重啟的時(shí)候可以再次加載進(jìn)行使用,同時(shí)保障數(shù)據(jù)的

高性能訪問(wèn)及可靠性?!鲆讛U(kuò)展:根據(jù)系統(tǒng)負(fù)載量,靈活添加或刪除服務(wù)器?!鰧?duì)鍵可設(shè)置失效時(shí)間,豐富的配置管理功能可以精準(zhǔn)地設(shè)定數(shù)

據(jù)服務(wù)級(jí)別。鍵值Key1Value1…………KeyNValueN1.2

NoSQL種類與特點(diǎn)1.2

NoSQL種類與特點(diǎn)列族數(shù)據(jù)庫(kù):HBASE,

大數(shù)據(jù)技術(shù)基礎(chǔ)中有學(xué)習(xí)Cient-

ZookeeperHMaster該類數(shù)據(jù)庫(kù)課程重點(diǎn)學(xué)習(xí):

CassandraDataNode

DataNodeDataNodeDataNodeDataNode…DFS

Client

…DFSClientStore

MemstoreStoreFileHFileStore

MemStoreStoreFileHFileMemstoreStoreFileHFileMemstoreStoreFileHFileHRegionServer

HRegjionHRegionServer

HRegionStoreStoreFileHFileStoreStoreileHFileHBaseHDFSHLogH9一致性

(Consistency)任何一個(gè)讀操作總是能讀取到之前完成的寫(xiě)操作結(jié)果

,也就是在分布式環(huán)境中,多點(diǎn)的數(shù)據(jù)是一致的;■

(Availability)每一個(gè)操作總是能夠在確定的時(shí)間內(nèi)返回,也就是系

統(tǒng)隨時(shí)都是可用的?!?/p>

分區(qū)容忍性

(Partition

Tolerance)在出現(xiàn)網(wǎng)絡(luò)分區(qū)(比如斷網(wǎng))的情況下,分離的系統(tǒng)

也能正常運(yùn)行。一個(gè)分布式系統(tǒng)不能同時(shí)滿足一致

,可用性和分區(qū)容錯(cuò)性這三個(gè)需

求,最多只能同時(shí)滿足兩個(gè)。1.3CAP定理CAP理

論1.3CAP定理數(shù)據(jù)庫(kù)按CAP分類RDBMS

ConsistencyCA

CPCAPTheoremCouchDBCassandraDynamoDB

RiakMongoDB

HBaseRedisPartitionToleranceAvailabilityAP(1)關(guān)注一致性和可用性的

(CA)這些數(shù)據(jù)庫(kù)對(duì)于分區(qū)容忍性方面比較弱,主

要采用復(fù)制

(Replication)

這種方式來(lái)保證

數(shù)據(jù)的安全性,常見(jiàn)的CA系統(tǒng)有:傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù),比如Postgres

和MySQL等

(Relational)■Vertica(Column-oriented)Aster

Data(Relational)Greenplum(Relational)1.3

CAP定理(2)關(guān)注一致性和分區(qū)容忍性的(CP)■這種系統(tǒng)將數(shù)據(jù)分布在多個(gè)網(wǎng)絡(luò)分區(qū)的節(jié)點(diǎn)上,并保證這

些數(shù)據(jù)的

致性,但是對(duì)于可用性的支持方面有問(wèn)題,比

如當(dāng)集群出現(xiàn)問(wèn)題的話,節(jié)點(diǎn)有可能因無(wú)法確保數(shù)據(jù)是

致性的而拒絕提供服務(wù),主要的CP

統(tǒng)

:BigTable(Column-oriented)■Hypertable(Column-oriented)■HBase(Column-oriented)■MongoDB(Document)Terrastore(Document)Redis(Key-value)Scalaris(Key-value)MemcacheDB(Key-value)■

Berkeley

DB(Key-value)1.3

CAP定理(3)關(guān)于可用性和分區(qū)容忍性的(AP)這類系統(tǒng)主要以實(shí)現(xiàn)“最終一致性

(Eventual

Consistency)”來(lái)確??捎眯院头謪^(qū)容忍性,AP

的系統(tǒng)有:■Dynamo(Key-value)Voldemort(Key-value)TokyoCabinet(Key-value)■KAI(Key-value)■Cassandra(Column-oriented)CouchDB(Document-oriented)SimpleDB(Document-oriented)■Riak(Document-oriented)1.3

CAP定理關(guān)系數(shù)據(jù)庫(kù)■表都是存儲(chǔ)一些格式

化的數(shù)據(jù)結(jié)構(gòu)■每個(gè)元組字段的組成都一樣即使不是每個(gè)元組都

需要所有的字段,但

數(shù)據(jù)庫(kù)會(huì)為每個(gè)元組

分配所有的字段這樣的結(jié)構(gòu)可以便于

表與表之間進(jìn)行連接等操作■

NoSQL以鍵值對(duì)存儲(chǔ),它

的結(jié)構(gòu)不固定每一個(gè)元組可以有

不一樣的字段每個(gè)元組可以根據(jù)

需要增加一些自己

的鍵值對(duì)不會(huì)局限于固定的

結(jié)構(gòu),可以減少一

些時(shí)間和空間的開(kāi)

銷1.4ACID與BASE關(guān)系數(shù)據(jù)庫(kù)VS

NoSQLNoSQL■弱一致性的理論BASEBASE

分別是:Basically

Available

Soft-stateEventualConsistency關(guān)系數(shù)據(jù)庫(kù)關(guān)系型數(shù)據(jù)庫(kù)中強(qiáng)調(diào)

ACID

是■原子性

(Atomicity)口一

性(Consistency)隔

性(Isolation)持

性(Durability)ACID的目的就是通過(guò)事

務(wù)支持,保證數(shù)據(jù)的完

整性和正確性1.4ACID與BASE1.4ACID與BASE基本可用性:分布式系統(tǒng)在出現(xiàn)不可預(yù)知故

障的時(shí)候,允許損失部分可用性。軟狀態(tài):允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該中間狀態(tài)的存在不會(huì)影響系統(tǒng)的整

體可用性,即允許系統(tǒng)在不同節(jié)點(diǎn)的數(shù)據(jù)副

本之間進(jìn)行數(shù)據(jù)同步的過(guò)程存在延時(shí)。最終一致性:BASE系統(tǒng)顯著的特點(diǎn)是要保

證在短時(shí)間內(nèi),即使有不同步的風(fēng)險(xiǎn),也要

允許新數(shù)據(jù)能夠被存儲(chǔ)。所有的數(shù)據(jù)副本,

在經(jīng)過(guò)一段時(shí)間的同步后,最終能夠達(dá)到一

個(gè)一致的狀態(tài)。

261.5最終一致性技術(shù)基礎(chǔ)NoSQL

分布式集群系統(tǒng)是由多個(gè)節(jié)點(diǎn)(指服

務(wù)器、存儲(chǔ)設(shè)備等)構(gòu)成由于網(wǎng)絡(luò)異常、服務(wù)器故障等原因,節(jié)點(diǎn)并

不總能保證正常工作,特別是在節(jié)點(diǎn)數(shù)量很

大的時(shí)候,出現(xiàn)異常狀況在所難免。為了保證系統(tǒng)的正常運(yùn)行,分布式系統(tǒng)中對(duì)

于數(shù)據(jù)的存儲(chǔ)采用多數(shù)據(jù)副本來(lái)保證高可用

性,這個(gè)過(guò)程對(duì)于用戶來(lái)說(shuō)是透明的?!鋈绾伪U隙喔北緮?shù)據(jù)的最終一致性?27■

按照服務(wù)保障能力的不同,客戶端訪問(wèn)一致性可以

分為以下幾個(gè)類型?!?/p>

嚴(yán)格一致性:語(yǔ)義上相當(dāng)于只存在一份數(shù)據(jù)。任何更新

看上去都是即時(shí)發(fā)生的?!白x己之所寫(xiě)”一致性:客戶端可立即看到自己所作的

更新,且客戶端可在不同請(qǐng)求之間切換服務(wù)器,但不能

立即看到其他客戶端所作的更新。■

會(huì)話一致性:對(duì)于客戶端在同一會(huì)話作用域中發(fā)起的請(qǐng)

求,通常綁定到同一臺(tái)服務(wù)器,提供“讀己之所寫(xiě)”一

?!?/p>

單調(diào)讀一致性:保證時(shí)間上的單調(diào)性,保證客戶端在未

來(lái)的請(qǐng)求中,只會(huì)讀到比當(dāng)前更新的數(shù)據(jù)?!?/p>

最終一致性:這是最弱的一種保證。在更新的過(guò)程中,

客戶端可能看到不一致的視圖。1.5.1一致性問(wèn)題1.5.2

Quorum的NWR

策略Quorom

機(jī)制是一種分布式系統(tǒng)中常用的,用來(lái)保證

數(shù)據(jù)冗余和最終一致性的投票算法,其主要數(shù)學(xué)思

想來(lái)源于鴿巢原理。Quorum的NWR策略中N代表總的節(jié)點(diǎn)數(shù)量,W代表

寫(xiě)的節(jié)點(diǎn)數(shù)量,R代表讀的節(jié)點(diǎn)數(shù)量。Quorom

機(jī)制中分布式系統(tǒng)中的每一份數(shù)據(jù)拷貝對(duì)象

都被賦予一票。每一個(gè)操作必須要獲得最小的讀票

數(shù)

(Vr)或者最小的寫(xiě)票數(shù)(Vw)

才能讀或者寫(xiě)。291.5.2

Quorum的NWR

策略如果一個(gè)系統(tǒng)有V

票(意味著一個(gè)數(shù)據(jù)對(duì)象有V

份冗

余拷貝),那么這最小讀寫(xiě)票數(shù)必須滿足:(1)Vr+Vw>V(2)Vw>V/2■第1條規(guī)則保證了一個(gè)數(shù)據(jù)不會(huì)被同時(shí)讀寫(xiě)。■第2條規(guī)則保證了數(shù)據(jù)的串行化修改。Quorum

的讀寫(xiě)最小票數(shù)可以用來(lái)作為系統(tǒng)在讀、寫(xiě)

性能方面的一個(gè)可調(diào)節(jié)參數(shù)。寫(xiě)票數(shù)Vw

越大,則讀

票數(shù)Vr越小,這時(shí)候系統(tǒng)寫(xiě)的開(kāi)銷就大。反之,則

寫(xiě)的開(kāi)銷就小。30■

數(shù)

據(jù):■

假設(shè)共有N

個(gè)數(shù)據(jù)副本,其中K

個(gè)已經(jīng)更新,N-K

個(gè)未更新

,那么任意讀取N-K+1個(gè)副本數(shù)據(jù)的時(shí)候就必定至少有1

個(gè)是屬于更新了的K

個(gè)里面的,也就是Quorum的交集■

只需比較讀取的N-K+1

數(shù)據(jù),并將其中版本最高的那個(gè)數(shù)

據(jù)返回給用戶就可以得到最新更新的數(shù)據(jù)。■

寫(xiě)

數(shù)

據(jù):■

只需要完成寫(xiě)K(大于N/2)個(gè)副本的更新后,就可以告訴客

戶端操作完成,而不需要全部寫(xiě)入完成;■

當(dāng)然告訴用戶完成操作后,系統(tǒng)內(nèi)部還是會(huì)繼續(xù)把剩余的

副本更新,這對(duì)于用戶是透明的。1.5.2

Quorum的NWR

策略31■

Paxos算法是LeslieLamport于1990年提出的,

類似于解決拜占庭將軍問(wèn)題,基于消息傳遞

解決分布式系統(tǒng)中的一致性問(wèn)題。一個(gè)被Paxos管理的系統(tǒng)實(shí)際上談?wù)摰氖侵禒?/p>

態(tài)和跟蹤的問(wèn)題。Cassandra

、Google的分布式鎖服務(wù)Chubby等

采用的都是Paxos算法進(jìn)行一致性管理。Paxos完成一次寫(xiě)操作需要兩次交互過(guò)程,分別是prepare/promise和propose/accept。1.5.3

PaxoS算法簡(jiǎn)介321.5.3PaxoS算法簡(jiǎn)介■

Paxos一致性算法執(zhí)行過(guò)程Replica)Replica)Leader)-

(Replica)

Leader)

Replica)Replica)Replica)prepare

promiseReplica)Replica)Leader)

Replica)

Leader)

Replica)Replica)Replica)proposeaccept331.5.3

Paxos算法簡(jiǎn)介Paxos

致性算法執(zhí)行過(guò)程■

第一次由提交者

(Leader)

向所有其他服務(wù)器發(fā)

出Prepare消息請(qǐng)求準(zhǔn)備,所有服務(wù)器中大多數(shù)

如果回復(fù)諾言

(promise)

就表示準(zhǔn)備好了,可

以接受寫(xiě)入;■第二次提交者向所有服務(wù)器發(fā)出正式建議Propose,所有服務(wù)器中大多數(shù)如果回復(fù)已經(jīng)接

(accept)就表示成功?!鲞@里大多數(shù)的含義一般指超過(guò)半數(shù)以上,即至

少N/2+1個(gè)節(jié)點(diǎn),N

為節(jié)點(diǎn)總數(shù)。341.5.3

PaxoS算法簡(jiǎn)介Paxos一致性算法執(zhí)行過(guò)程■接受的過(guò)程可能會(huì)發(fā)生失敗,在回復(fù)了諾言消

息以后,在接受到Accept消息之前,如果有足夠

多的服務(wù)器正好在這個(gè)時(shí)間段失敗,那么執(zhí)行

接受行為只能是少數(shù)服務(wù)器;Paxos算法不允許在沒(méi)有達(dá)成共識(shí)情況下任何寫(xiě)

操作發(fā)生,這種壞的情況在實(shí)踐中經(jīng)常通過(guò)重

復(fù)接受階段來(lái)讓大多數(shù)節(jié)點(diǎn)最終接受;Paxos算法中會(huì)維護(hù)一個(gè)全局唯一的序列號(hào)。序

列號(hào)是由建議流程產(chǎn)生,它定義了接受流程應(yīng)

該準(zhǔn)備接受帶有最新序列號(hào)的建議,序列號(hào)是算法的關(guān)鍵;

351.5.4

Raft算法簡(jiǎn)介Raft算法是由斯坦福大學(xué)Diego

Ongaro博士在

2014年提出的一種更易于理解的分布式架構(gòu)

中日志一致性管理算法。■

相比于Paxos,Raft

算法更容易理解,也更容

易應(yīng)用到實(shí)際的系統(tǒng)當(dāng)中。Raft算法是Zookeeper框架的核心算法,也是區(qū)塊鏈中聯(lián)

盟鏈采用比較多的共識(shí)算法。Raft算法中,分布式系統(tǒng)中的節(jié)點(diǎn)有三種角

色?!鲱I(lǐng)導(dǎo)者、候選者、追隨者361.5.4

Raft算法簡(jiǎn)介Raft算法作用示意④①Client②ServerConsensusModuleMachinex:3y:9z:0y-1

y-9

…Logx-3③State371.5.4

Raft算法簡(jiǎn)介■Raft算法三種節(jié)點(diǎn)角色作用■領(lǐng)導(dǎo)者(Leader):

只有一個(gè),負(fù)責(zé)接收客戶端

的請(qǐng)求,將日志復(fù)制到其他節(jié)點(diǎn)并告知其他節(jié)

點(diǎn)何時(shí)應(yīng)用這些日志是安全的。■候選者

(Candidate)

:

通常多個(gè),用于選舉

Leader的

一種角色。追隨者

(Follower)

:

通常多個(gè),負(fù)責(zé)響應(yīng)來(lái)自

Leader或

者Candidate的請(qǐng)求。Raft算法思想類似民主選舉,領(lǐng)導(dǎo)者由民眾投票選舉產(chǎn)生,集

群剛開(kāi)始沒(méi)有領(lǐng)導(dǎo)者,所有服務(wù)器節(jié)點(diǎn)都是追隨

者;■接下來(lái)進(jìn)行選舉,角色轉(zhuǎn)換為候選者參與投票,

每臺(tái)服務(wù)器只能投一票,得票超過(guò)半數(shù)以上的當(dāng)

選為領(lǐng)導(dǎo)者,并設(shè)定這屆領(lǐng)導(dǎo)者的任期

(Term)

,從而選舉結(jié)束;■其他候選人轉(zhuǎn)換為追隨者,并無(wú)條件服從領(lǐng)導(dǎo)者

的領(lǐng)導(dǎo)?!鯮aft把時(shí)間切割為任意長(zhǎng)度的任期,每個(gè)任期都有一個(gè)任期號(hào),采用連續(xù)的整數(shù)。1.5.4

Raft算法簡(jiǎn)介1.5.4Raft算法簡(jiǎn)介Raft算法思想三類角色狀態(tài)轉(zhuǎn)換如圖所示超時(shí)/新選舉接收到大多數(shù)選票超時(shí),開(kāi)始選舉Candidate候選者產(chǎn)生領(lǐng)導(dǎo)者開(kāi)始新任期收到更高任期請(qǐng)求,任期結(jié)束啟動(dòng)Follower

追隨者Leader領(lǐng)導(dǎo)者401.5.4

Raft算法簡(jiǎn)介Raft算法從時(shí)間角度看任期,如圖所示,每次選舉

如果成功則由領(lǐng)導(dǎo)者來(lái)負(fù)責(zé)集群中的事務(wù)及狀態(tài)管

理,有時(shí)也可能出現(xiàn)選舉失敗,則需要重新選舉直

到選舉成功,如圖中的t3情

。term

1term2t3term

4termsnoemergingleaderelection

normaloperation411.5.4

Raft算法簡(jiǎn)介■

基于Leader的方法,Raft

算法可分解成三個(gè)子問(wèn)題■領(lǐng)導(dǎo)者選舉(LeaderElection):

原來(lái)的領(lǐng)導(dǎo)者掛掉

后,必須選出一個(gè)新的領(lǐng)導(dǎo)者,候選者可以自己

。日志復(fù)制(LogReplication):

領(lǐng)導(dǎo)者從客戶端接收

日志,并向Follower們發(fā)出指令,比如進(jìn)行日志復(fù)

制。安全性(Safety):

如果有任意的Server將日志項(xiàng)回放

到狀態(tài)機(jī)中了,那么其他的Server只會(huì)回放相同的日

項(xiàng)

。

421.5.4

Raft算法簡(jiǎn)介■

領(lǐng)

導(dǎo)

舉(LeaderElection):

要開(kāi)始一次選舉過(guò)程,F(xiàn)ollower會(huì)給當(dāng)前term加1并且轉(zhuǎn)換成Candidate狀態(tài),并行地

向集群中的其他服務(wù)器節(jié)點(diǎn)發(fā)送請(qǐng)求投票的消息來(lái)給自己投

票。候選人的狀態(tài)維持直到以下任何一個(gè)條件發(fā)生。(1)

自己贏得這次選舉。給所有其它節(jié)點(diǎn)發(fā)送這個(gè)信息,這樣所有節(jié)點(diǎn)都會(huì)轉(zhuǎn)成Follower。(2)其他的服務(wù)器成為領(lǐng)導(dǎo)者。如果Leader的term大于或等

于自身的term,

該Candidate會(huì)轉(zhuǎn)成Follower;

否則拒絕該Leader,并繼續(xù)保持Candidate狀態(tài)。(3)沒(méi)有任何一個(gè)獲選,則增加term,發(fā)起新一輪選舉。1.5.5向量時(shí)鐘機(jī)制向量時(shí)鐘(VectorClock)

實(shí)際是一組版本號(hào),版本號(hào)即邏輯時(shí)鐘。■

假設(shè)數(shù)據(jù)需要存放3份,需要3臺(tái)DB存儲(chǔ)(用A,B,C表示),那么向量維度就是3,每個(gè)DB

有一個(gè)版本

號(hào),從0開(kāi)始,這樣就形成了一個(gè)向量版本[A:0,B:0,

C:0]。Step

1:

初始狀態(tài)下,所有機(jī)器都是[A:0,B:0,C:0]:DB

A——>[A:0,B:0,C:0]DB

B——>[A:0,B:0,C:0]DB

C——>[A:0,B:0,C:0]441.5.5向量時(shí)鐘機(jī)制Step2:假設(shè)應(yīng)用是一個(gè)電商平臺(tái),現(xiàn)在錄入一個(gè)華為P30的價(jià)格3888元;客戶端隨機(jī)選擇一個(gè)DB機(jī)器寫(xiě)入?,F(xiàn)假設(shè)選擇了A

。,

數(shù)據(jù)

大概是這樣:{key=HUAWEI-P30_price;value=3888;vclk=[A:1,B:0,C:0]}Step

3:

接下來(lái)A會(huì)把數(shù)據(jù)同步給B和C,于是最終同步結(jié)果如下:

DB_A——>{key=HUAWEI-P30_price;value=3888;vclk=[A:1,B:0,C:0]}

DB_B——>{key=HUAWEI-P30_price;value=3888;vclk=[A:1,B:0,C:0]}

DB_C——>{key=HUAWEI-P30_price;value=3888;vclk=[A:1,B:0,C:0]}Step4:

過(guò)了幾分鐘,價(jià)格出現(xiàn)波動(dòng),降價(jià)到3688元;于是某個(gè)業(yè)務(wù)員更新價(jià)格。這時(shí)候系統(tǒng)隨機(jī)選B作為寫(xiě)入存儲(chǔ),于是結(jié)果看起來(lái)

是這樣:DB_A——>{key=HUAWEI-P30

_price;value=3888;vclk=[A:1,B:0,C:0]}

DB_B——>{key=HUAWEI-P30_price;value=3688;vclk=[A:1,

B:1,C:0]}DB_C——>{key=HUAWEI-P30_price;value=3888;vclk=[A:1,B:0,C:0]}1.5.5向量時(shí)鐘機(jī)制Step5:于

是B

就把更新同步給其他幾個(gè)存儲(chǔ):DB_A——>{key=HUAWEI-P30_price;value=3688;vclk=[A:1,B:1,C:0]}

DB_B——>{key=HUAWEI-P30_price;value=3688;vclk=[A:1,B:1,C:0]}DB_C——>{key=HUAWEI-P30_price;value=3688;vclk=[A:1,B:1,C:0]}■

到目前為止都是正常同步,下面開(kāi)始演示一種不正常的情況。Step6:價(jià)格再次發(fā)生波動(dòng),變成4000元,這次選擇C

寫(xiě)入:DB_A——>{key=HUAWEI-P30_price;value=3688;vclk=[A:1,B:1,C:0]}

DB_B——>{key=HUAWEI-P30_price;value=3688;vclk=[A:1,B:1,C:0]}DB_C——>{key=HUAWEI-P30_price;value=4000;vclk=[A:1,B:1,C:1]}Step

7:C把更新同步給A

和B,因?yàn)槟承﹩?wèn)題,只同步到A,

結(jié)果如下

:DB_A——>{key=HUAWEI-P30_price;value=4000;vclk=[A:1,B:1,C:1]}

DB_B——>{key=HUAWEI-P30_price;value=3688;vclk=[A:1,B:1,C:0]}DB_C——>{key=HUAWEI-P30_price;value=4000;vclk=[A:1,B:1,C:1]}461.5.5向量時(shí)鐘機(jī)制Step8:

價(jià)格再次波動(dòng),變成3788元,系統(tǒng)選擇B寫(xiě)入:DB_A——>{key=HUAWEI-P30_price;value=4000;vclk=[A:1,B:1,C:1]}DB_B——>{key=HUAWEI-P30_price;value=3788;vclk=[A:1,B:2,C:0]}DB_C——>{key=HUAWEI-P30_price;value=4000;vclk=[A:1,B:1,C:1]}Step

9:當(dāng)B同步更新給A和C的時(shí)候就出現(xiàn)問(wèn)題了,A自己的向量時(shí)

鐘是[A:1,B:1,C:1],

而收到更新消息攜帶過(guò)來(lái)的向量時(shí)鐘是[A:1,B:2,C:0],B:2比

B:1新,但是C:0卻比C1舊。這時(shí)候發(fā)生不一致沖

突。不一致問(wèn)題如何解決?向量時(shí)鐘策略并沒(méi)有給出解決辦法,留給用

戶自己去解決,只是告知目前數(shù)據(jù)存在沖突。加上時(shí)間戳是一個(gè)方法,具體方法是再加一個(gè)維度信息,即數(shù)據(jù)更

新的時(shí)間戳

(Timestamp),如[A:1,B:2,C:4,ts:123434354]。如果發(fā)生沖突,再比較一下兩個(gè)數(shù)據(jù)的時(shí)間戳,大的數(shù)值說(shuō)明比較后更新,

選擇它作為最終數(shù)據(jù),并對(duì)向量時(shí)鐘進(jìn)行修正。471.6數(shù)據(jù)復(fù)制與分片NoSQL集群主要通過(guò)數(shù)據(jù)復(fù)制和分片

(Sharding)機(jī)制保障讀取數(shù)據(jù)的并行性,滿足分布容錯(cuò)性的要

求。■

數(shù)據(jù)復(fù)制:

是指將同一份數(shù)據(jù)拷貝至多個(gè)節(jié)點(diǎn)?!?/p>

數(shù)據(jù)分片:是指將不同數(shù)據(jù)存放在不同節(jié)點(diǎn)中?!?/p>

復(fù)制和分片是兩項(xiàng)正交的技術(shù),它們既可以選其一

使用,也可以結(jié)合使用?!?/p>

數(shù)據(jù)復(fù)制的實(shí)現(xiàn)方法與集群架構(gòu)緊密相關(guān),不同類

型的NoSQL數(shù)據(jù)庫(kù)管理系統(tǒng)提供了豐富的參數(shù),對(duì)數(shù)據(jù)復(fù)制需要達(dá)到的能力級(jí)別進(jìn)行選擇性配置,

如保持3個(gè)副本還是5個(gè)副本。481.6數(shù)據(jù)復(fù)制與分片■

客戶端在更新或新增數(shù)據(jù)后,已有數(shù)據(jù)副本之間如

何保持一致以及新增數(shù)據(jù)如何傳播才能達(dá)到數(shù)據(jù)副

本配置要求,是數(shù)據(jù)復(fù)制架構(gòu)重點(diǎn)解決的問(wèn)題。

一般按照集群架構(gòu)的管理模式分為■

主從復(fù)制■

對(duì)等復(fù)制數(shù)據(jù)分片機(jī)制本質(zhì)上解決的是負(fù)載均衡問(wèn)題,盡可

能地將數(shù)據(jù)均勻地分布存儲(chǔ)在不同服務(wù)器上。■

常用算法有輪循(Round

Robin)算法、哈希(HASH)

法、

最少連接(Least

Connection)算法等?!?/p>

一致性哈希(Consistent

Hashing)

是分布式系統(tǒng)負(fù)載均衡

的首選算法,也是最為常用的算法。492006年8月9日,Google

首席執(zhí)行官埃里克·施密特(EricSchmidt)

在搜索引擎大會(huì)(SES

San

Jose

2006)

上首次提出“云計(jì)算”(Cloud

Computing)的概念■

云計(jì)算是利用分布式計(jì)算和虛擬資源管理等技術(shù),通過(guò)網(wǎng)

絡(luò)將分散的IT

資源集中起來(lái)形成共享的資源池,以動(dòng)態(tài)、

按需和可度量的方式向用戶提供服務(wù)?!鲈品?wù):即將基礎(chǔ)設(shè)施作為服務(wù)

(Infrastructure

as

a

Service

,IaaS)、

將平臺(tái)作為服務(wù)(Platform

as

a

Service,PaaS)

將軟件作為服務(wù)(Software

as

a

Service,SaaS)

等?!鲈朴?jì)算技術(shù)與大數(shù)據(jù)技術(shù)是相輔相成、互相促進(jìn)的關(guān)系。1.7

NoSQL數(shù)據(jù)庫(kù)與云計(jì)算50■

NoSQL

數(shù)據(jù)庫(kù)是重要的大數(shù)據(jù)存儲(chǔ)技術(shù)■

云計(jì)算技術(shù)■

一方面為不同類型的NoSQL

數(shù)據(jù)庫(kù)架構(gòu)中的資源管理與

負(fù)載均衡調(diào)度等機(jī)制提供了技術(shù)參考和支撐,如Hadoop

生態(tài)中的HBase數(shù)據(jù)庫(kù)內(nèi)置了Zookeeper實(shí)現(xiàn)集群的協(xié)調(diào)

一致性資源管理;■

另一方面,云服務(wù)供應(yīng)商提供了不同類型的NoSQL

數(shù)據(jù)

庫(kù)服務(wù),用戶可以通過(guò)購(gòu)買服務(wù)的方式使用NoSQL

數(shù)據(jù)

庫(kù),相比自己購(gòu)買服務(wù)器搭建并維護(hù)NoSQL

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

來(lái)講更加經(jīng)濟(jì)便捷。■

國(guó)內(nèi):BATHJ,……■國(guó)外:谷歌、亞馬遜、微軟,5……1.7

NoSQL數(shù)據(jù)庫(kù)與云計(jì)算1.8NoSQL數(shù)據(jù)庫(kù)與物聯(lián)網(wǎng)■

互聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)、物聯(lián)網(wǎng)結(jié)合5G

通信技術(shù)、云

計(jì)算、AI

等的發(fā)展將進(jìn)一步促進(jìn)物理世界、信息世界

、人類社會(huì)之間的互聯(lián)互通與智能互動(dòng)Virtual

Reality5GPartner-Connectivity

Services

M2M/loTCustomer

Engagement

Business

Model

EnablementAnalyticsPartnerEcosystemIntegration

Framework&APls■

物聯(lián)網(wǎng)感知大數(shù)據(jù)的存儲(chǔ)離不開(kāi)NoSQL

技術(shù)的支持1.8

NoSQL數(shù)據(jù)庫(kù)與物聯(lián)網(wǎng)物聯(lián)網(wǎng)是一個(gè)基于互聯(lián)網(wǎng)、傳統(tǒng)電信網(wǎng)等的信息承

載體,讓所有能夠被獨(dú)立尋址的普通物理對(duì)象可以

互聯(lián)互通?!?/p>

物聯(lián)網(wǎng)技術(shù)體系:主要包括整體感知、可靠傳輸和

智能處理三方面的關(guān)鍵技術(shù)。■

物聯(lián)網(wǎng)感知大數(shù)據(jù)的智能處理離不開(kāi)NoSQL

高性

能大數(shù)據(jù)存儲(chǔ)技術(shù)的支持,物聯(lián)網(wǎng)感知數(shù)據(jù)具有典

型的空間時(shí)序特征。NoSQL

數(shù)據(jù)庫(kù)中與實(shí)時(shí)流數(shù)據(jù)處理技術(shù)框架相適

應(yīng)的時(shí)序類型數(shù)據(jù)庫(kù)能夠很好地匹配物聯(lián)網(wǎng)感知數(shù)

據(jù)的存儲(chǔ)需求。531.9

NoSQL數(shù)據(jù)庫(kù)與區(qū)塊鏈■

區(qū)

(Blockchain)是分布式數(shù)據(jù)存儲(chǔ)、點(diǎn)對(duì)點(diǎn)(

P2P)

傳輸、共識(shí)機(jī)制、加密算法等計(jì)算機(jī)技術(shù)的新

型應(yīng)用模式。Equity股權(quán)Private

Markets

G

私有市場(chǎng)Debt債券Crowdfundingacts

區(qū)

鏈每

Healthcare健康護(hù)理Title

Records權(quán)屬登記OwnershipRemittance匯款P2P

LendingP2P

借貸-

Microfinance

微金融Derivatives

IntellectualPropertyE-commerceGlobal

PaymentsWagers博彩Escrow托管支付Digital

Rights數(shù)字權(quán)益BlockchainVotingX要541.9

NoSQL數(shù)據(jù)庫(kù)與區(qū)塊鏈區(qū)塊鏈本質(zhì)上是一個(gè)去中心化的數(shù)據(jù)庫(kù),是一串使

用密碼學(xué)方法相關(guān)聯(lián)產(chǎn)生的數(shù)據(jù)塊,每一個(gè)數(shù)據(jù)塊

中包含了一批網(wǎng)絡(luò)交易的信息,用于驗(yàn)證其信息的

防偽有效性。區(qū)塊鏈系統(tǒng)上的節(jié)點(diǎn),可以是不同組織的、彼此無(wú)

須信任;區(qū)塊鏈數(shù)據(jù)由所有節(jié)點(diǎn)共同維護(hù),每個(gè)參與維護(hù)的

節(jié)點(diǎn)都能復(fù)制獲得一份完整記錄的拷貝。區(qū)塊鏈技術(shù)旨在提供天然可信的分布式賬本平臺(tái),不需要第三方中介機(jī)構(gòu)。■

特點(diǎn):分布式容錯(cuò)性、不可篡改性、隱私保護(hù)性。551.9

NoSQL數(shù)據(jù)庫(kù)與區(qū)塊鏈區(qū)

塊鏈技術(shù)是金融領(lǐng)域、征信領(lǐng)域、共享經(jīng)濟(jì)、知

識(shí)產(chǎn)權(quán)保護(hù)等領(lǐng)域的研究熱點(diǎn)。區(qū)塊鏈對(duì)等分布式架構(gòu)中的一致性問(wèn)題與采用對(duì)等

集群架構(gòu)的某些NoSQL數(shù)據(jù)庫(kù)有一定的相似性,核心算法思想可以互相借鑒?!?/p>

與NoSQL

數(shù)據(jù)庫(kù)相區(qū)別的是區(qū)塊鏈分布式架構(gòu)中

每個(gè)節(jié)點(diǎn)中存儲(chǔ)的不僅僅是數(shù)據(jù)本身,還包含數(shù)據(jù)

的來(lái)源信息,隨著區(qū)塊鏈節(jié)點(diǎn)規(guī)模的增加,數(shù)據(jù)操

作往往會(huì)存在較大延遲?!?/p>

為了提高事務(wù)處理性能,區(qū)塊鏈技術(shù)架構(gòu)中也引入

鍵值數(shù)據(jù)庫(kù)、文檔數(shù)據(jù)庫(kù)等NoSQL

存儲(chǔ)技術(shù)。56重點(diǎn)掌握NoSQL基本概念、CAP定理熟悉NoSQL種類與特點(diǎn)重點(diǎn)掌握四類:圖、文檔、鍵值、列族■

掌握ACID

與BASE

的區(qū)別■

掌握最終一致性經(jīng)典算法思想

Quorum的NWR策略Paxos算法Raft算法向量時(shí)鐘掌握數(shù)據(jù)復(fù)制與分片機(jī)制的作用■

解NoSQL

與云計(jì)算、物聯(lián)網(wǎng)、區(qū)塊鏈的關(guān)系1.10本章小結(jié)NoSQL

數(shù)據(jù)庫(kù)技術(shù)BEDING

UNIVERSITYOFPOSTSANDTELECOMMUNICATIONS3

屬性圖模型1

概述62

小結(jié)5

圖數(shù)據(jù)庫(kù)應(yīng)用4

圖數(shù)據(jù)庫(kù)查詢語(yǔ)言2

圖關(guān)鍵數(shù)據(jù)存儲(chǔ)邏輯架構(gòu)目錄592.1圖數(shù)據(jù)庫(kù)概述■

現(xiàn)實(shí)世界中一切事物都處在聯(lián)系之中,如:■

各個(gè)領(lǐng)域人際關(guān)系、組織機(jī)構(gòu)關(guān)系;■

互聯(lián)網(wǎng)中電腦網(wǎng)絡(luò)關(guān)系、網(wǎng)頁(yè)間鏈接關(guān)系等;■

物聯(lián)網(wǎng)中:人與物關(guān)系;物與物的關(guān)系等;■

復(fù)雜關(guān)系圖的抽象無(wú)處不在。節(jié)點(diǎn)及其間關(guān)系隨著時(shí)間不斷動(dòng)態(tài)變化。為了挖掘

實(shí)時(shí)動(dòng)態(tài)大圖復(fù)雜關(guān)系中蘊(yùn)藏著的潛在知識(shí),涌現(xiàn)

出很多著名的圖結(jié)構(gòu)大數(shù)據(jù)計(jì)算框架,如Pregel、Hama

、GraphLab

、Spark

GraphX

、Flink

Gelly等?!?/p>

圖數(shù)據(jù)的高性能管理與計(jì)算離不開(kāi)圖數(shù)據(jù)存儲(chǔ)技術(shù)的協(xié)同助力?!?/p>

但傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)更加注重刻畫(huà)實(shí)體內(nèi)部的屬

性,實(shí)體與實(shí)體之間的關(guān)系往往需要通過(guò)外鍵來(lái)實(shí)

現(xiàn),查詢實(shí)體關(guān)系時(shí)需要多級(jí)Join操作,非常耗時(shí)?!?/p>

為了降低圖數(shù)據(jù)運(yùn)算復(fù)雜性,提升圖數(shù)據(jù)處理的性

能,圖數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生。2.1圖數(shù)據(jù)庫(kù)概述2.1圖數(shù)據(jù)庫(kù)概述■圖數(shù)據(jù)庫(kù)是以實(shí)體及其關(guān)系為主要存儲(chǔ)對(duì)象

的數(shù)據(jù)庫(kù)系統(tǒng),存儲(chǔ)圖結(jié)構(gòu)的數(shù)據(jù)具有突出

優(yōu)

勢(shì)

?!鰣D數(shù)據(jù)庫(kù)中核心數(shù)據(jù)要素節(jié)

點(diǎn)

(Vertex)

:

指不同應(yīng)用領(lǐng)域中人、事件、物品、地點(diǎn)、組織等業(yè)務(wù)實(shí)體。如

電信領(lǐng)域中的客戶、用戶、套餐產(chǎn)品、供

貨商、卡號(hào)資源等,影視娛樂(lè)領(lǐng)域中的演

員、導(dǎo)演、電影、劇場(chǎng)等。2.1圖數(shù)據(jù)庫(kù)概述■圖數(shù)據(jù)庫(kù)中核心數(shù)據(jù)要素(續(xù))

(Edge)

:

指節(jié)點(diǎn)之間的關(guān)系?!鲇嗁?gòu)關(guān)系■朋友關(guān)系■道路連通關(guān)系■演員與電影之間的參演關(guān)系■計(jì)算機(jī)與計(jì)算機(jī)之間的網(wǎng)絡(luò)連接關(guān)系■物品與物品之間的構(gòu)成關(guān)系■銀行賬號(hào)之間的轉(zhuǎn)賬關(guān)系

■等

等圖數(shù)據(jù)庫(kù)中核心數(shù)據(jù)要素(續(xù))■屬性

(Property):

指描述節(jié)點(diǎn)或邊特征的信生

的屬性

?2.1圖數(shù)據(jù)庫(kù)概述■圖數(shù)據(jù)庫(kù)中核心數(shù)據(jù)要素僉

(

L

a

bel)

:指節(jié)點(diǎn)

、天系

的類別。如

節(jié)

點(diǎn)

節(jié)

點(diǎn)

標(biāo)

;下

點(diǎn)

標(biāo)

個(gè)

,

、

點(diǎn)

上人

T

示不問(wèn)尖

反大系、參演大系寺,有

時(shí)

區(qū)

標(biāo)

門(mén)

節(jié)

點(diǎn)

標(biāo)

,

的別

,2.1圖數(shù)據(jù)庫(kù)概述2.1圖數(shù)據(jù)庫(kù)概述■圖靈獎(jiǎng)獲得者Charles

Bachman—

網(wǎng)狀數(shù)據(jù)庫(kù)之父早在1970年就提

出網(wǎng)狀數(shù)據(jù)庫(kù),模型表達(dá)能力很

強(qiáng),但結(jié)構(gòu)復(fù)雜、查詢語(yǔ)言不易

掌握和使用,數(shù)據(jù)操作也較為復(fù)

雜,并未普及開(kāi)來(lái)?!?/p>

大數(shù)據(jù)時(shí)代圖無(wú)處不在,圖數(shù)據(jù)

庫(kù)技術(shù)如雨后春筍般高速發(fā)展,

用以支持圖數(shù)據(jù)的事務(wù)型處理和

分析型處理。網(wǎng)狀數(shù)據(jù)庫(kù)之父、

圖靈獎(jiǎng)獲得者—

Charles

Bachman□

include

secondary

databasemodels34systems

in

ranking,November

2019RankNov

(

Oct

Nov

201920192018DBMSDatabase

ModelScoreNov

2019Oct

Nov

201920181.

1.1.Neo4j+Graph50.53+1.07+7.412.

2.2.MicrosoftAzureCosmosDB+Multi-model31.98+0.65+9.943.

3.3.OrientDBMulti-model

L5.38

+0.25-0.414.

4.4.ArangoDB+Multi-model

i5.02

+0.14

+0.875.

5.5.Virtuoso+Multi-model2.63

-0.09+0.266.

6.6.JanusGraphGraph1.80

+0.15+0.687.7.個(gè)8

.Amazon

NeptuneMulti-model1.60

+0.23

+0.558.

8.個(gè)9.GraphDB+Multi-model

C1.13

+0.02

+0.459.

9.個(gè)12.Dgraph

+Graph1.04

-0.03+0.5310.個(gè)11.個(gè)1

4.TigerGraph

+Graph1.01

+0.07

+0.60■DB-Engines

Ranking發(fā)布的2019年11月圖數(shù)據(jù)庫(kù)(Graph

DBMS)排

名https://db-engines.com/en/ranking/graph+dbms2.1圖數(shù)據(jù)庫(kù)概述■

圖數(shù)據(jù)庫(kù)按照底層采用的存儲(chǔ)技術(shù)分為兩類?!鲈鷪D存儲(chǔ)類■采用非關(guān)系模型,并針對(duì)圖數(shù)據(jù)專門(mén)進(jìn)行了性能優(yōu)化■一般采用免索引鄰接的方式進(jìn)行圖數(shù)據(jù)存儲(chǔ),數(shù)據(jù)存儲(chǔ)

機(jī)制可快速尋址定位到相關(guān)連的節(jié)點(diǎn)、關(guān)系,此種存儲(chǔ)

方式性能大大提高,可以很好地支持原生圖處理引擎進(jìn)

行圖數(shù)據(jù)計(jì)算,秒級(jí)

可遍歷百萬(wàn)級(jí)節(jié)點(diǎn)。此類數(shù)據(jù)庫(kù)典

型代表為Neo4j、TigerGraph等。■

非原生圖存儲(chǔ)類■指底層采用鍵值數(shù)據(jù)庫(kù)、文檔數(shù)據(jù)庫(kù)、列族數(shù)據(jù)庫(kù)或者其他類型通用數(shù)據(jù)庫(kù)存儲(chǔ)圖數(shù)據(jù)。■通常需要建立全局索引來(lái)提高圖數(shù)據(jù)的訪問(wèn)性能。2.1圖數(shù)據(jù)庫(kù)概述2.1圖數(shù)據(jù)庫(kù)概述■圖數(shù)據(jù)庫(kù)面臨的挑戰(zhàn)主要是大規(guī)模圖數(shù)據(jù)的高效存儲(chǔ)與復(fù)雜的圖操作技術(shù)?!霾煌瑘D數(shù)據(jù)庫(kù)實(shí)現(xiàn)技術(shù)與使用方法會(huì)有所差異,圖數(shù)據(jù)庫(kù)包含的共性關(guān)鍵技術(shù)主要包含如下方面■點(diǎn)、邊、屬性等基礎(chǔ)數(shù)據(jù)的CRUD

操作■元數(shù)據(jù)管理、索引管理■事務(wù)管理■查詢語(yǔ)言■節(jié)點(diǎn)ID

生成策略■大規(guī)模數(shù)據(jù)批量操作■基于路徑的圖遍歷操作■

監(jiān)控管理、備份與恢復(fù)操作等目前排名第一的Neo4j數(shù)據(jù)庫(kù)是用Java實(shí)現(xiàn)的開(kāi)源圖數(shù)據(jù)庫(kù)。曰

2

0

5

,

Z

0

0

7

及巾1

,

開(kāi)B

i

D

。力品區(qū)版和正業(yè)放,社區(qū)版八又持平機(jī)卟者,能

限。正

業(yè)又付土從及制以與刀溝,巴百丁官理

一共寸文十田、獨(dú)人的

能。床柱土女人INCU4J例刀治日奴佰件個(gè)H大天H以o2.1圖數(shù)據(jù)庫(kù)概述2.2圖關(guān)鍵數(shù)據(jù)存儲(chǔ)邏輯架構(gòu)■從數(shù)據(jù)存儲(chǔ)角度來(lái)講,不同類型的圖數(shù)據(jù)庫(kù)底層的圖數(shù)據(jù)

存儲(chǔ)模型會(huì)有所差異。本節(jié)主要以Neo4j為例來(lái)介紹圖數(shù)據(jù)

庫(kù)的底層存儲(chǔ)模型總體設(shè)計(jì)思路maptorecords

data

inPathsmapto

Relationships

recordsdatainordermapfrom

organizehave

NodeshavePropertiesGraphDatabase

Traversalmanages

manages

navigates

identifiesexpressesIndexesGraphAlgorithm2.2圖關(guān)鍵數(shù)據(jù)存儲(chǔ)邏輯架構(gòu)■節(jié)點(diǎn)之間的關(guān)系通常包含一個(gè)起始節(jié)點(diǎn)、

一個(gè)終止節(jié)點(diǎn)、

關(guān)系類型及0個(gè)或多個(gè)屬性?!鲫P(guān)系類型用名稱作為唯一標(biāo)識(shí)?!雒總€(gè)關(guān)系有且只有一個(gè)關(guān)系類型?!鐾ㄟ^(guò)關(guān)系可以找到很多關(guān)聯(lián)的數(shù)據(jù),比如節(jié)點(diǎn)集合、相同

類型的關(guān)系集合以及它們的屬性集合。A

Relationshiphas

a

has

a

hasacan

haveStart

node

End

node

Relationshiptype

Propertiesuniquelyidentified

byName字符串類型數(shù)據(jù)?!?/p>

屬性值可以是字符型、字

符串型、整數(shù)類型、實(shí)數(shù)

類型等基礎(chǔ)數(shù)據(jù)類型的值

,也可以是元素為基礎(chǔ)數(shù)

據(jù)類型的數(shù)組。但每個(gè)節(jié)點(diǎn)和關(guān)系的屬性

模式又是自由的、不固定

的,每個(gè)節(jié)點(diǎn)或關(guān)系都可

以定義自己特有的描述屬

性;

73A

Propertyhasa

has

aValue

Key(can

be

an

array

ofcanbeais

abooleanbyteshortintPrimitive

longfloatdoublecharString2.2圖關(guān)鍵數(shù)據(jù)存儲(chǔ)邏輯架構(gòu)Neo4j屬性是由Key-Value鍵值對(duì)組成的,鍵名稱

為2.2

圖關(guān)鍵數(shù)據(jù)存儲(chǔ)邏輯架構(gòu)Neo4j

數(shù)據(jù)模型中標(biāo)簽是類別的概念,不同的節(jié)點(diǎn)與關(guān)系可

以具有相同的節(jié)點(diǎn)標(biāo)簽與關(guān)系類型標(biāo)簽■

標(biāo)簽概念可以理解為關(guān)系數(shù)據(jù)庫(kù)中表的概念,通過(guò)標(biāo)簽可以

找到同類型的節(jié)點(diǎn)或關(guān)系。標(biāo)簽示例如圖所示一個(gè)節(jié)點(diǎn)可以具有零個(gè)或多個(gè)類別標(biāo)簽;而一個(gè)關(guān)系必須有

且只有一個(gè)關(guān)系類型。previous

relationshipfor

start

nodeend

nodePerson

Node

1)

LIKESNode

2name:"Alice"name:"Bob"|startrelationship

fornodeendnodePersonage:25next742.2

圖關(guān)鍵數(shù)據(jù)存儲(chǔ)邏輯架構(gòu)Neo

4j每條路徑由一個(gè)起始節(jié)點(diǎn)、一個(gè)終止節(jié)點(diǎn)、從起始節(jié)點(diǎn)到終止節(jié)點(diǎn)經(jīng)過(guò)的1條或多條邊及關(guān)聯(lián)

節(jié)點(diǎn)構(gòu)成。圖中任意兩個(gè)節(jié)點(diǎn)間如果是可達(dá)的,則

兩節(jié)點(diǎn)間存在一條或多條路徑。A

Pathhas

acan

contain

one

or

morehasanStart

Node

RelationshipEndNodeaccompanied

by

aNode752.2圖關(guān)鍵數(shù)據(jù)存儲(chǔ)邏輯架構(gòu)路徑的長(zhǎng)度指路徑中包含邊的數(shù)量,如圖所示,

節(jié)點(diǎn)1到節(jié)點(diǎn)2的路徑長(zhǎng)度為1,節(jié)點(diǎn)1到節(jié)點(diǎn)7的路

徑長(zhǎng)度為2。

節(jié)點(diǎn)1節(jié)點(diǎn)2

節(jié)點(diǎn)3

節(jié)點(diǎn)4節(jié)點(diǎn)5節(jié)點(diǎn)6

節(jié)點(diǎn)7節(jié)點(diǎn)8遍歷一張圖就是按照一定的查詢規(guī)則,跟隨關(guān)系,

訪問(wèn)關(guān)聯(lián)的節(jié)點(diǎn)集合。大多數(shù)情況下只是部分和圖

數(shù)據(jù)操作相關(guān)的子圖內(nèi)容被訪問(wèn)到?!鯪eo4j提供了遍歷的API,可以指定遍歷規(guī)則,如按

照廣度優(yōu)先還是深度優(yōu)先遍歷圖數(shù)據(jù)2.2

圖關(guān)鍵數(shù)據(jù)存儲(chǔ)邏輯架構(gòu)對(duì)于能夠抽象成節(jié)點(diǎn)及其關(guān)系的典型圖結(jié)構(gòu)數(shù)據(jù)而言

,利用圖數(shù)據(jù)模型采用圖數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ)的性能優(yōu)勢(shì)

。■

關(guān)系是最重要的元素,通過(guò)關(guān)系將節(jié)點(diǎn)相互關(guān)聯(lián)起來(lái)

,Neo4j

有一個(gè)重要的特點(diǎn)是將關(guān)系預(yù)先保存到關(guān)系

列表中的免索引鄰接機(jī)制,來(lái)保證關(guān)系查詢的性能。

Neo4j數(shù)據(jù)庫(kù)中的每個(gè)節(jié)點(diǎn)都會(huì)維護(hù)與它相鄰節(jié)點(diǎn)的

引用。因此每個(gè)節(jié)點(diǎn)都相當(dāng)于與它相鄰節(jié)點(diǎn)的微索引

,查詢時(shí)間與圖的整體規(guī)模無(wú)關(guān),只與它附近節(jié)點(diǎn)的

數(shù)量成正比,這比使用全局索引的代價(jià)小很多。77■

圖數(shù)據(jù)庫(kù)作為NoSQL

中重要的一類,靈活的圖數(shù)據(jù)

存儲(chǔ)模型是其突出的特點(diǎn),不強(qiáng)調(diào)必須先設(shè)計(jì)完備

的圖數(shù)據(jù)存儲(chǔ)模型再存儲(chǔ)數(shù)據(jù)。但從基于圖數(shù)據(jù)庫(kù)進(jìn)行應(yīng)用系統(tǒng)架構(gòu)設(shè)計(jì)角度,仍

需要借助一定的建模方法,對(duì)業(yè)務(wù)需求進(jìn)行分析,

從業(yè)務(wù)管理功能、業(yè)務(wù)流程中梳理出圖結(jié)構(gòu)業(yè)務(wù)數(shù)

據(jù)并采用一定的形式化方法進(jìn)行建模表述。■

用簡(jiǎn)單、清晰的描述方法使得業(yè)務(wù)人員與技術(shù)人員對(duì)圖數(shù)據(jù)存儲(chǔ)模型達(dá)成共識(shí),從而降低項(xiàng)目實(shí)施風(fēng)險(xiǎn)

。■

模型可以根據(jù)業(yè)務(wù)需求隨時(shí)改變。2.3屬性圖模型78對(duì)比角度關(guān)系數(shù)據(jù)模型圖數(shù)據(jù)模型數(shù)據(jù)結(jié)構(gòu)關(guān)系模型:表、字段、主鍵、外鍵、關(guān)聯(lián)屬性圖模型:節(jié)點(diǎn)、邊、屬性、標(biāo)簽數(shù)據(jù)操作關(guān)系代數(shù):并、交、差、

笛卡爾積、選擇、投影、連

接等圖代數(shù):可達(dá)性查詢;

最短路徑查詢;圖節(jié)點(diǎn)、

邊、關(guān)系的增、刪、改、

查、排序等數(shù)據(jù)的完

整性約束條件實(shí)體完整性、參照完整性、用戶自定義完整性條件約束:唯一性約束,如標(biāo)簽為Person的電話號(hào)碼屬性不能重復(fù)等2.3屬性圖模型■圖數(shù)據(jù)模型與關(guān)系數(shù)據(jù)模型差別較大,對(duì)比如表所示792.3屬性圖模型■

Neo4j中

的NorthWind數(shù)據(jù)集實(shí)體關(guān)系模型Order

Details7

OrderID

ProductID

UnitPriceQuantityDiscountOrders

訂單置OrderIDCustomerIDEmployeeIDOrderDateRequiredDateShippedDateShipViaFreightShipNameShipAddressShipCityShipRegionShipPostalCodeShipCountryShippers

ShipperIDCompanyNamePhoneCategories

CategoryIDCategoryNameDescriptionPicture客戶CustomersCustomerIDCompanyNameContactNameContactTiteAddressCityRegionPostalCodeCountryPhoneFaxCustomerCustomerDemo

CustomerID

CustomerTypeIDCustomerDemographicsCustomerTypeIDCustomerDesc產(chǎn)品

Products

ProductID

ProductNameSupplierIDCategoryIDQuantityPerUnitUnitPriceUnitsInStock

UnitsOnOrder

ReorderLevel

DiscontinuedEmployees

EmployeeID

LastNameFirstNameTiteTiteOfCourtesyBirthDateHireDateAddressCityRegionPostalCode

CountryHomePhone

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論