国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

分布式數(shù)據(jù)庫(kù)聚合計(jì)算性能優(yōu)化

2017-07-31 17:46肖子達(dá)朱立谷馮東煜
計(jì)算機(jī)應(yīng)用 2017年5期
關(guān)鍵詞:分片字段集群

肖子達(dá),朱立谷,馮東煜,張 迪

(1.中國(guó)傳媒大學(xué) 計(jì)算機(jī)學(xué)院,北京 100024; 2. 安防大數(shù)據(jù)處理與應(yīng)用北京市重點(diǎn)實(shí)驗(yàn)室,北京 100024)

分布式數(shù)據(jù)庫(kù)聚合計(jì)算性能優(yōu)化

肖子達(dá)1,2*,朱立谷1,2,馮東煜1,2,張 迪1,2

(1.中國(guó)傳媒大學(xué) 計(jì)算機(jī)學(xué)院,北京 100024; 2. 安防大數(shù)據(jù)處理與應(yīng)用北京市重點(diǎn)實(shí)驗(yàn)室,北京 100024)

(*通信作者電子郵箱shawzida@gmail.com)

針對(duì)分布式數(shù)據(jù)庫(kù)在分析應(yīng)用方面的聚合計(jì)算性能較低的問(wèn)題,以MongoDB數(shù)據(jù)庫(kù)為研究實(shí)例,提出了一種基于片鍵和索引的數(shù)據(jù)庫(kù)性能提升方法。首先,通過(guò)分析業(yè)務(wù)特征指導(dǎo)選擇的片鍵字段,該字段需要保證數(shù)據(jù)在分片節(jié)點(diǎn)上的均勻布局; 其次,通過(guò)研究分布式數(shù)據(jù)庫(kù)的索引效率, 利用刪除查詢字段索引的方法進(jìn)一步提升計(jì)算性能,該方法能充分利用硬件資源提高聚合計(jì)算的性能。實(shí)驗(yàn)結(jié)果表明,采用高基數(shù)粒度的分片片鍵能夠讓數(shù)據(jù)在集群上均勻地分布在各個(gè)數(shù)據(jù)節(jié)點(diǎn)上,而舍棄索引使用全表查詢能夠有效提高聚合計(jì)算的速度,聚合計(jì)算優(yōu)化方法能夠有效提高聚合計(jì)算的性能。

NoSQL;MongoDB;MapReduce;聚合計(jì)算;性能優(yōu)化

0 引言

在大數(shù)據(jù)應(yīng)用方面,非關(guān)系型數(shù)據(jù)庫(kù)NoSQL(Not Only SQL)技術(shù)可以滿足存儲(chǔ)和分析大數(shù)據(jù)的需求。Moniruzzaman等[1]認(rèn)為NoSQL的發(fā)展是適應(yīng)超大規(guī)模的商業(yè)智能和社交網(wǎng)絡(luò)數(shù)據(jù)的。不同計(jì)算系統(tǒng)需要依據(jù)業(yè)務(wù)模型、事務(wù)需求和系統(tǒng)開銷來(lái)使用NoSQL[2-3]。

MongoDB是近年廣泛使用的一種NoSQL數(shù)據(jù)庫(kù),其擁有動(dòng)態(tài)的數(shù)據(jù)模式、自動(dòng)分片和聚合計(jì)算等功能。相比傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),MongoDB擁有更多的聚合方法來(lái)完成聯(lián)機(jī)分析處理(On-Line Analytical Processing, OLAP)的任務(wù)。

聚合方法在單機(jī)上無(wú)法滿足大規(guī)模數(shù)據(jù)的處理,NoSQL則提供了分布式集群架構(gòu),比如MongoDB支持水平擴(kuò)展。除了水平擴(kuò)展計(jì)算資源外,還能從片鍵選擇、索引創(chuàng)建等方面來(lái)提高有限資源系統(tǒng)的聚合計(jì)算性能。通過(guò)分析MongoDB的特性,本文提出一種依據(jù)應(yīng)用場(chǎng)景來(lái)選擇分片片鍵的方法,并通過(guò)實(shí)驗(yàn)分析結(jié)果來(lái)衡量不同片鍵分布特征導(dǎo)致的不同影響,表明聚合計(jì)算的性能達(dá)到了較高水平。

1 相關(guān)研究

1.1 MongoDB

MongoDB是一種文檔型的NoSQL數(shù)據(jù)庫(kù),其數(shù)據(jù)以BSON(Binary Serialized Document Format)格式存儲(chǔ)。Chitra等[4]指出MongoDB特別合適存儲(chǔ)用戶信息、產(chǎn)品信息和各種網(wǎng)絡(luò)內(nèi)容(博文、消息)。MongoDB的數(shù)據(jù)模式是動(dòng)態(tài)的,數(shù)據(jù)結(jié)構(gòu)十分靈活,在同一集合內(nèi)的文檔格式可以不一致,并且單個(gè)文檔內(nèi)部還可以嵌套文檔或者數(shù)組。這樣依據(jù)應(yīng)用需求自由存放不同類型的數(shù)據(jù)的方式在關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)上是無(wú)法實(shí)現(xiàn)的。文獻(xiàn)[5-6]比較了MongoDB和關(guān)系型數(shù)據(jù)庫(kù)的讀寫性能, 表明MongoDB在數(shù)據(jù)量越大的情況下表現(xiàn)得越優(yōu)異;文獻(xiàn)[7-9]則在具體應(yīng)用上使用MongoDB提高系統(tǒng)的處理能力。這些研究分析都表明MongoDB性能是非常優(yōu)異的。

NoSQL系統(tǒng)的一個(gè)關(guān)鍵特征就是分布式模型采用的是“share nothing”架構(gòu),在該架構(gòu)下水平擴(kuò)展時(shí),不同服務(wù)器不會(huì)共享硬件資源[10]。MongoDB的水平擴(kuò)展通過(guò)自動(dòng)分片來(lái)實(shí)現(xiàn),這種實(shí)現(xiàn)對(duì)應(yīng)用程序是透明的,與單機(jī)環(huán)境下的MongoDB數(shù)據(jù)庫(kù)操作一樣。

MongoDB的分片集群成員如下:

1)mongod節(jié)點(diǎn)。mongod分片節(jié)點(diǎn)用來(lái)存儲(chǔ)分片集合數(shù)據(jù)。通常,分片節(jié)點(diǎn)接收來(lái)自路由節(jié)點(diǎn)的操作請(qǐng)求。

2)config節(jié)點(diǎn)。config配置節(jié)點(diǎn)用來(lái)存儲(chǔ)分片集群信息。配置節(jié)點(diǎn)通常會(huì)返回路由節(jié)點(diǎn)需要的數(shù)據(jù)分布信息。

3)route節(jié)點(diǎn)。route路由節(jié)點(diǎn)用來(lái)接收客戶端的請(qǐng)求并將操作請(qǐng)求發(fā)給每個(gè)分片。通過(guò)詢問(wèn)config節(jié)點(diǎn)來(lái)得知目標(biāo)分片節(jié)點(diǎn)的信息。

MongoDB可以通過(guò)分片集群來(lái)提高系統(tǒng)的可用性,將聚合計(jì)算應(yīng)用到分片集群上時(shí)無(wú)需應(yīng)用程序進(jìn)行附加的操作。分片是分割數(shù)據(jù),將數(shù)據(jù)塊分別存儲(chǔ)在不同機(jī)器上的過(guò)程[11],但這種方法只是從資源分配角度提高系統(tǒng)的性能,不能不假思索地認(rèn)為它就是解決“數(shù)據(jù)庫(kù)很慢”的最佳方案。

分片集群的片鍵是集合的一個(gè)鍵,MongoDB根據(jù)片鍵來(lái)拆分?jǐn)?shù)據(jù)。對(duì)于不同的分片片鍵類型,聚合計(jì)算的效率還是有差別的。分片的片鍵選擇對(duì)于集群的讀寫操作有著重大影響,在實(shí)際使用時(shí)應(yīng)該仔細(xì)斟酌。擁有良好的分布隨機(jī)性和局部性特性的片鍵具有均衡的讀寫操作性能,但又側(cè)重于不同應(yīng)用場(chǎng)景:如果應(yīng)用是“一次寫入多次查詢”的場(chǎng)景,則應(yīng)該使用具有最優(yōu)局部性特征的范圍片鍵;相反,如果是寫入操作比讀取更加頻繁的場(chǎng)景,則應(yīng)該使用散列片鍵[12]。

MongoDB的MapReduce功能是MapReduce編程模式[13]的簡(jiǎn)化實(shí)現(xiàn)。在MapReduce模型中, 數(shù)據(jù)被Map端處理后產(chǎn)生的中間數(shù)據(jù)要被分配到Reduce端[14]。這是一種非常強(qiáng)大的數(shù)據(jù)聚合工具。在分片集群的情況下,MongoDB還能進(jìn)行MapReduce并行計(jì)算。圖1展示的MapReduce在分片集群下的并行計(jì)算。作為MongoDB的路由節(jié)點(diǎn),mongos將客戶端發(fā)出的請(qǐng)求進(jìn)行暫存,并詢問(wèn)存儲(chǔ)各分片信息的config節(jié)點(diǎn),以獲得相關(guān)數(shù)據(jù)的位置; mongos得到數(shù)據(jù)的分布后,將請(qǐng)求發(fā)給各個(gè)分片節(jié)點(diǎn)shard; 各shard節(jié)點(diǎn)進(jìn)行mapper和reducer處理,并將處理數(shù)據(jù)返回給mongos; mongos將處理完的數(shù)據(jù)進(jìn)行合并以及傳遞給最后的reducer。

圖1 MongoDB的MapReduce模型Fig. 1 MapReduce model of MongoDB

MongoDB提供的MapReduce聚合計(jì)算能夠幫助完成大量數(shù)據(jù)的聚合任務(wù)。定時(shí)執(zhí)行聚合分析任務(wù)考驗(yàn)數(shù)據(jù)庫(kù)集群的性能。文獻(xiàn)[15-16]將MapReduce運(yùn)用到在線聚合上通過(guò)并行處理提高在線請(qǐng)求的相應(yīng)速度。文獻(xiàn)[17]通過(guò)Hadoop的MapReduce計(jì)算能力來(lái)提高整個(gè)MongoDB集群的計(jì)算能力,但這樣做的副作用是數(shù)據(jù)的讀寫性能明顯降低。

綜上所述,使用MongoDB實(shí)現(xiàn)大數(shù)據(jù)的處理與應(yīng)用是可行的,但在大規(guī)模運(yùn)行聚合計(jì)算時(shí)還是存在優(yōu)化調(diào)整的空間。

1.2 相關(guān)研究

許多研究人員從如下幾個(gè)方面提出提升分布式數(shù)據(jù)庫(kù)分片性能的方法: 吳潤(rùn)秀等[18]提出了一種基于粒計(jì)算的數(shù)據(jù)分片模型; Liu等[19]通過(guò)數(shù)據(jù)操作頻率改進(jìn)分片集群的均衡性能; Huang等[20]實(shí)現(xiàn)了復(fù)合自身應(yīng)用的數(shù)據(jù)塊遷移方法,在其自己實(shí)現(xiàn)的自動(dòng)分片控制器中移動(dòng)最大頻率塊, 但是衡量基本數(shù)據(jù)處理性能時(shí)過(guò)多地依賴于經(jīng)驗(yàn)而很難進(jìn)行預(yù)先確認(rèn); Wang等[21]通過(guò)代理節(jié)點(diǎn)實(shí)現(xiàn)動(dòng)態(tài)熱擴(kuò)散的負(fù)載均衡, 這種方法通過(guò)占用更多的資源監(jiān)控系統(tǒng)負(fù)載來(lái)實(shí)現(xiàn)動(dòng)態(tài)均衡。林基明等[22]提出一種基于分片分配選擇器的算法來(lái)優(yōu)化查詢執(zhí)行計(jì)劃。

在不同的具體應(yīng)用中,有多種字段可以作為片鍵的候選字段。Kang等[23]使用MongoDB作為傳感器數(shù)據(jù)倉(cāng)庫(kù),選擇采用兩個(gè)字段作為復(fù)合片鍵:第1個(gè)字段設(shè)置為粒度適中的字段,第2個(gè)字段設(shè)置為更細(xì)粒度和高基數(shù)的字段,這樣,第1個(gè)字段能夠均勻分布在不同分片上,而同一分片上的數(shù)據(jù)塊也能通過(guò)第2個(gè)字段分割得更加細(xì)小。 Kookarinrat等[24]的分析得出,同時(shí)擁有隨機(jī)性和局部性特征的片鍵可以提供一個(gè)優(yōu)異的讀寫性能。

以上工作都是從分片負(fù)載均衡的角度提高分片性能,而對(duì)具有數(shù)據(jù)分析需求的系統(tǒng),不能只是簡(jiǎn)單地在均勻分布集群上套用MapReduce方法,因?yàn)閿?shù)據(jù)的均勻分布并不能保證聚合分析任務(wù)在各節(jié)點(diǎn)上同時(shí)完成。因此,對(duì)于聚合計(jì)算的應(yīng)用場(chǎng)景,應(yīng)該采用更有針對(duì)性的優(yōu)化方法。

2 聚合計(jì)算優(yōu)化方法

MongoDB的聚合操作是一種消耗內(nèi)存資源和磁盤讀性能的計(jì)算過(guò)程。MongoDB的MapReduce是其中最靈活的計(jì)算接口。通過(guò)建立分片集群,可以有效提高M(jìn)apReduce的運(yùn)算能力。在已有硬件資源一定條件下,本文采取一種基于數(shù)據(jù)特征的優(yōu)化方法(流程如圖2)來(lái)提升集群的聚合計(jì)算能力。

圖2 優(yōu)化方法流程

Fig. 2 Flow of optimization method

在構(gòu)建數(shù)據(jù)集合時(shí),需要預(yù)估集群的工作負(fù)荷以選擇合適的片鍵。集群數(shù)據(jù)分布情況受到字段粒度的影響,聚合操作性能也受到查詢條件和讀寫I/O的影響。一個(gè)好的片鍵應(yīng)該滿足寫操作擴(kuò)展和查詢分離的目的。通過(guò)使用兩個(gè)字段作為復(fù)合片鍵能夠有效地分布數(shù)據(jù)文件[23],但是這種方法也會(huì)增加查詢數(shù)據(jù)的時(shí)延,因?yàn)榫鶆蚍植嫉臄?shù)據(jù)失去了局部性特征。MapReduce的輸入通常為一定范圍內(nèi)的數(shù)據(jù),這種情況下,考慮查詢字段組成片鍵能改善時(shí)延增加的情況。

在確定字段后,需選擇合適的片鍵類型來(lái)確定數(shù)據(jù)在集群中的分布方式。片鍵的類型分為連續(xù)型、哈希型和標(biāo)簽型三種。默認(rèn)的片鍵都是連續(xù)型,而連續(xù)型片鍵會(huì)導(dǎo)致數(shù)據(jù)先插入到某個(gè)節(jié)點(diǎn),然后再遷移到其他節(jié)點(diǎn)。為了解決這個(gè)問(wèn)題,MongoDB引入了哈希片鍵。哈希片鍵會(huì)為片鍵字段創(chuàng)建哈希值,MongoDB集群依據(jù)該哈希值執(zhí)行分塊和分片操作。集合的分布對(duì)于寫入和讀取都是隨機(jī)的,這會(huì)對(duì)讀取操作造成影響。在前期實(shí)驗(yàn)中發(fā)現(xiàn):由于其較慢的讀性能,這種片鍵方式不太適合MapReduce運(yùn)行。第三種片鍵類型是標(biāo)簽型。通過(guò)創(chuàng)建分片,可以將片鍵的指定范圍手動(dòng)指向指定的分片節(jié)點(diǎn)上,這樣也能得到數(shù)據(jù)均勻分布的結(jié)果。默認(rèn)連續(xù)型和標(biāo)簽型都是比較適用于MapReduce的運(yùn)行環(huán)境。

接下來(lái)需要消除相關(guān)的索引。因?yàn)樵诖蠓秶x場(chǎng)景中,索引查詢將進(jìn)行兩次查詢過(guò)程,原本能提高查詢速度的索引反而會(huì)增加數(shù)據(jù)庫(kù)的響應(yīng)時(shí)間。關(guān)于到底在何時(shí)不該使用索引,Chodorow[25]認(rèn)為當(dāng)查詢需要返回集合中2%~60%的數(shù)據(jù)時(shí)就應(yīng)該對(duì)索引查詢和全表查詢進(jìn)行比較,而聚合操作是對(duì)集合內(nèi)全體數(shù)據(jù)進(jìn)行聚合計(jì)算,查詢的數(shù)據(jù)量遠(yuǎn)超過(guò)普通的即席查詢數(shù)據(jù)量, 所以本文的建議是對(duì)于需要聚合操作的數(shù)據(jù)集合,不對(duì)作為片鍵的字段進(jìn)行索引。創(chuàng)建片鍵后,MongoDB可以手動(dòng)刪除該索引,使得在進(jìn)行MapReduce時(shí)采用全表查詢的方式。通過(guò)上一步片鍵的選擇保證數(shù)據(jù)的均勻分布,以及這一步的聚合計(jì)算全表查詢使得聚合計(jì)算的性能在有限資源的條件下提高。在后一章的實(shí)驗(yàn)分析將會(huì)進(jìn)一步證明。

在實(shí)際應(yīng)用中,集合數(shù)據(jù)中有如下幾個(gè)字段可以作為候選片鍵: _id字段是一種包含自增的時(shí)間戳和隨機(jī)數(shù)的ObjectId對(duì)象; date字段為MapReduce計(jì)算的查詢參數(shù),對(duì)date字段的索引會(huì)影響查詢效率; name字段為Map函數(shù)分組的依據(jù),數(shù)據(jù)分片的讀寫和執(zhí)行MapReduce的效率會(huì)受該字段影響。依據(jù)本文方法可以判斷出date字段或者date和name的組合字段是合適的片鍵。

上述方法能在數(shù)據(jù)庫(kù)需要應(yīng)用MapReduce時(shí)作為數(shù)據(jù)庫(kù)設(shè)計(jì)的參考方法,下面將通過(guò)實(shí)驗(yàn)來(lái)驗(yàn)證該方法的可行性和有效性。

3 實(shí)驗(yàn)與分析

針對(duì)不同的應(yīng)用場(chǎng)景,片鍵的均勻性、隨機(jī)性、局部性特征對(duì)插入與讀取操作的影響各不相同[24]。通過(guò)實(shí)驗(yàn)來(lái)探索不同片鍵對(duì)于聚合計(jì)算的影響,并驗(yàn)證本文方法選擇的環(huán)境是否對(duì)聚合計(jì)算最優(yōu)。本文方法通過(guò)選擇業(yè)務(wù)的查詢字段作為片鍵字段,還充分利用刪除集合索引的步驟來(lái)減少聚合計(jì)算查詢時(shí)間。

3.1 實(shí)驗(yàn)背景

實(shí)驗(yàn)?zāi)康氖菨M足郵政局寄遞信息離線數(shù)據(jù)分析需求,其數(shù)據(jù)庫(kù)根據(jù)寄件日期按月份劃分集合存儲(chǔ),每一條運(yùn)單記錄作為一條文檔存儲(chǔ)在集合中,且每條運(yùn)單文檔包括運(yùn)單 ID、寄件日期、收件日期以及寄件人和收件人信息。

3.2 實(shí)驗(yàn)環(huán)境

實(shí)驗(yàn)的硬件設(shè)備包括6臺(tái)3.3 GHz CPU、16 GB內(nèi)存的服務(wù)器,硬盤容量2 TB。實(shí)驗(yàn)數(shù)據(jù)采用固定時(shí)間范圍內(nèi)的數(shù)據(jù)以滿足MapReduce分析歷史數(shù)據(jù)的場(chǎng)景,數(shù)據(jù)總量超過(guò)2億條,占用硬盤104.3 GB的空間。

實(shí)驗(yàn)的分片集群如圖3。MongoDB采用8節(jié)點(diǎn)分片集群,其成員配置如下: 4個(gè)分片節(jié)點(diǎn)(shard1~shard4)、3個(gè)配置節(jié)點(diǎn)(config)、1個(gè)路由節(jié)點(diǎn)(mongos)。

圖3 分片集群實(shí)驗(yàn)環(huán)境Fig. 3 Fragment cluster experimental environment

依據(jù)片鍵和索引構(gòu)成情況的不同將實(shí)驗(yàn)內(nèi)容分為10組,每組實(shí)驗(yàn)數(shù)據(jù)均達(dá)到2 000萬(wàn)條。實(shí)驗(yàn)數(shù)據(jù)設(shè)計(jì)如表1所示。實(shí)驗(yàn)01、03、05、07、09組數(shù)據(jù)集合針對(duì)5種片鍵情況以全表查詢的方式實(shí)驗(yàn)。01組數(shù)據(jù)采用時(shí)間戳自增的ObjectId類型_id作為片鍵; 03組數(shù)據(jù)以_id為片鍵并創(chuàng)建時(shí)間字段標(biāo)簽感知分片(tag-aware)機(jī)制,標(biāo)簽分片采用固定時(shí)間范圍劃分?jǐn)?shù)據(jù),時(shí)間粒度保證每個(gè)分片執(zhí)行MapReduce的任務(wù)量是均等的。01組和03組主要探究標(biāo)簽感知分片功能對(duì)MapReduce計(jì)算的影響; 05組數(shù)據(jù)以時(shí)間字段作為片鍵; 07組以字符字段和時(shí)間字段組成復(fù)合片鍵; 09組以時(shí)間字段和字符字段組成復(fù)合片鍵。這3種分片方式用來(lái)與本文提出的優(yōu)化方法中關(guān)于片鍵的候選片鍵進(jìn)行比較。實(shí)驗(yàn)02、04、06、08、10組通過(guò)索引的方式查詢數(shù)據(jù),與前一組實(shí)驗(yàn)互為對(duì)照,以驗(yàn)證本文方法中關(guān)于索引問(wèn)題的論述。

表1 各測(cè)試集合的模式Tab. 1 Patterns of each test set

3.3 實(shí)驗(yàn)步驟

基于應(yīng)用的目的,使用MapReduce對(duì)數(shù)據(jù)集合進(jìn)行聚合統(tǒng)計(jì),聚合計(jì)算進(jìn)行“name”字段分組并統(tǒng)計(jì)數(shù)量的任務(wù)。首先,在進(jìn)行計(jì)算之前,查詢“date”時(shí)間范圍的目標(biāo)數(shù)據(jù)。在mapper中,將字符串字段“name”作為分組依據(jù),在reducer中將收到的分組數(shù)據(jù)進(jìn)行累加。這個(gè)任務(wù)能夠驗(yàn)證本文方法對(duì)聚合計(jì)算性能的影響。

此外,為了衡量索引對(duì)查詢性能的影響,實(shí)驗(yàn)將添加對(duì)name字段的單值查詢,對(duì)date字段的范圍查詢。

每個(gè)環(huán)境都進(jìn)行上述兩個(gè)測(cè)試單元,針對(duì)每個(gè)分片環(huán)境的實(shí)驗(yàn)步驟如下:

1)導(dǎo)入數(shù)據(jù),設(shè)置索引、片鍵以及相關(guān)分片配置信息(針對(duì)標(biāo)簽分片的操作步驟)。

2)運(yùn)行MapReduce腳本,依此累加等距時(shí)間范圍內(nèi)的數(shù)據(jù)進(jìn)行聚合分析,并運(yùn)行查詢腳本,隨機(jī)查詢姓名字符串和時(shí)間范圍的相關(guān)數(shù)據(jù)。

3)刪除數(shù)據(jù)以及配置信息,重復(fù)步驟1)~2)直到完成所有分片情況。

重復(fù)進(jìn)行實(shí)驗(yàn)?zāi)芘懦既灰蛩貙?duì)數(shù)據(jù)產(chǎn)生的影響,在統(tǒng)計(jì)性能指標(biāo)時(shí)不會(huì)將離群值納入結(jié)果中。

3.4 實(shí)驗(yàn)結(jié)果與分析

3.4.1 MapReduce的實(shí)驗(yàn)結(jié)果

片鍵對(duì)于MapReducde并行計(jì)算有著很大的影響。如圖4、5所示,在相同的索引環(huán)境下,使用查詢字段(date字段)作為片鍵的處理速度是最快的,而使用復(fù)合索引的運(yùn)行性能比使用單片鍵date的性能差。作為復(fù)合片鍵的比較,查詢條件匹配越低({date:1, name: 1})的效率要比匹配越低({ name: 1, date:1 })執(zhí)行速度慢。實(shí)驗(yàn)數(shù)據(jù)中,date字段相比name字段重復(fù)值較小。

圖4 無(wú)索引聚合計(jì)算性能指標(biāo)Fig. 4 Metric of aggreagation without index

圖5 有索引聚合計(jì)算性能指標(biāo)Fig. 5 Metric of aggreagation with index

當(dāng)數(shù)據(jù)寫入完畢,MongoDB分布式環(huán)境下運(yùn)行Balancer進(jìn)程,該進(jìn)程會(huì)完成各個(gè)節(jié)點(diǎn)的數(shù)據(jù)遷移以達(dá)到數(shù)據(jù)均勻的情況。數(shù)據(jù)分布的最終結(jié)果如表2。

表2 各集合分片分布 %Tab. 2 Distribution of shards of each cluster %

從表2中可以看出來(lái),高基數(shù)(high cordinality)的字段(date字段)作為片鍵的首位字段反而不能夠有效地將數(shù)據(jù)均勻分布,證明了將基數(shù)粒度較小的字段放置在復(fù)合片鍵首部的情況性能會(huì)更好[23]。

通過(guò)實(shí)驗(yàn)還可以得出,具有過(guò)高基數(shù)的字段作為片鍵在查詢分離上也會(huì)有著明顯的性能缺陷。通過(guò)表2的分片數(shù)據(jù)可以看出,_id類型作為片鍵能將數(shù)據(jù)均勻分布到分片上,但是這種均勻分布并不能提高分片上并行計(jì)算的速度。數(shù)據(jù)依據(jù)時(shí)間分布則可以保證時(shí)間連續(xù)的數(shù)據(jù)在存儲(chǔ)空間上的連續(xù)性,這能提高M(jìn)apReduce的查詢效率,但是這種提高遠(yuǎn)遠(yuǎn)沒(méi)有使用其他字段作為片鍵的性能好。

索引可以提高單次查詢的效率,對(duì)于MapReduce定位目標(biāo)數(shù)據(jù)有著很大的影響。這是MongoDB默認(rèn)將索引存放在內(nèi)存中以提高查詢速度,但如圖6~10的各個(gè)片鍵條件下的MapReduce性能指數(shù)表明,沒(méi)有索引的集合的處理速度最快。這是因?yàn)樵谟兴饕那闆r下,MapReduce需要進(jìn)行兩次查詢:一次是在索引條目中查找,一次是根據(jù)索引指針去查找相關(guān)文檔數(shù)據(jù)。

圖6 _id片鍵集合MapReduce性能指標(biāo)Fig. 6 Metric of MapReduce with _id shard

圖7 帶標(biāo)簽的_id片鍵集合MapRedcude性能指標(biāo)Fig. 7 Metric of MapReduce with tagged _id shard

圖8 date片鍵集合MapReduce性能指標(biāo)Fig. 8 Metric of MapReduce with date shard

從聚合計(jì)算的應(yīng)用場(chǎng)景來(lái)說(shuō),其目標(biāo)數(shù)據(jù)是集合中一部分文檔,聚合計(jì)算的查詢時(shí)間復(fù)雜度是O(n2);而優(yōu)化方法針對(duì)聚合計(jì)算的查詢條件,直接進(jìn)行全表查詢來(lái)使得查詢時(shí)間與數(shù)據(jù)量趨于線性關(guān)系。從存儲(chǔ)代價(jià)方面分析,實(shí)驗(yàn)環(huán)境下2 000萬(wàn)條數(shù)據(jù)產(chǎn)生的索引占用內(nèi)存空間達(dá)到 2 GB以上,而將數(shù)據(jù)量增加到2億條數(shù)據(jù)時(shí),內(nèi)存索引達(dá)到了21 GB以上,MongoDB的進(jìn)程頻繁地在內(nèi)存和磁盤中交換索引,進(jìn)而降低聚合處理速度。全表查詢的MapReduce比索引查詢的MapReduce快4倍。通過(guò)分析這樣的性能指標(biāo),可以明顯看到本文提出的優(yōu)化方法對(duì)于聚合操作的性能是有明顯提升的, 并且數(shù)據(jù)量越大優(yōu)勢(shì)越明顯。

圖9 name&date片鍵集合MapReduce性能指標(biāo)Fig. 9 Metric of MapReduce with combined name&date shard

圖10 date&name片鍵集合MapReduce性能指標(biāo)Fig. 10 Metric of MapReduce with combined date&name shard

3.4.2 查詢操作的實(shí)驗(yàn)結(jié)果。

單值查詢和范圍查詢是數(shù)據(jù)庫(kù)的基本應(yīng)用場(chǎng)景,數(shù)據(jù)庫(kù)可以通過(guò)索引提高查詢速度,以下將通過(guò)實(shí)驗(yàn)來(lái)驗(yàn)證沒(méi)有索引的集群對(duì)于查詢的響應(yīng)速度。

通過(guò)表3可以看出,刪除索引顯然降低了單值查詢的性能。有無(wú)索引是對(duì)查詢條件的字段是否建立索引。

表3 查詢響應(yīng)時(shí)間指標(biāo) sTab. 3 Response time of search function s

4 結(jié)語(yǔ)

分布式數(shù)據(jù)庫(kù)的聚合功能使得MongoDB能夠滿足數(shù)據(jù)分析的任務(wù),在滿足基本統(tǒng)計(jì)分析的要求下,應(yīng)用開發(fā)者和數(shù)據(jù)庫(kù)管理員還可以從聚合計(jì)算框架的特性上進(jìn)一步調(diào)優(yōu)數(shù)據(jù)庫(kù)系統(tǒng)。本文方法以實(shí)際的項(xiàng)目出發(fā),分別從片鍵和索引兩個(gè)方面來(lái)探究MongoDB聚合操作的優(yōu)化方法,而這種方法能夠應(yīng)用到同類分布式架構(gòu)的數(shù)據(jù)庫(kù)系統(tǒng)。采用高基數(shù)粒度的分片片鍵能夠讓數(shù)據(jù)在集群上較均勻地分布在各個(gè)節(jié)點(diǎn),而當(dāng)聚合計(jì)算的查詢字段是低基粒度的字段時(shí),可以與高基粒度組合成復(fù)合片鍵來(lái)滿足數(shù)據(jù)計(jì)算和均勻存儲(chǔ)的需求。而另一種片鍵選擇的方法適用于部分業(yè)務(wù)場(chǎng)景,這種片鍵在較高粒度的字段中選擇最能提高聚合計(jì)算速度的字段,而不應(yīng)滿足數(shù)據(jù)的均勻分布。對(duì)于聚合計(jì)算任務(wù)更頻繁的情形,舍棄索引查詢使用全表查詢能夠有效提高計(jì)算速度。這種索引優(yōu)化的方法將以降低普通查詢響應(yīng)性能為代價(jià)來(lái)提高整個(gè)分布式系統(tǒng)的計(jì)算能力。

綜上所述,在一個(gè)資源有限的集群中,通過(guò)本文方法可以有效提高聚合計(jì)算的性能。這種方法從具體的應(yīng)用場(chǎng)景出發(fā),分析出滿足系統(tǒng)聚合計(jì)算性能要求的片鍵并能推廣至同類型數(shù)據(jù)庫(kù)。

在接下來(lái)的工作,還將繼續(xù)探索MongoDB的最佳設(shè)計(jì)方法,以幫助數(shù)據(jù)庫(kù)管理員合理地配置數(shù)據(jù)庫(kù)集群;最終目標(biāo)是建立一個(gè)基于分布式系統(tǒng)的聚合計(jì)算模型來(lái)完成多種場(chǎng)景管理和分析數(shù)據(jù)的功能。

References)

[1] MONIRUZZAMAN A B M, HOSSAIN S A. NoSQL database: new era of databases for big data analytics-classification, characteristics and comparison[EB/OL]. [2016-04-20]. https://arxiv.org/ftp/arxiv/papers/1307/1307.0191.pdf.

[2] HAN J, HAIHONG E, LE G, et al. Survey on NoSQL database[C]// Proceedings of the 2011 6th International Conference on Pervasive computing and applications. Piscataway, NJ: IEEE, 2011: 363-366.

[3] HAN J, SONG M, SONG J. A novel solution of distributed memory NoSQL database for cloud computing[C]// Proceedings of the 2011 IEEE/ACIS 10th International Conference on Computer and Information Science. Piscataway, NJ: IEEE, 2011: 351-355.

[4] CHITRA K, JEEVARANI B. Study on basically available, scalable and eventually consistent NoSQL databases[J]. International Journal of Advanced Research in Computer Science and Software Engineering, 2013, 3(7): 1356-1360.

[5] NYATI S S, PAWAR S, INGLE R. Performance evaluation of unstructured NoSQL data over distributed framework[C]// Proceedings of the 2013 International Conference on Advances in Computing, Communications and Informatics. Piscataway, NJ: IEEE, 2013: 1623-1627.

[6] PARKER Z, POE S, VRBSKY S V. Comparing NoSQL MongoDB to an SQL DB[C]// Proceedings of the 51st ACM Southeast Conference. New York: ACM, 2013: Article No. 5.

[7] ABRAMOVA V, BERNARDINO J. NoSQL databases: MongoDB vs cassandra[C]// Proceedings of the International C*Conference on Computer Science and Software Engineering. New York: ACM, 2013: 14-22.

[8] AMERI P, GRABOWSKI U, MEYER J, et al. On the application and performance of MongoDB for climate satellite data[C]// Proceedings of the 2014 IEEE 13th International Conference on Trust, Security and Privacy in Computing and Communications. Piscataway, NJ: IEEE, 2014: 652-659.

[9] KANADE A, GOPAL A, KANADE S. A study of normalization and embedding in MongoDB[C]// Proceedings of the 2014 IEEE International Advance Computing Conference. Piscataway, NJ: IEEE, 2014: 416-421.

[10] CATTELL R. Scalable SQL and NoSQL data stores[J]. ACM SIGMOD Record, 2011, 39(4): 12-27.

[11] 鄭靜靜, 葉焱, 劉太君, 等. 基于 Flex, Red5 和 MongoDB 的視頻直播, 錄制及存儲(chǔ)系統(tǒng)設(shè)計(jì)[J]. 計(jì)算機(jī)應(yīng)用, 2014, 34(2): 589-592.(ZHENG J J, YE Y, LIU T J, et al. Design of live video streaming, recording and storage system based on Flex, Red5 and MongoDB[J]. Journal of Computer Applications, 2014, 34(2): 589-592.)

[12] KAUR H, SINGH J. Improvement in load balancing technique for MongoDB clusters[J]. International Journal of Applied Information Systems, 2015, 8(4):31-35.

[13] DEAN J, GHEMAWAT S. MapReduce: simplified data processing on large clusters[J]. Communications of the ACM, 2008, 51(1): 107-113.

[14] 楊俊杰, 廖卓凡, 馮超超. 大數(shù)據(jù)存儲(chǔ)架構(gòu)和算法研究綜述[J]. 計(jì)算機(jī)應(yīng)用, 2016, 36(9): 2465-2471.(YANG J J, LIAO Z F, FENG C C. Survey on big data storage framework and algorithm[J]. Journal of Computer Applications, 2016, 36(9): 2465-2471.)

[15] MOHAN B, GOVARDHAN A. Online aggregation using MapReduce in MongoDB[J]. International Journal of Advanced Research in Computer Science and Software Engineering, 2013, 3(9): 1157-1165.

[16] RAO B R M, GOVARDHAN A. Sharded parallel MapReduce in MongoDB for online aggregation[J]. International Journal of Engineering and Innovative Technology, 2013, 3(4): 119-127.

[17] DEDE E, GOVINDARAJU M, GUNTER D, et al. Performance evaluation of a MongoDB and Hadoop platform for scientific data analysis[C]// Proceedings of the 4th ACM workshop on Scientific Cloud Computing. New York: ACM, 2013: 13-20.

[18] 吳潤(rùn)秀, 吳水秀, 劉清. 基于粒計(jì)算的數(shù)據(jù)分片算法[J]. 計(jì)算機(jī)應(yīng)用, 2007, 27(6): 1388-1391.(WU R X, WU S X, LIU Q. Data fragment algorithm based on granular computing[J]. Journal of Computer Applications, 2007, 27(6): 1388-1391.)

[19] LIU Y, WANG Y, JIN Y. Research on the improvement of MongoDB auto-sharding in cloud environment[C]// Proceedings of the 2012 7th International Conference on Computer Science & Education. Piscataway, NJ: IEEE, 2012: 851-854.

[20] HUANG C W, HU W H, SHIH C C, et al. The improvement of auto-scaling mechanism for distributed database — a case study for MongoDB[C]// Proceedings of the 2013 15th Asia-Pacific Network Operations and Management Symposium. Piscataway, NJ: IEEE, 2013: 1853-1857.

[21] WANG X, CHEN H, WANG Z. Research on improvement of dynamic load balancing in MongoDB[C]// Proceedings of the 2013 IEEE 11th International Conference on Dependable, Autonomic and Secure Computing. Piscataway, NJ: IEEE, 2013: 124-130.

[22] 林基明, 班文嬌, 王俊義, 等. 基于并行遺傳最大最小蟻群算法的分布式數(shù)據(jù)庫(kù)查詢優(yōu)化[J]. 計(jì)算機(jī)應(yīng)用, 2016, 36(3): 675-680.(LIN J M, BAN W J, WANG J Y, et al. Query optimization for distributed database based on parallel genetic algorithm and max-min ant system[J]. Journal of Computer Applications, 2016, 36(3): 675-680.)

[23] KANG Y S, PARK I H, RHEE J, et al. MongoDB-based repository design for IoT-generated RFID/sensor big data[J]. IEEE Sensors Journal, 2016, 16(2): 485-497.

[24] KOOKARINRAT P, TEMTANAPAT Y. Analysis of range-based key properties for sharded cluster of MongoDB[C]// Proceedings of the 2015 2nd International Conference on Information Science and Security. Piscataway, NJ: IEEE, 2015:1-4.

[25] CHODOROW K. MongoDB: the Definitive Guide[M]. Sebastopol: O’Reilly Media, 2013: 103.

This work is partially supported by the National Natural Science Foundation of China (61730063).

XIAO Zida, born in 1992, M. S. candidate. Her research interests include distributed system, data visualization.

ZHU Ligu, born in 1965, Ph. D., professor. His research interests include computer system structure, mass storage.

FENG Dongyu, born in 1989, Ph. D. candidate. Her research interests include big data system architecture, distributed system.

ZHANG Di, born in 1987, Ph. D. His research interests include data visualization, cloud storage.

Performance optimization of distributed database aggregation computing

XIAO Zida1,2*, ZHU Ligu1,2, FENG Dongyu1,2, ZHANG Di1,2

(1.SchoolofComputerScience,CommunicationUniversityofChina,Beijing100024,China;2.BeijngKeyLaboratoryofBigDatainSecurity&ProtectionIndustry,Beijing100024,China)

Aiming at the problem of low computational performance of distributed database in analysis applications, taking MongoDB database as an example, a method was put forward to improve the performance of database based on chip and index. Firstly, the characteristics of the business was analyzed to guide the choice of shard key field, and the selected key field needed to ensure that the data is evenly distributed on the cluster nodes. Secondly, by studying the index efficiency of the distributed database, the method of deleting the query field index was used to further improve the computing performance, which could make full use of hardware resources to improve the performance of aggregation computing. The analysis and experimental results show that the shard key field with high cordinality can distribute data evenly on each data node in the cluster, and the use of full table query can effectively improve the convergence speed, thus the optimization method can effectively improve the performance of aggregation computing.

Not Only SQL (NoSQL);MongoDB;MapReduce;aggregation computing;performance optimization

2016-07-01;

2016-11-17。 基金項(xiàng)目:國(guó)家自然科學(xué)基金資助項(xiàng)目(61730063)。

肖子達(dá)(1992—),男,湖南長(zhǎng)沙人,碩士研究生,主要研究方向:分布式系統(tǒng)、數(shù)據(jù)可視化; 朱立谷(1965—),男,北京人,教授,博士生導(dǎo)師,博士,主要研究方向:計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)、海量存儲(chǔ); 馮東煜(1989—),男,遼寧錦州人,博士研究生,主要研究方向:大數(shù)據(jù)系統(tǒng)架構(gòu)、分布式系統(tǒng); 張迪(1987—),男,甘肅蘭州人,博士,主要研究方向:數(shù)據(jù)可視化、云存儲(chǔ)。

1001-9081(2017)05-1251-06

10.11772/j.issn.1001-9081.2017.05.1251

TP316

A

猜你喜歡
分片字段集群
上下分片與詞的時(shí)空佈局
利用狀態(tài)歸約處理跨分片交易的多輪驗(yàn)證方案①
物聯(lián)網(wǎng)區(qū)塊鏈中基于演化博弈的分片算法
帶鉤或不帶鉤選擇方框批量自動(dòng)換
海上小型無(wú)人機(jī)集群的反制裝備需求與應(yīng)對(duì)之策研究
淺談臺(tái)灣原版中文圖書的編目經(jīng)驗(yàn)
培育世界級(jí)汽車產(chǎn)業(yè)集群
基于模糊二分查找的幀分片算法設(shè)計(jì)與實(shí)現(xiàn)
一種無(wú)人機(jī)集群發(fā)射回收裝置的控制系統(tǒng)設(shè)計(jì)
勤快又呆萌的集群機(jī)器人
开阳县| 财经| 历史| 九龙县| 渝中区| 保康县| 巴林左旗| 万山特区| 静乐县| 长沙县| 平定县| 石狮市| 双流县| 资兴市| 全州县| 湘潭县| 青阳县| 婺源县| 铁岭市| 尉犁县| 加查县| 栾川县| 新民市| 互助| 西充县| 太湖县| 图片| 宁国市| 白银市| 晋江市| 旺苍县| 抚远县| 普宁市| 库车县| 长兴县| 洛宁县| 汨罗市| 昭觉县| 海口市| 合山市| 柘荣县|