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

詳解分布式數(shù)據(jù)庫系統(tǒng)

數(shù)據(jù)庫 MySQL
關(guān)系型數(shù)據(jù)庫一直是信息技術(shù)發(fā)展的主流。隨著大數(shù)據(jù)的出現(xiàn),由于關(guān)系型數(shù)據(jù)庫在應(yīng)對大數(shù)據(jù)時遇到挑戰(zhàn),因而在面向某些特定場景時,全新的NoSQL數(shù)據(jù)庫技術(shù)開始興起。

?當(dāng)前存在為各種專門場景設(shè)計的數(shù)據(jù)庫系統(tǒng),在實踐中可以依據(jù)具體應(yīng)用的規(guī)模、復(fù)雜性和功能需求來選擇合適的數(shù)據(jù)庫。這與早期信息化解決方案中“用一套Oracle數(shù)據(jù)庫解決所有問題”形成鮮明的對比。數(shù)據(jù)庫有增、查、改、刪四大操作,簡稱CRUD(Create、Read、Update、Delete)操作。不同的數(shù)據(jù)庫技術(shù)設(shè)計的本質(zhì)都是對這四種操作的性能進行優(yōu)化和平衡。

1.關(guān)系型數(shù)據(jù)庫與NoSQL

關(guān)系型數(shù)據(jù)庫一直是信息技術(shù)發(fā)展的主流。隨著大數(shù)據(jù)的出現(xiàn),由于關(guān)系型數(shù)據(jù)庫在應(yīng)對大數(shù)據(jù)時遇到挑戰(zhàn),因而在面向某些特定場景時,全新的NoSQL數(shù)據(jù)庫技術(shù)開始興起。NoSQL數(shù)據(jù)庫能夠提供豐富的數(shù)據(jù)模型支持,可實現(xiàn)大吞吐量“讀”或“寫”的高效率,以及良好的擴展性。NoSQL數(shù)據(jù)庫技術(shù)普遍選擇犧牲支持復(fù)雜的SQL及ACID事務(wù)來換取彈性擴展能力,通常不保證強一致性,但支持最終一致性。與此同時,關(guān)系型數(shù)據(jù)庫也在不斷演進,通過支持列式存儲模式、MPP分布式架構(gòu),在保持一定關(guān)系數(shù)據(jù)處理能力的基礎(chǔ)上,也能夠?qū)崿F(xiàn)良好的分析性能支持。在關(guān)系型數(shù)據(jù)庫技術(shù)與NoSQL數(shù)據(jù)庫技術(shù)之間,不同路線的技術(shù)不是完全的替代關(guān)系,而是互補關(guān)系,綜合運用可以更好地應(yīng)對不同場景的需求。

(1)關(guān)系型數(shù)據(jù)庫理論及優(yōu)勢

關(guān)系型數(shù)據(jù)庫(Relational Database)是建立在嚴(yán)謹(jǐn)?shù)年P(guān)系數(shù)據(jù)模型基礎(chǔ)上的,支持強事務(wù),通過統(tǒng)一結(jié)構(gòu)化語言(SQL)操作。關(guān)系型數(shù)據(jù)庫主要面向事務(wù)(Transaction)設(shè)計,要求保證事務(wù)過程(Transaction Processing)的正確執(zhí)行與數(shù)據(jù)的正確性,即使執(zhí)行過程中遇到出錯、斷點、系統(tǒng)崩潰等異常也是如此。關(guān)系型數(shù)據(jù)庫嚴(yán)格遵循ACID原則。

原子性(Atomicity):保證一個事務(wù)被看作一個單元,事務(wù)中的所有操作,要么全部完成,數(shù)據(jù)庫更新到新的狀態(tài),要么全部不完成,數(shù)據(jù)庫狀態(tài)保持不變。

一致性(Consistency):保證一個事務(wù)執(zhí)行前后的數(shù)據(jù)庫狀態(tài)都是有效的。有效狀態(tài)(Valid State)是指事務(wù)完成后數(shù)據(jù)庫的數(shù)據(jù)符合所有預(yù)定義的規(guī)則:約束(Constraint)、級聯(lián)(Cascades of Rollback)、觸發(fā)器(Trigger)及其任意組合。一致性可以阻止數(shù)據(jù)庫被非法的事務(wù)所破壞,例如參照完整性(Referential Integrity)保證了主鍵-外鍵關(guān)系。一致性并不保證從應(yīng)用層看事務(wù)是正確的。

隔離性(Isolation),又稱獨立性:保證事務(wù)并發(fā)執(zhí)行與串行執(zhí)行所獲得的數(shù)據(jù)庫狀態(tài)相同。為了提高數(shù)據(jù)庫的處理效率,事務(wù)通常需要并行執(zhí)行,例如多個事務(wù)同時讀取和寫入一個表。為了保持隔離性,需要對事務(wù)進行并發(fā)控制,不同級別的控制方法提供不同的效率與事務(wù)間影響的平衡。

?持久性(Durability):保證一旦事務(wù)被提交,即使存在系統(tǒng)故障,事務(wù)也一定是生

效的。

為實現(xiàn)以上原則,數(shù)據(jù)庫需要實現(xiàn)同步鎖、多版本并發(fā)控制(MVCC)、日志(Log)等功能,例如在提交事務(wù)前,先把事務(wù)寫入WAL(Write Ahead Log)。關(guān)系型數(shù)據(jù)庫無論是在理論,還是在技術(shù)、商業(yè)產(chǎn)品、產(chǎn)業(yè)生態(tài)方面都十分成熟,易于理解、方便使用、維護簡單,除了支持事務(wù),也支持一定量級的分析應(yīng)用。

(2)關(guān)系型數(shù)據(jù)庫在應(yīng)對大數(shù)據(jù)時遇到的挑戰(zhàn)

關(guān)系型數(shù)據(jù)庫技術(shù)難以應(yīng)對數(shù)據(jù)量大、增長速度快、高響應(yīng)時效、內(nèi)容豐富等大數(shù)據(jù)場景的數(shù)據(jù)處理要求,舉例如下。

低延遲高并發(fā):大數(shù)據(jù)時代要求支持海量數(shù)據(jù)的高效存儲和訪問,但關(guān)系型數(shù)據(jù)庫受事務(wù)、架構(gòu)約束,隨著數(shù)據(jù)量的增長,其讀寫性能會迅速下降,難以實現(xiàn)高并發(fā)、實時動態(tài)大數(shù)據(jù)量的獲取和更新。

擴展性:大數(shù)據(jù)時代用戶量可能出現(xiàn)爆發(fā)式增長,需要數(shù)據(jù)系統(tǒng)具有快速擴展的能力,而關(guān)系型數(shù)據(jù)庫難以方便、靈活、短周期、低成本地滿足這一需求。

模型自由:對于半結(jié)構(gòu)化(如JSON)、非結(jié)構(gòu)化數(shù)據(jù)(如文檔、影像),關(guān)系型數(shù)據(jù)庫只能將其存儲為一個二進制數(shù)據(jù)塊,無法支持對數(shù)據(jù)內(nèi)容的檢索、分析等處理。

大規(guī)模的數(shù)據(jù)讀?。涸谶M行數(shù)據(jù)統(tǒng)計分析時常常需要批量讀取數(shù)據(jù),隨著數(shù)據(jù)量的增長,傳統(tǒng)關(guān)系數(shù)據(jù)庫在需要批量掃描對數(shù)據(jù)進行讀取時效率不足。

常見的解決方案有兩種:縱向擴展(Scale Up)與橫向擴展(Scale Out)。對于關(guān)系型數(shù)據(jù)庫,縱向擴展是提升單服務(wù)器的性能,這是IOE(IBM、Oracle、EMC)類廠商給大型銀行等機構(gòu)提供的常見一體機解決方案,上限瓶頸明顯,且成本高昂;橫向擴展是通過讀寫分離、分庫分表等方法在數(shù)據(jù)庫設(shè)計與應(yīng)用層實現(xiàn)的,這會使得應(yīng)用層實現(xiàn)、維護都變得十分復(fù)雜和僵化,無法應(yīng)對需求的快速變化。隨著數(shù)據(jù)量的不斷增長,我們需要不斷調(diào)整方案,效率十分低下,且容易出錯。

(3)NoSQL數(shù)據(jù)庫的特點

NoSQL主要指非關(guān)系型、分布式、不提供ACID的數(shù)據(jù)庫設(shè)計模式,支持快速大規(guī)模的水平擴展。對NoSQL最普遍的解釋是“非關(guān)系型的”。NoSQL是一組相互非常不同的數(shù)據(jù)庫系統(tǒng)的泛稱,并且難以用一個分類去劃分。NoSQL數(shù)據(jù)庫的數(shù)據(jù)模型主要包括鍵-值模型(Key-Value)、列族模型(Wide Column)、文檔模型(Document)、圖模型(Graph)。另外,DB-ENGINES網(wǎng)站將搜索引擎(Search Engine)系統(tǒng)也視為NoSQL數(shù)據(jù)庫,但嚴(yán)格來講,搜索引擎并不是普遍意義上的數(shù)據(jù)庫。DB-ENGINES網(wǎng)站還認(rèn)為NoSQL包含RDF存儲庫、Native XML DBMS、內(nèi)容存儲庫。

通過放松標(biāo)準(zhǔn)關(guān)系數(shù)據(jù)模型、ACID原則要求支持,NoSQL數(shù)據(jù)庫具有如下優(yōu)點:

更高的性能;

易于在不同節(jié)點上分布數(shù)據(jù)(如分片),從而實現(xiàn)擴展性(scalability)和容錯能力(fault tolerance);

通過使用無模式(schema-free)的數(shù)據(jù)模型來提高靈活性;

管理簡化。

2.鍵-值模型數(shù)據(jù)庫

當(dāng)前鍵-值數(shù)據(jù)庫使用極其廣泛,適用于高性能緩存場景,例如會話、用戶配置、購物車等場景的數(shù)據(jù)存儲,單條超低延遲讀/寫,高并發(fā)要求,內(nèi)容簡單且相互獨立,但不適用于事務(wù)處理、多鍵關(guān)聯(lián)數(shù)據(jù)、統(tǒng)計分析。Amazon的工程師對他們自己的數(shù)據(jù)庫查詢和使用情況進行了分析,發(fā)現(xiàn)70%的工作負(fù)載都是單鍵值操作,而且鍵值操作很少使用Oracle數(shù)據(jù)庫提供的關(guān)系功能,另外20%的工作負(fù)載訪問也僅限于一個表,只有10%的工作負(fù)載需要跨多個鍵訪問數(shù)據(jù)而使用到關(guān)系型數(shù)據(jù)庫的功能。

(1)鍵-值模型簡介

從使用方式來看,鍵-值模型數(shù)據(jù)庫是最簡單的NoSQL數(shù)據(jù)庫??蛻舳丝梢愿鶕?jù)鍵對其所對應(yīng)的值進行CRUD操作。鍵值數(shù)據(jù)庫支持的鍵值類型十分豐富。

鍵-值模型極大地簡化了傳統(tǒng)的關(guān)系數(shù)據(jù)模型,相當(dāng)于只有兩個字段的表。鍵-值模型的實現(xiàn)類似于Map結(jié)構(gòu),在鍵和值間建立映射關(guān)系。鍵-值模型數(shù)據(jù)庫面向高效訪問場景,使用非常廣泛,典型的如Memcached、Redis、DynamoDB。

(2)Redis

Redis是開源的、鍵-值模型NoSQL數(shù)據(jù)庫,適合在高速響應(yīng)場景下作為數(shù)據(jù)緩存使用,同時提供持久化數(shù)據(jù)的能力。Redis集群使用主從架構(gòu)實現(xiàn)高可用。

Redis不是簡單的鍵值存儲數(shù)據(jù)庫,而是一個數(shù)據(jù)結(jié)構(gòu)服務(wù)器。這里的值不局限于簡單的字符串,還包括幾種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。Redis的每條記錄都有一個鍵和一個值。鍵是二進制安全的,這意味著可以使用任何二進制序列作為鍵,如可以是一個字符串,也可以是一個JPEG圖片文件的內(nèi)容,最大支持512MB,但太長的鍵會影響存儲效率和查詢效率。值支持五種數(shù)據(jù)結(jié)構(gòu)類型:String、List、Hash、Set、Zset。不同數(shù)據(jù)結(jié)構(gòu)類型的說明如下。

  • List是按照插入順序排列的字符串列表。
  • Hash是字段和值都是String類型的映射表。
  • Set是成員為String類型的不重復(fù)無序集合。
  • Zset(或Sorted set)與Set的區(qū)別是每個元素關(guān)聯(lián)一個分值,元素按分值從小到大排序。

為了支持多種值類型、優(yōu)化存儲、內(nèi)存回收、共享對象等功能,Redis的值存儲使用一個內(nèi)部定義的RedisObject結(jié)構(gòu)體。該結(jié)構(gòu)體包括五個字段:值的數(shù)據(jù)結(jié)構(gòu)類型(type)、內(nèi)部編碼格式(encoding)、最后一次訪問時間(lru)、被引用次數(shù)(refcount)、值或值的指針(*ptr)。該結(jié)構(gòu)體在64位系統(tǒng)中占16個字節(jié)。Redis支持多種數(shù)據(jù)結(jié)構(gòu)類型,在不同的使用場景,Redis會選擇合適的內(nèi)部編碼,以節(jié)省內(nèi)存或優(yōu)化性能,最多可以省90%的內(nèi)存(平均為50%),并且這對于用戶和API來說是透明的。內(nèi)部編碼涉及如下內(nèi)容。

String有三種內(nèi)部編碼:int(8字節(jié))、embstr(≤44字節(jié))、raw(>44字節(jié))。

當(dāng)List的元素較少時,使用ziplist(壓縮列表)存儲;當(dāng)元素增多,超過配置的閾值時,List會自動轉(zhuǎn)換為linkedlist(雙向鏈表)存儲。ziplist是Redis為了節(jié)約內(nèi)存而專門開發(fā)的一種連續(xù)的數(shù)據(jù)結(jié)構(gòu)。

同樣,Hash和Zset在數(shù)據(jù)量小時也使用ziplist存儲,當(dāng)超過配置的閾值后會分別轉(zhuǎn)存為hashtable(哈希表)和skiplist(跳躍鏈表)。

當(dāng)Set的元素較少時,使用intset(整數(shù)集合)存儲,當(dāng)超過配置的閾值后則轉(zhuǎn)存為hashtable(哈希表)。

3.列族模型數(shù)據(jù)庫

列族模型數(shù)據(jù)庫能夠支持大量的動態(tài)列,與文檔模型數(shù)據(jù)庫具有相似的無模式特性,但實現(xiàn)方式完全不同。列族可以看作二維的鍵-值存儲。注意,列族模型與列式存儲不是一個概念。列族模型數(shù)據(jù)庫支持低延遲單條數(shù)據(jù)讀寫、高并發(fā)、靈活的表結(jié)構(gòu)調(diào)整,但不適合做需要大規(guī)模批量讀取的統(tǒng)計數(shù)據(jù)分析。

(1)列族模型簡介?

在列族模型數(shù)據(jù)庫中預(yù)先定義的是列族而不是列。一個列族下可以有很多個列,且每個列族下列的個數(shù)可以不一樣。一個列族下的數(shù)據(jù)存儲在一起。列族在建表的時候定義,一般是不可變的,但在后續(xù)的使用中還可以添加列。列族不需要像關(guān)系型數(shù)據(jù)庫的列那樣預(yù)定義數(shù)據(jù)類型,只要數(shù)據(jù)可以轉(zhuǎn)為字節(jié)數(shù)組即可。比較常見的開源列族模型數(shù)據(jù)庫有Hbase、Cassandra/ScyllaDB。

(2)HBase

HBase的設(shè)計思想來源于2006年Google發(fā)布的Bitable論文。HBase是一個開源、分布式、可擴展、面向列族的NoSQL數(shù)據(jù)庫,主要解決超大規(guī)模數(shù)據(jù)集的實時、隨機訪問等問題,其底層文件存儲基于HDFS。

HBase采用主從架構(gòu),主要由HBase Master(也稱HMaster)和HRegionServer構(gòu)成,同時使用ZooKeeper協(xié)同管理。HBase將表橫向切分來實現(xiàn)分布式存儲,將一個表分為多份(HRegion),同一個表的不同HRegion分布在不同的RegionServer上。HMaster負(fù)責(zé)表的創(chuàng)建、刪除等DDL(數(shù)據(jù)庫定義語言)操作,同時在新表上線、集群啟動、負(fù)載均衡時,負(fù)責(zé)將各個表的HRegion分配至RegionServer上。ZooKeeper維護集群中所有節(jié)點的狀態(tài),比如節(jié)點出現(xiàn)了故障等。

HBase中的表由行和列族構(gòu)成,列族對應(yīng)的邏輯概念是存儲。HBase是先寫內(nèi)存,再將內(nèi)存中的數(shù)據(jù)刷寫至HDFS,因此存儲分為內(nèi)存中的MemStore和HDFS上的StoreFile。HBase架構(gòu)示意圖如圖1所示。

圖片

?

▲圖1 HBase架構(gòu)

4.文檔模型數(shù)據(jù)庫

文檔模型數(shù)據(jù)庫是無模式的,適合處理半結(jié)構(gòu)化數(shù)據(jù),如日志、網(wǎng)頁、內(nèi)容等,無須將文檔解析為獨立字段的表,但支持按文檔內(nèi)的字段進行查詢分析等操作,不適合復(fù)雜事務(wù)場景。

(1)文檔模型簡介

文檔模型數(shù)據(jù)庫用于儲存、檢索和管理面向文檔的信息。與關(guān)系型數(shù)據(jù)庫按字段處理不同,在文檔模型數(shù)據(jù)庫中,文檔是信息處理的基本單位。文檔格式其實是半結(jié)構(gòu)化數(shù)據(jù),一般是鍵值對的一個有序集,支持嵌套結(jié)構(gòu),例如XML、JSON、BSON等。文檔模型沒有預(yù)定義的模式,文檔的鍵和值不要求固定類型和大小。常見的文檔模型數(shù)據(jù)庫有CouchDB、MongoDB等。

(2)MongoDB

MongoDB不需要像關(guān)系型數(shù)據(jù)庫那樣預(yù)定義表結(jié)構(gòu),而是通過BSON將數(shù)據(jù)和結(jié)構(gòu)保存在一起。參考關(guān)系型數(shù)據(jù)庫的庫、表、行、列(字段)等層次,MongoDB的邏輯結(jié)構(gòu)分層依次是庫、集合、文檔、字段,但這些庫、集合的作用與關(guān)系型數(shù)據(jù)庫中的庫、表完全不同,主要是為了便于用戶分類組織管理數(shù)據(jù)。

字段:每個字段包含字段名和字段值兩部分。字段名是字符串類型,區(qū)分大小寫,字段名不能重復(fù)。字段值可以是string、int、long、double、boolean、子文檔、數(shù)組等。

文檔:MongoDB中數(shù)據(jù)的基本存儲單元。文檔使用BSON結(jié)構(gòu)表示,文檔中的字段是有序的,不同序則是不同文檔。每個文檔都有一個默認(rèn)的_id鍵,相當(dāng)于關(guān)系型數(shù)據(jù)庫中的主鍵,默認(rèn)是ObjectId類型。若用戶不顯式定義文檔的_id值,MongoDB會自動生成。

集合:集合由若干條文檔記錄構(gòu)成,集合是無模式的,即集合中的文檔可以擁有不同的結(jié)構(gòu)。在集合上可以對文檔中的字段創(chuàng)建索引。

數(shù)據(jù)庫:一個數(shù)據(jù)庫中可以包含多個集合。

5.圖模型數(shù)據(jù)庫

圖模型數(shù)據(jù)庫適合處理知識圖譜、推薦、反欺詐、物流、社交關(guān)系等場景。近年來,圖模型數(shù)據(jù)庫是各種數(shù)據(jù)庫類型中發(fā)展最快的。當(dāng)前人氣最高的圖模型數(shù)據(jù)庫仍然是2007年發(fā)布的開源圖數(shù)據(jù)庫—Neo4j,但Neo4j不支持橫向擴展,在處理數(shù)據(jù)規(guī)模上受限于單機,集群模式僅用于高可用和提高查詢性能。支持水平擴展的圖模型數(shù)據(jù)庫有從Titan發(fā)展來的JanusGraph,其底層依賴Hbase、ScyllaDB等作為外部存儲。分布式原生圖模型數(shù)據(jù)庫有2019年開源的Nebula和2017年發(fā)布的TigerGraph(未開源)。

(1)圖模型簡介?

圖模型數(shù)據(jù)庫使用圖結(jié)構(gòu)進行語義查詢,主要是使用節(jié)點、邊、屬性來描述和存儲數(shù)據(jù)。圖模型可以高效地存儲實體“關(guān)系”數(shù)據(jù),這個“關(guān)系”與關(guān)系型數(shù)據(jù)庫的含義不同。最常見的關(guān)系數(shù)據(jù)的例子是人與人之間的關(guān)系、知識圖譜。

以圖形式表達(dá)實體之間的關(guān)系非常便于關(guān)系的檢索,無論是正向的還是反向的。如果使用關(guān)系型數(shù)據(jù)庫處理“關(guān)系”數(shù)據(jù),需要使用外鍵將數(shù)據(jù)關(guān)聯(lián)起來,在檢索時需要執(zhí)行表間的JOIN操作,計算成本很高,且不便于反向關(guān)系查找。

圖結(jié)構(gòu)就是頂點、邊以及屬性的集合。

頂點:圖中的節(jié)點,每個頂點會有一個唯一的ID,頂點可以擁有一個或者多個屬性描述。

邊:邊用來連接各個頂點,表達(dá)節(jié)點之間的關(guān)系,邊可以是無方向的,也可以是單向或者雙向的,邊也可以擁有屬性和ID。

圖通常使用鄰接矩陣或鄰接表等存儲模式。鄰接指的是頂點之間的關(guān)系,如果兩個頂點之間有邊,則這兩個點互為鄰接點。鄰接矩陣與鄰接表分別使用數(shù)組與鏈表作為基礎(chǔ)存儲數(shù)據(jù)結(jié)構(gòu),所以數(shù)組與鏈表的優(yōu)缺點就是鄰接矩陣與鄰接表的優(yōu)缺點。

鄰接矩陣使用二維數(shù)組來存儲圖關(guān)系,矩陣的行和列都代表頂點,相同行號和列號對應(yīng)同一個頂點。如果兩個頂點之間存在關(guān)系,則在數(shù)組的相應(yīng)位置存儲相應(yīng)的數(shù)字。對于無向圖,則數(shù)組可以僅僅是0、1值,0代表無關(guān)系,1代表有關(guān)系。使用數(shù)組存放數(shù)據(jù),可以實現(xiàn)數(shù)據(jù)的快速定位和更新,但如果對于頂點量大但邊稀疏的圖,例如路網(wǎng)圖,會存在很大的存儲浪費,因此鄰接矩陣適合頂點少、關(guān)系稠密的關(guān)系圖。

鄰接表使用鏈表存儲圖關(guān)系,頂點信息存儲在一個一維數(shù)組中,數(shù)組的每個元素是一個結(jié)構(gòu)體,對應(yīng)一個頂點,并且每個元素中存儲一個指向該元素鄰接點鏈表的指針。

(2)Neo4j

Neo4j是一個有商業(yè)支持的開源圖模型數(shù)據(jù)庫,它是基于圖原生底層存儲設(shè)計,而不是嫁接在關(guān)系型數(shù)據(jù)庫之上設(shè)計的。Neo4j具有以下特點:ACID事務(wù)處理模式、高可用性、可擴展到數(shù)十億節(jié)點和關(guān)系、通過遍歷可實現(xiàn)高速查詢、強大的圖形搜索能力。Neo4J通過Cypher語言來操作數(shù)據(jù)庫。Cypher是當(dāng)前圖模型數(shù)據(jù)庫領(lǐng)域主流的圖查詢語言之一。

Neo4j不支持?jǐn)?shù)據(jù)規(guī)模的水平擴展,但支持高可用集群模式Neo4j HA。Neo4j由獨立的主數(shù)據(jù)庫(Master)和從數(shù)據(jù)庫(Slave)組成,Master主要負(fù)責(zé)數(shù)據(jù)的寫入,Slave從Master同步數(shù)據(jù)更改,Slave是Master的精確副本,以提高查詢負(fù)載支持。如果Master失效,集群將選舉出新的Leader作為新的Master。

6.搜索引擎系統(tǒng)

搜索引擎系統(tǒng)不是面向數(shù)據(jù)庫場景設(shè)計的,但在某些場景可以替代數(shù)據(jù)庫,作為存儲系統(tǒng),例如文檔數(shù)據(jù)處理、數(shù)據(jù)分析。搜索引擎系統(tǒng)相對于提取數(shù)據(jù)系統(tǒng)具有如下特點:

  • 全文檢索;
  • 詞干提??;
  • 復(fù)雜的搜索表達(dá)式;
  • 搜索結(jié)果的排名和分組;
  • 分布式搜索以實現(xiàn)高可擴展性。

搜索引擎系統(tǒng)需要的存儲空間比其他數(shù)據(jù)庫系統(tǒng)大很多,另外,為了提高搜索的性能,在插入和更新時需要消耗比較多的計算和存儲資源去建立索引。流行的開源搜索引擎系統(tǒng)有Elasticsearch、Solr,這兩個都是在全文檢索引擎工具包Lucene基礎(chǔ)上實現(xiàn)的。

Elasticsearch是一個分布式的開源全文搜索和分析引擎,適用于所有類型的數(shù)據(jù),包括文本、數(shù)字、地理空間、結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。Elasticsearch會存儲文檔并構(gòu)建倒排索引,支持近實時的、快速的全文本搜索,可以找到包含詞匯的全部文檔。它通常與Logstash和Kibana配合使用,Logstash進行日志采集,Kibana做可視化展現(xiàn),合稱為ELK,在日志處理領(lǐng)域應(yīng)用非常廣泛。

7.關(guān)系模型MPP數(shù)據(jù)庫

在需要大規(guī)模數(shù)據(jù)讀取的數(shù)據(jù)分析場景,傳統(tǒng)的單機數(shù)據(jù)庫已無法滿足需求,所以一些數(shù)據(jù)庫廠商推出了MPP數(shù)據(jù)庫一體機,但價格昂貴。這時運行在普通硬件集群上的開源MPP數(shù)據(jù)庫軟件出現(xiàn)了,最典型的就是Greenplum。

(1)Greenplum介紹

Greenplum數(shù)據(jù)庫系統(tǒng)是基于PostgreSQL開源技術(shù)開發(fā)的,實際上是由一組PostgreSQL數(shù)據(jù)庫節(jié)點組合而成,可以作為一個單一數(shù)據(jù)庫管理系統(tǒng)使用。PostgreSQL是功能最為完善、健壯的開源關(guān)系型數(shù)據(jù)庫,因此Greenplum也是所有開源MPP數(shù)據(jù)庫系統(tǒng)中功能支持最為完善的。數(shù)據(jù)庫用戶與Greenplum數(shù)據(jù)庫進行交互,就像與常規(guī)PostgreSQL DBMS進行交互一樣。Greenplum數(shù)據(jù)庫的特點如下所示。

  • 并行數(shù)據(jù)加載;
  • 實現(xiàn)新的查詢規(guī)劃器;
  • 可以使用追加優(yōu)化(append-optimized)存儲;
  • 支持行存儲,也支持列存儲,可以針對每個表來指定。

(2)Greenplum數(shù)據(jù)庫架構(gòu)

Greenplum的設(shè)計初衷是管理大規(guī)模分析數(shù)據(jù)倉庫和BI系統(tǒng)。Greenplum數(shù)據(jù)庫通過在多個服務(wù)器之間分布數(shù)據(jù)和工作負(fù)載來存儲與處理大量數(shù)據(jù),其體系架構(gòu)實際上是由多臺PostgreSQL數(shù)據(jù)庫服務(wù)器組成的矩陣。

Greenplum中的服務(wù)器節(jié)點按功能可分為兩種:Master實例和Segment實例。Greenplum架構(gòu)示意圖如圖2所示。

圖片

▲圖2 Greenplum架構(gòu)

Master是Greenplum數(shù)據(jù)庫系統(tǒng)的入口點,客戶端通過Master上的數(shù)據(jù)庫實例連接并提交SQL語句。Master上存儲全局系統(tǒng)目錄,但不包含任何用戶數(shù)據(jù)。Segment上存儲和處理實際數(shù)據(jù),它是獨立的PostgreSQL數(shù)據(jù)庫,每個數(shù)據(jù)庫都存儲一部分?jǐn)?shù)據(jù)并執(zhí)行大部分查詢處理。Master協(xié)調(diào)所有Segment數(shù)據(jù)庫實例的工作。當(dāng)用戶在Master節(jié)點上執(zhí)行SQL查詢時,Master會將SQL以及SQL Plan分發(fā)到所有Segment節(jié)點,待Segment處理好后,再由Segment將數(shù)據(jù)發(fā)回Master節(jié)點。

Segment運行在被稱作Segment主機的服務(wù)器上。一臺Segment主機通常運行2~8個Greenplum的Segment,具體取決于CPU核數(shù)、RAM、存儲、網(wǎng)絡(luò)接口和工作負(fù)載。通常Segment實例所在主機應(yīng)采用相同的配置,集群的互聯(lián)網(wǎng)推薦采用萬兆網(wǎng)絡(luò)。

本文摘編于《數(shù)據(jù)應(yīng)用工程:方法論與實踐》,經(jīng)出版方授權(quán)發(fā)布。(書號:9787111704096)轉(zhuǎn)載請保留文章出處。?

責(zé)任編輯:武曉燕 來源: 數(shù)倉寶貝庫
相關(guān)推薦

2011-05-19 09:18:48

分布式數(shù)據(jù)庫

2011-03-24 17:15:06

分布式數(shù)據(jù)庫系統(tǒng)

2021-10-26 00:33:00

分布式數(shù)據(jù)庫系統(tǒng)

2021-12-20 15:44:28

ShardingSph分布式數(shù)據(jù)庫開源

2023-12-05 07:30:40

KlustronBa數(shù)據(jù)庫

2013-05-08 09:40:41

ClustrixSierraMySQL

2010-06-29 16:48:03

SQL Server數(shù)

2022-03-10 06:36:59

分布式數(shù)據(jù)庫排序

2023-07-31 08:27:55

分布式數(shù)據(jù)庫架構(gòu)

2020-06-23 09:35:13

分布式數(shù)據(jù)庫網(wǎng)絡(luò)

2023-03-07 09:49:04

分布式數(shù)據(jù)庫

2023-07-28 07:56:45

分布式數(shù)據(jù)庫SQL

2024-09-09 09:19:57

2024-03-11 08:57:02

國產(chǎn)數(shù)據(jù)庫證券

2023-11-14 08:24:59

性能Scylla系統(tǒng)架構(gòu)

2018-05-25 13:12:10

UCloud數(shù)據(jù)庫UDDB

2022-06-09 10:19:10

分布式數(shù)據(jù)庫

2023-04-26 06:56:31

分布式數(shù)據(jù)庫偽需求

2012-09-29 13:18:23

分布式數(shù)據(jù)庫Google Span

2021-12-14 10:16:00

鴻蒙HarmonyOS應(yīng)用
點贊
收藏

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