摘要:使用海量并行處理架構(gòu),運(yùn)行于與平臺(tái)集群,支持級(jí)數(shù)據(jù)存儲(chǔ)。水平可擴(kuò)展隨著數(shù)據(jù)量和吞吐量的增長,開發(fā)人員能夠利用通過服務(wù)器和云基礎(chǔ)架構(gòu)來增加系統(tǒng)的容量。如果一個(gè)復(fù)合索引被指定為唯一索引,則這個(gè)復(fù)合值一定是唯一的。
1 簡介
SequoiaDB(巨杉數(shù)據(jù)庫)是一款分布式非關(guān)系型文檔數(shù)據(jù)庫,可以被用來存取海量非關(guān)系型的數(shù)據(jù),其底層主要基于分布式,高可用,高性能與動(dòng)態(tài)數(shù)據(jù)類型設(shè)計(jì),與當(dāng)前主流分布式計(jì)算框架 Hadoop 緊密集成。
SequoiaDB 同時(shí)兼顧了關(guān)系型數(shù)據(jù)庫中眾多的優(yōu)秀設(shè)計(jì):如索引、動(dòng)態(tài)查詢和更新等,同時(shí)以文檔記錄為基礎(chǔ)更好地處理了動(dòng)態(tài)靈活的數(shù)據(jù)類型。
SequoiaDB 使用 MPP(海量并行處理)架構(gòu),運(yùn)行于 Linux x86-64 與 PowerPC 平臺(tái)集群,支持 PB 級(jí)數(shù)據(jù)存儲(chǔ)。
SequoiaDB 是為在現(xiàn)代開發(fā)技術(shù)、編程模型以及計(jì)算資源條件下如何搭建和運(yùn)行應(yīng)用程序而設(shè)計(jì)的。
1.1 如何搭建應(yīng)用程序新的復(fù)雜型數(shù)據(jù)類型:在今天的應(yīng)用程序中,相對(duì)于傳統(tǒng)應(yīng)用單一的關(guān)系模型,出現(xiàn)了多種多樣的數(shù)據(jù)類型,包括動(dòng)態(tài)屬性、混合結(jié)構(gòu)、文本、多媒體、數(shù)組以及其他復(fù)雜類型都是很常見的。
靈活性:應(yīng)用程序中的數(shù)據(jù)模型隨著開發(fā)的進(jìn)展,是不斷變化的。這是由于現(xiàn)代互聯(lián)網(wǎng)環(huán)境下,很多需求在應(yīng)用的設(shè)計(jì)之初并無法規(guī)劃到位。因此隨著時(shí)間的推移,應(yīng)用程序會(huì)不斷改進(jìn)數(shù)據(jù)模型來適應(yīng)應(yīng)用程序的新特性以及新需求。
現(xiàn)代程序編程語言:面向?qū)ο缶幊陶Z言影響著數(shù)據(jù)的結(jié)構(gòu),而這些結(jié)構(gòu)與關(guān)系型數(shù)據(jù)庫中存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)完全不同。
快速開發(fā):軟件工程團(tuán)隊(duì)現(xiàn)在開始接受短時(shí)間的、迭代的開發(fā)周期。在項(xiàng)目中,定義數(shù)據(jù)模型和應(yīng)用程序功能并不是發(fā)生在項(xiàng)目開始的單一事件,而是一個(gè)持續(xù)的過程。
1.2 如何運(yùn)行應(yīng)用程序大數(shù)據(jù)的新可擴(kuò)展性能:運(yùn)營和分析負(fù)載對(duì)可擴(kuò)展性、可用性、性能和數(shù)據(jù)多樣性提出了新的挑戰(zhàn)。
快速實(shí)時(shí)性能:用戶期望在很多類型接口應(yīng)用程序中獲得一致的、交互式的體驗(yàn)。
新硬件:計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)以及主內(nèi)存資源在成本和性能之間的關(guān)系發(fā)生了巨大變化。應(yīng)用程序的設(shè)計(jì)需要能采用不同的優(yōu)化策略優(yōu)化這些資源,權(quán)衡利用這些資源。
新計(jì)算環(huán)境:單臺(tái)計(jì)算機(jī)資源很難滿足應(yīng)用程序的基礎(chǔ)設(shè)施需求,而云基礎(chǔ)設(shè)施現(xiàn)在能提供海量、彈性、高效的運(yùn)行環(huán)境。
1.3 SequoiaDB 通過創(chuàng)新來面對(duì)新的需求文檔型數(shù)據(jù)模型:數(shù)據(jù)以嵌套式的半結(jié)構(gòu)化方式進(jìn)行存儲(chǔ),而該結(jié)構(gòu)可以映射到現(xiàn)代程序編程語言的對(duì)象,很容易被開發(fā)人員所理解。
豐富的查詢模型:SequoiaDB 適合于各種各樣的應(yīng)用程序。它提供了豐富的索引和查詢支持,包括二級(jí)索引,聚合框架等。
慣用驅(qū)動(dòng):開發(fā)者通過原生庫來與數(shù)據(jù)庫交互,使得 SequoiaDB 的使用變得簡單且自然。所謂原生庫,是整合了他們各自的環(huán)境和代碼庫。
水平可擴(kuò)展:隨著數(shù)據(jù)量和吞吐量的增長,開發(fā)人員能夠利用通過服務(wù)器和云基礎(chǔ)架構(gòu)來增加 SequoiaDB 系統(tǒng)的容量。
高可用性:數(shù)據(jù)的多份副本都是通過遠(yuǎn)程復(fù)制來維護(hù)的。自動(dòng)故障轉(zhuǎn)移到輔助節(jié)點(diǎn)、機(jī)架和數(shù)據(jù)中心上,使得企業(yè)不需要自定義代碼和復(fù)雜的優(yōu)化,就能讓系統(tǒng)正常運(yùn)行。
內(nèi)存級(jí)的性能:數(shù)據(jù)都是在內(nèi)存中直接讀取和寫入的,而且為了系統(tǒng)的持久性,會(huì)在后臺(tái)持續(xù)把數(shù)據(jù)寫入磁盤。這些都為系統(tǒng)提供了快速的性能,使得系統(tǒng)不在需要使用多帶帶的緩存層。
靈活性:從文檔型數(shù)據(jù)模型到多數(shù)據(jù)中心部署,到可變的一致性,到運(yùn)營級(jí)可用性的選擇,SequoiaDB 為開發(fā)和運(yùn)營團(tuán)隊(duì)提供了巨大的靈活性。正是由于這些優(yōu)勢,SequoiaDB 非常適合于各種跨行業(yè)的應(yīng)用程序。
2 SequoiaDB 數(shù)據(jù)模型 2.1 作為文檔的數(shù)據(jù)SequoiaDB 以二進(jìn)制表示的文檔形式存儲(chǔ)數(shù)據(jù),這種二進(jìn)制文檔稱為 BSON(二進(jìn)制的JSON)。這個(gè) BSON 編碼擴(kuò)展了流行的 JSON(JavaScript Object Notation),表現(xiàn)在附加的類型上,如整形、長整形以及浮點(diǎn)數(shù)。BSON 文檔包含一個(gè)或多個(gè)字段,而且每一個(gè)字段包含一個(gè)特定數(shù)據(jù)類型值,這些特定數(shù)據(jù)類型包括數(shù)組,二進(jìn)制數(shù)據(jù),子文檔。
往往有著相似結(jié)構(gòu)的文檔會(huì)組合成集合,類比于關(guān)系型數(shù)據(jù)庫相關(guān)概念就是表;把文檔類比于關(guān)系型數(shù)據(jù)中的行;把字段類比于關(guān)系型數(shù)據(jù)庫中的列。
圖 1 博客應(yīng)用程序的關(guān)系型數(shù)據(jù)模型示例
例如,為博客應(yīng)用程序考慮數(shù)據(jù)模型。在關(guān)系型數(shù)據(jù)庫中,數(shù)據(jù)模型可能包含多個(gè)表。為了簡化這個(gè)例子,假設(shè)所有的表包括類別表,標(biāo)簽表,用戶表,評(píng)論表以及文章表。
而在 SequoiaDB 中,數(shù)據(jù)可能會(huì)建模成兩個(gè)集合,一個(gè)是用戶集合,另外一個(gè)是文章集合。在每篇博客中,可能會(huì)有多個(gè)評(píng)論,多個(gè)標(biāo)簽以及多個(gè)分類,而這里的每個(gè)評(píng)論、標(biāo)簽、分類都可以作為一個(gè)嵌入的數(shù)組。
SequoiaDB 文檔往往把給定記錄的所有數(shù)據(jù)都存放在一個(gè)單一的文檔中,而在關(guān)系型數(shù)據(jù)庫中,給定的記錄通常被分配存放在多個(gè)表中。換句話說,也就是 SequoiaDB 中的數(shù)據(jù)是更本地化的。在大部分 SequoiaDB 系統(tǒng)中,BSON 文檔往往也是與應(yīng)用程序中的編程語言對(duì)象結(jié)構(gòu)緊密相關(guān)的,這使得開發(fā)人員能夠更加容易理解應(yīng)用程序中使用的數(shù)據(jù)如何映射到數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù)的關(guān)系。
2.2 動(dòng)態(tài)模式SequoiaDB 文檔在結(jié)構(gòu)上可以不同。例如,描述用戶的所有文檔可能包含這個(gè)用戶 ID,以及他們最后一次登錄系統(tǒng)的時(shí)間。然而僅僅有部分文檔可能包含對(duì)一個(gè)或多個(gè)第三方應(yīng)用程序的用戶身份。文檔與文檔之間的字段也是不相同的,而且文檔都包含各自的數(shù)據(jù)結(jié)構(gòu),因此沒有必要在建立集合的時(shí)候指定數(shù)據(jù)模型。如果要在一個(gè)文檔中加入一個(gè)新的字段,那么就創(chuàng)建這樣一個(gè)新的字段。這樣既不會(huì)影響系統(tǒng)中任何其他文檔,也不會(huì)更新編目信息,更不會(huì)讓系統(tǒng)離線。
2.3 模式設(shè)計(jì)盡管 SequoiaDB 支持強(qiáng)健的模式靈活,但模式設(shè)計(jì)仍舊是重要的。模式設(shè)計(jì)者應(yīng)該從一些主題來考慮,例如應(yīng)用程序需要執(zhí)行的查詢類型、如何管理應(yīng)用程序代碼中的對(duì)象、以及文檔隨時(shí)間推移如何改變和增長。模式設(shè)計(jì)超出了本文的范圍,是一個(gè)廣延性的話題。
圖 2 博客應(yīng)用程序的文檔數(shù)據(jù)模型
SequoiaDB 為所有受歡迎的編程語言提供了原生驅(qū)動(dòng)程序,為營造自然的開發(fā)環(huán)境而提供了框架。支持的驅(qū)動(dòng)程序包括 C、C++、Java、.NET、PHP、Python 等。相比關(guān)系數(shù)據(jù)庫的根本區(qū)別在于,SequoiaDB 的查詢模型是在特定編程語言的 API 中以方法或函數(shù)實(shí)現(xiàn)的,這與類似 SQL 完全獨(dú)立的語言是相對(duì)的。再加上 SequoiaDB JSON 文檔模型和面向?qū)ο缶幊陶Z言中的數(shù)據(jù)結(jié)構(gòu)的相似性,使得應(yīng)用程序之間的集成變得簡單。想獲得完整的驅(qū)動(dòng)列表,請(qǐng)查閱sequoiadb.com。
3.2 SequoiaDB 命令行SequoiaDB 命令行是一個(gè)交互式的 JavaScript 執(zhí)行環(huán)境,所有的 SequoiaDB 發(fā)行版都包含了 SequoiaDB 命令行。幾乎所有 SequoiaDB 支持的命令都通過命令行執(zhí)行,包括管理操作。在信息查詢操作中,與 SequoiaDB 交互時(shí),使用 SequoiaDB 命令行是一種常用的方式。在 SequoiaDB 手冊(cè)中的例子都是基于命令行的。
3.3 SequoiaDB SQL 接口SequoiaDB 提供了與 PostgreSQL 關(guān)系型數(shù)據(jù)庫連接的外部表驅(qū)動(dòng),可以將 SequoiaDB 中的集合映射為 PG 中的用戶表,使用戶可以通過標(biāo)準(zhǔn) SQL 訪問 SequoiaDB。具體的使用方式請(qǐng)參見 SequoiaDB 信息中心。
3.4 查詢類型SequoiaDB 支持很多類型的查詢。一個(gè)查詢可能會(huì)返回一個(gè)文檔,也可能是返回文檔中特定字段的子集。
鍵值對(duì)查詢返回的結(jié)果是基于文檔中任何字段的,通常是關(guān)于主鍵字段的。
范圍查詢返回的結(jié)果是定義為不等式的值(例如,大于,小于或者等于)。
聚合框架查詢返回的是通過查詢返回值的聚合(例如總數(shù)、最小數(shù)、最大數(shù)、平均數(shù),類似于 SQL 的 GROUP BY 語句)。
3.5 索引類似于大多數(shù)數(shù)據(jù)庫管理系統(tǒng),在 SequoiaDB 中,索引對(duì)于優(yōu)化系統(tǒng)性能是一個(gè)很重要的機(jī)制。雖然索引能夠以數(shù)量級(jí)來提高一些操作的性能,但是也產(chǎn)生了寫延遲、磁盤使用、內(nèi)存使用等成本消耗。SequoiaDB 包括文檔中任何字段多種類型的索引。
唯一索引:唯一索引意思是指定一個(gè)索引是唯一的。一旦一個(gè)唯一索引建立,SequoiaDB將會(huì)拒絕對(duì)已經(jīng)建立的唯一索引字段的文檔插入新文檔或更新該文檔。默認(rèn)情況下,所有的索引都未被設(shè)置為唯一索引。如果一個(gè)復(fù)合索引被指定為唯一索引,則這個(gè)復(fù)合值一定是唯一的。在分區(qū)系統(tǒng)中,唯一索引必須包含分區(qū)鍵。
復(fù)合索引:為指定的多個(gè)語句查詢,創(chuàng)建復(fù)合索引是有意義的。例如,考慮一個(gè)存儲(chǔ)用戶數(shù)據(jù)的應(yīng)用程序,這個(gè)應(yīng)用可能需要基于用戶的姓氏、用戶的名字及居住地來查詢?cè)撚脩?。?dāng)存在基于用戶的姓氏、用戶的名字及居住地的復(fù)合索引時(shí),查詢可以有效定位到所有指定為這三個(gè)值的用戶。復(fù)合索引還有一個(gè)好處就是,在一個(gè)索引里,任何主要字段都可以被使用,因此這會(huì)減少單個(gè)字段索引的使用。復(fù)合索引還能通過用戶的姓氏來查找用戶,以此來優(yōu)化查詢。
數(shù)組索引:對(duì)于包含數(shù)組的字段,每個(gè)數(shù)組值都會(huì)作為一個(gè)多帶帶的索引條目來存儲(chǔ)。例如,描繪食譜的文檔可能會(huì)包括食材這個(gè)字段。如果在食材字段有個(gè)索引,那么每個(gè)食材都能被檢索到,且食材字段的查詢能夠通過該索引而優(yōu)化。創(chuàng)建數(shù)組索引是不需要任何特殊的語法,如果字段包含一個(gè)數(shù)組,它將作為數(shù)組索引而被檢索到。
3.6 查詢優(yōu)化SequoiaDB 的自動(dòng)優(yōu)化查詢使得評(píng)估盡可能高效。評(píng)估通常包括基于語句選擇數(shù)據(jù)以及基于給定分類標(biāo)準(zhǔn)來分類數(shù)據(jù)。查詢優(yōu)化器為每個(gè)查詢類型根據(jù)開銷評(píng)估選擇使用最佳索引。這些經(jīng)驗(yàn)測試的結(jié)果將被存儲(chǔ)為一個(gè)緩存的查詢計(jì)劃并定期更新。
4 SequoiaDB 數(shù)據(jù)管理 4.1 就地更新SequoiaDB 在磁盤上以連續(xù)的形式存儲(chǔ)每個(gè)文檔。當(dāng)要插入新記錄時(shí),SequoiaDB 分配空間并就地更新該文件。通過就地管理數(shù)據(jù),SequoiaDB 能夠以字段進(jìn)行更新,從而減少了磁盤 IO 次數(shù),并且僅僅只更新需要更新的索引條目。
4.2 分片SequoiaDB 通過使用分片技術(shù)為數(shù)據(jù)庫提供了橫向擴(kuò)展機(jī)制,這個(gè)分片過程對(duì)應(yīng)用程序來說是透明的。分片分配數(shù)據(jù)跨越多個(gè)物理分區(qū),每個(gè)分區(qū)也即分片。分片是為了替SequoiaDB 部署解決單臺(tái)服務(wù)器硬件資源受限問題,如內(nèi)存或者磁盤 I/O 瓶頸,不會(huì)增加應(yīng)用程序復(fù)雜性。
SequoiaDB 支持兩種類型的分片:
基于范圍的分片。文檔通過分片的鍵值被分割。文檔具有的分片鍵值接近另一個(gè)文檔的分片鍵值時(shí),則這兩個(gè)文檔位于同一個(gè)分片上。這種方法非常適合需要優(yōu)化基于范圍查詢的應(yīng)用。
基于哈希的分片。文檔通過分片鍵值的 MD5 值來均勻分布。文檔的分片鍵值接近另一個(gè)文檔的分片,一般不太可能分布在同一個(gè)分片上。這種方法保證了整個(gè)分片的寫均勻分布,避免了數(shù)據(jù)的熱點(diǎn)訪問。
圖 3 分片機(jī)制提供了水平擴(kuò)展
分片對(duì)于應(yīng)用程序是透明的,不管系統(tǒng)中有 1 個(gè)分片還是有 100 個(gè)分片,查詢 SequoiaDB的應(yīng)用程序代碼都是一樣的。應(yīng)用程序把查詢請(qǐng)求發(fā)給協(xié)調(diào)節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn)會(huì)把該查詢請(qǐng)求分配到合適的分片上。
圖 4 分片對(duì)應(yīng)用程序是透明的
對(duì)于基于分片鍵值的鍵值查詢,協(xié)調(diào)節(jié)點(diǎn)將分發(fā)查詢請(qǐng)求到具有查詢鍵值文檔所屬的分片中。當(dāng)使用基于范圍分片時(shí),指定分片鍵值范圍的查詢僅僅分發(fā)查詢請(qǐng)求到在查詢鍵值范圍內(nèi)文檔所屬的分片中。
對(duì)于沒有使用分片鍵值的查詢,協(xié)調(diào)節(jié)點(diǎn)將會(huì)派發(fā)該查詢到所有的分片上,然后在聚合所有分片上的結(jié)果,并將結(jié)果排序作為合適的查詢結(jié)果。
在 SequoiaDB 系統(tǒng)中可以使用多個(gè)協(xié)調(diào)節(jié)點(diǎn),而且合適的協(xié)調(diào)節(jié)點(diǎn)數(shù)量是由應(yīng)用程序的性能和可用性需求共同決定的。
4.4 分區(qū)集合除了支持橫向擴(kuò)展的數(shù)據(jù)分片機(jī)制,SequoiaDB 還提供了對(duì)集合的縱向分區(qū)功能。用戶可以對(duì)一個(gè)集合中數(shù)據(jù)的某一字段指定集合分區(qū)鍵,則每條符合特定范圍的記錄會(huì)被切分至各自的集合分區(qū)。
集合分區(qū)在邏輯上看做一個(gè)集合的子集,每個(gè)集合分區(qū)擁有自己獨(dú)立的元數(shù)據(jù)和索引。用戶可以創(chuàng)建一個(gè)集合并將其加入一個(gè)已有的集合,或者從一個(gè)分區(qū)集合中移除特定分區(qū)(Roll-inRoll-out)。
5 一致性和持久性 5.1 事務(wù)模型SequoiaDB 是 ACID 兼容文檔級(jí)別,支持提交回滾等事務(wù)操作。默認(rèn)情況下,SequoiaDB為了保證性能關(guān)閉事務(wù)的支持,如果用戶需要?jiǎng)t可以在啟動(dòng)數(shù)據(jù)庫時(shí)指定參數(shù)打開事務(wù)。
在關(guān)閉事務(wù)支持時(shí),一個(gè)單一操作能夠?qū)懸粋€(gè)或多個(gè)字段,包括多個(gè)子文檔的更新和數(shù)組元素更新。SequoiaDB 的 ACID 保證了文檔更新的完整隔離性,任何錯(cuò)誤都會(huì)引發(fā)回滾操作,以及客戶能得到文檔的一致性視圖。
而當(dāng)事務(wù)打開時(shí),任何在事務(wù)啟動(dòng)到提交(回滾)之間的操作都會(huì)在數(shù)據(jù)節(jié)點(diǎn)寫入事務(wù)日志并跟蹤事務(wù) ID。更改的記錄在事務(wù)提交(回滾)前持有互斥鎖,不可被其他會(huì)話更改。當(dāng)前 SequoiaDB 事務(wù)的隔離級(jí)別為 UR。
5.2 一致性SequoiaDB 采用集合級(jí)別的可配置一致性策略,允許用戶在對(duì)記錄修改時(shí),根據(jù)該記錄所在集合判斷是否需要等待備節(jié)點(diǎn)的確認(rèn)。
譬如,對(duì)于一個(gè)對(duì)性能要求較高、對(duì)數(shù)據(jù)可靠性要求一般的集合來說,可以在創(chuàng)建集合時(shí)將 write concern 參數(shù)設(shè)置為 1,代表只要寫入主節(jié)點(diǎn)就可以返回成功信息。而該操作會(huì)在后臺(tái)異步地發(fā)送給從節(jié)點(diǎn)執(zhí)行。
而對(duì)于性能要求較低、對(duì)數(shù)據(jù)可靠性要求很高的集合來說,可以在創(chuàng)建集合時(shí)指定 write concern 參數(shù)為 3,代表該操作最少被三個(gè)節(jié)點(diǎn)確認(rèn)執(zhí)行成功后才能夠返回。
當(dāng) write concern 的數(shù)量與該集合所在每個(gè)副本集中包含節(jié)點(diǎn)數(shù)量相等時(shí),系統(tǒng)可以被認(rèn)為是強(qiáng)一致,否則為最終一致。
5.3 日志SequoiaDB 實(shí)現(xiàn)了事務(wù)事務(wù)日志的功能,這確保了在存儲(chǔ)引擎中的快速故障恢復(fù)和持久性。日志有助于防止毀壞,提高操作彈性。每當(dāng)日志內(nèi)存空間占滿后,日志將會(huì)被刷入磁盤,可以為服務(wù)器損壞時(shí)數(shù)據(jù)恢復(fù)提供方便。
5.4 副本集SequoiaDB 通過使用遠(yuǎn)程復(fù)制功能,維護(hù)了數(shù)據(jù)的多個(gè)副本,即副本集。一個(gè)副本集是有助于防止數(shù)據(jù)庫停機(jī)的、完全自我修復(fù)的分片。副本故障轉(zhuǎn)移是完全自動(dòng),不需要管理員手動(dòng)干預(yù)。一般來說,一個(gè)包含多個(gè)節(jié)點(diǎn)的分片構(gòu)成一個(gè)副本集。
圖 5 副本集
一個(gè)副本集是由多個(gè)副本組成。在任何一個(gè)時(shí)間里,都有一個(gè)副本作為主副本,其他副本是從副本。SequoiaDB 在默認(rèn)情況下是最終一致的,即寫作用于主副本,讀作用于從副本。如果主副本因任何原因而宕掉(如過熱、硬件故障或網(wǎng)絡(luò)分區(qū)),從副本中的一個(gè)將會(huì)被選出作為主副本,且開始處理所有的寫操作。
圖 6 分片和副本集
用戶可以通過指定每個(gè)連接會(huì)話的讀請(qǐng)求偏好,來定義該會(huì)話從主副本或從副本讀取數(shù)據(jù)。
SequoiaDB 副本集中的副本數(shù)量是可配置的,多副本提高了數(shù)據(jù)持久性以及預(yù)防了數(shù)據(jù)庫的停機(jī)時(shí)間(如多機(jī)器故障、機(jī)架故障、數(shù)據(jù)中心故障或網(wǎng)絡(luò)分區(qū))。配置操作在返回應(yīng)用程序之前寫入多個(gè)副本,提供了同步復(fù)制類似的功能。應(yīng)用程序能夠選擇從從副本中進(jìn)行讀操作,從副本默認(rèn)情況下是最終一致的。在類似報(bào)表類應(yīng)用中,即能接受稍稍有些過時(shí)數(shù)據(jù)的應(yīng)用,讀從副本是很有用的。
副本集提供了操作靈活性,即不需要使數(shù)據(jù)庫脫機(jī)就能升級(jí)硬件和軟件。例如,如果要對(duì)副本集中所有副本進(jìn)行硬件升級(jí),可以依次升級(jí)從副本而不會(huì)影響整個(gè)副本集。當(dāng)所有從副本都已升級(jí),可以暫時(shí)把主副本降為從副本,然后再更新這個(gè)副本。類似的,像添加索引操作,就能繼續(xù)在副本上進(jìn)行而不會(huì)影響系統(tǒng)正常的運(yùn)行。
6 可用性 6.1 副本在主副本上修改數(shù)據(jù)的操作會(huì)通過一個(gè)日志復(fù)制到從副本上,這個(gè)日志也叫做事務(wù)日志。這些事務(wù)日志包含了主副本中全部的數(shù)據(jù)操作,將會(huì)在從副本上重做。事務(wù)日志的大小是可配置的。
如果一個(gè)從副本停機(jī)時(shí)間比事務(wù)日志保存的時(shí)間還要長,那么從副本必須要使用全量同步過程從主副本恢復(fù)。在全量同步過程中,所有的數(shù)據(jù)庫和集合以及事務(wù)日志都會(huì)從主副本或者其他副本復(fù)制到這個(gè)從副本上,還會(huì)生成索引。在向副本集中加入一個(gè)新副本時(shí),也需要執(zhí)行全量同步過程。
6.2 選舉和故障轉(zhuǎn)移副本集降低了運(yùn)行開銷,提高了系統(tǒng)可用性。如果主副本集分片出現(xiàn)故障,所有從副本就一起決定哪個(gè)副本應(yīng)該成為主副本,這個(gè)過程也就是選舉過程。一旦確定了新的主副本,剩下的從副本都將配置好來接受從新主副本發(fā)來的更新操作。如果原先的主副本重新聯(lián)機(jī),它也會(huì)意識(shí)到自己不再是主副本,并會(huì)配置好自己為從副本。
6.3 選舉優(yōu)先關(guān)于如何選舉新的主副本,SequoiaDB 有一系列標(biāo)準(zhǔn),主要依賴每個(gè)節(jié)點(diǎn)的當(dāng)前事務(wù)號(hào)(LSN)作為評(píng)判依據(jù)。在進(jìn)行選舉的過程中,參與者中 LSN 號(hào)最高的節(jié)點(diǎn)(代表該節(jié)點(diǎn)包含最新的數(shù)據(jù))會(huì)被推選為主節(jié)點(diǎn)。
6.4 磁盤的容量,內(nèi)存的性能SequoiaDB 大量使用內(nèi)存來加速數(shù)據(jù)庫操作。從內(nèi)存讀數(shù)據(jù)是納秒級(jí)的,從普通磁盤讀數(shù)據(jù)是毫秒級(jí)的。所以從內(nèi)存讀數(shù)據(jù)大約比從磁盤讀數(shù)據(jù)快 100,000 倍。在 SequoiaDB 中,所有的數(shù)據(jù)都是通過內(nèi)存映射文件來讀取和操作的。不被訪問的數(shù)據(jù)是不會(huì)加載到內(nèi)存中的。雖然并不要求所有的數(shù)據(jù)都裝在內(nèi)存中,但是把所有頻繁訪問的索引和數(shù)據(jù)裝入內(nèi)存應(yīng)該是期望的目標(biāo)。例如,應(yīng)用程序頻繁的訪問數(shù)據(jù)庫中的小部分,如最近時(shí)間或受歡迎產(chǎn)品的數(shù)據(jù)。如果經(jīng)常被訪問的數(shù)據(jù)超過了單臺(tái)機(jī)臺(tái)的容量,用戶可以使用分片機(jī)制將SequoiaDB在多個(gè)服務(wù)器上進(jìn)行橫向擴(kuò)展。
由于 SequoiaDB 提供了內(nèi)存級(jí)的性能,因此對(duì)于大多數(shù)應(yīng)用程序來說,都不需要多帶帶的緩存層。
7 總結(jié)SequoiaDB 提供了一個(gè)強(qiáng)大的、創(chuàng)新的數(shù)據(jù)庫平臺(tái),它是為如何構(gòu)建和運(yùn)行應(yīng)用程序而設(shè)計(jì)。在這份指南中,我們探討了 SequoiaDB 體系結(jié)構(gòu)的基本概念和設(shè)想。類似業(yè)務(wù)最佳實(shí)踐等其他主題指南,你能夠在 sequoiadb.com 上找到。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11705.html
摘要:圖元數(shù)據(jù)與數(shù)據(jù)文件結(jié)構(gòu)映射在建立集合的過程當(dāng)中,大對(duì)象存儲(chǔ)必須依附于普通集合存在,一個(gè)集合中的大對(duì)象僅歸屬于該集合,不能被另外一個(gè)集合管理。 前言 企業(yè)內(nèi)容管理(Enterprise Content Management,ECM)系統(tǒng)是一種管理非結(jié)構(gòu)化內(nèi)容的系統(tǒng),傳統(tǒng)代表為EMC Documentum或IBM Filenet等ECM解決方案。隨著大數(shù)據(jù)技術(shù)的越發(fā)普及,越來越多的客戶開始...
摘要:在技術(shù)探索中,選擇了更適合云數(shù)據(jù)庫場景的架構(gòu)和引擎設(shè)計(jì)。目前,巨杉數(shù)據(jù)庫付費(fèi)企業(yè)級(jí)客戶與社區(qū)用戶總數(shù)超過家,并已在超過家強(qiáng)級(jí)別的銀行保險(xiǎn)證券等大型金融機(jī)構(gòu)核心生產(chǎn)業(yè)務(wù)上線。這一整體架構(gòu)設(shè)計(jì)相信是云數(shù)據(jù)發(fā)展的主流架構(gòu)設(shè)計(jì)。 分布式數(shù)據(jù)庫技術(shù)發(fā)展多年,但是在應(yīng)用、業(yè)務(wù)的驅(qū)動(dòng)下,分布式數(shù)據(jù)庫的架構(gòu)一直在不斷發(fā)展和演進(jìn)。 開源金融級(jí)分布式數(shù)據(jù)庫SequoiaDB,經(jīng)過6年的研發(fā),堅(jiān)持從零開始打...
閱讀 1625·2023-04-25 14:12
閱讀 1099·2021-08-27 16:24
閱讀 2548·2019-08-30 15:44
閱讀 2928·2019-08-30 13:16
閱讀 1683·2019-08-29 14:10
閱讀 980·2019-08-29 13:54
閱讀 1312·2019-08-29 13:09
閱讀 1826·2019-08-26 18:37