肖子達,朱立谷,馮東煜,張 迪
(1.中國傳媒大學 計算機學院,北京 100024; 2. 安防大數(shù)據(jù)處理與應用北京市重點實驗室,北京 100024)
分布式數(shù)據(jù)庫聚合計算性能優(yōu)化
肖子達1,2*,朱立谷1,2,馮東煜1,2,張 迪1,2
(1.中國傳媒大學 計算機學院,北京 100024; 2. 安防大數(shù)據(jù)處理與應用北京市重點實驗室,北京 100024)
(*通信作者電子郵箱shawzida@gmail.com)
針對分布式數(shù)據(jù)庫在分析應用方面的聚合計算性能較低的問題,以MongoDB數(shù)據(jù)庫為研究實例,提出了一種基于片鍵和索引的數(shù)據(jù)庫性能提升方法。首先,通過分析業(yè)務特征指導選擇的片鍵字段,該字段需要保證數(shù)據(jù)在分片節(jié)點上的均勻布局; 其次,通過研究分布式數(shù)據(jù)庫的索引效率, 利用刪除查詢字段索引的方法進一步提升計算性能,該方法能充分利用硬件資源提高聚合計算的性能。實驗結(jié)果表明,采用高基數(shù)粒度的分片片鍵能夠讓數(shù)據(jù)在集群上均勻地分布在各個數(shù)據(jù)節(jié)點上,而舍棄索引使用全表查詢能夠有效提高聚合計算的速度,聚合計算優(yōu)化方法能夠有效提高聚合計算的性能。
NoSQL;MongoDB;MapReduce;聚合計算;性能優(yōu)化
在大數(shù)據(jù)應用方面,非關系型數(shù)據(jù)庫NoSQL(Not Only SQL)技術可以滿足存儲和分析大數(shù)據(jù)的需求。Moniruzzaman等[1]認為NoSQL的發(fā)展是適應超大規(guī)模的商業(yè)智能和社交網(wǎng)絡數(shù)據(jù)的。不同計算系統(tǒng)需要依據(jù)業(yè)務模型、事務需求和系統(tǒng)開銷來使用NoSQL[2-3]。
MongoDB是近年廣泛使用的一種NoSQL數(shù)據(jù)庫,其擁有動態(tài)的數(shù)據(jù)模式、自動分片和聚合計算等功能。相比傳統(tǒng)的關系型數(shù)據(jù)庫,MongoDB擁有更多的聚合方法來完成聯(lián)機分析處理(On-Line Analytical Processing, OLAP)的任務。
聚合方法在單機上無法滿足大規(guī)模數(shù)據(jù)的處理,NoSQL則提供了分布式集群架構,比如MongoDB支持水平擴展。除了水平擴展計算資源外,還能從片鍵選擇、索引創(chuàng)建等方面來提高有限資源系統(tǒng)的聚合計算性能。通過分析MongoDB的特性,本文提出一種依據(jù)應用場景來選擇分片片鍵的方法,并通過實驗分析結(jié)果來衡量不同片鍵分布特征導致的不同影響,表明聚合計算的性能達到了較高水平。
1.1 MongoDB
MongoDB是一種文檔型的NoSQL數(shù)據(jù)庫,其數(shù)據(jù)以BSON(Binary Serialized Document Format)格式存儲。Chitra等[4]指出MongoDB特別合適存儲用戶信息、產(chǎn)品信息和各種網(wǎng)絡內(nèi)容(博文、消息)。MongoDB的數(shù)據(jù)模式是動態(tài)的,數(shù)據(jù)結(jié)構十分靈活,在同一集合內(nèi)的文檔格式可以不一致,并且單個文檔內(nèi)部還可以嵌套文檔或者數(shù)組。這樣依據(jù)應用需求自由存放不同類型的數(shù)據(jù)的方式在關系型數(shù)據(jù)庫系統(tǒng)上是無法實現(xiàn)的。文獻[5-6]比較了MongoDB和關系型數(shù)據(jù)庫的讀寫性能, 表明MongoDB在數(shù)據(jù)量越大的情況下表現(xiàn)得越優(yōu)異;文獻[7-9]則在具體應用上使用MongoDB提高系統(tǒng)的處理能力。這些研究分析都表明MongoDB性能是非常優(yōu)異的。
NoSQL系統(tǒng)的一個關鍵特征就是分布式模型采用的是“share nothing”架構,在該架構下水平擴展時,不同服務器不會共享硬件資源[10]。MongoDB的水平擴展通過自動分片來實現(xiàn),這種實現(xiàn)對應用程序是透明的,與單機環(huán)境下的MongoDB數(shù)據(jù)庫操作一樣。
MongoDB的分片集群成員如下:
1)mongod節(jié)點。mongod分片節(jié)點用來存儲分片集合數(shù)據(jù)。通常,分片節(jié)點接收來自路由節(jié)點的操作請求。
2)config節(jié)點。config配置節(jié)點用來存儲分片集群信息。配置節(jié)點通常會返回路由節(jié)點需要的數(shù)據(jù)分布信息。
3)route節(jié)點。route路由節(jié)點用來接收客戶端的請求并將操作請求發(fā)給每個分片。通過詢問config節(jié)點來得知目標分片節(jié)點的信息。
MongoDB可以通過分片集群來提高系統(tǒng)的可用性,將聚合計算應用到分片集群上時無需應用程序進行附加的操作。分片是分割數(shù)據(jù),將數(shù)據(jù)塊分別存儲在不同機器上的過程[11],但這種方法只是從資源分配角度提高系統(tǒng)的性能,不能不假思索地認為它就是解決“數(shù)據(jù)庫很慢”的最佳方案。
分片集群的片鍵是集合的一個鍵,MongoDB根據(jù)片鍵來拆分數(shù)據(jù)。對于不同的分片片鍵類型,聚合計算的效率還是有差別的。分片的片鍵選擇對于集群的讀寫操作有著重大影響,在實際使用時應該仔細斟酌。擁有良好的分布隨機性和局部性特性的片鍵具有均衡的讀寫操作性能,但又側(cè)重于不同應用場景:如果應用是“一次寫入多次查詢”的場景,則應該使用具有最優(yōu)局部性特征的范圍片鍵;相反,如果是寫入操作比讀取更加頻繁的場景,則應該使用散列片鍵[12]。
MongoDB的MapReduce功能是MapReduce編程模式[13]的簡化實現(xiàn)。在MapReduce模型中, 數(shù)據(jù)被Map端處理后產(chǎn)生的中間數(shù)據(jù)要被分配到Reduce端[14]。這是一種非常強大的數(shù)據(jù)聚合工具。在分片集群的情況下,MongoDB還能進行MapReduce并行計算。圖1展示的MapReduce在分片集群下的并行計算。作為MongoDB的路由節(jié)點,mongos將客戶端發(fā)出的請求進行暫存,并詢問存儲各分片信息的config節(jié)點,以獲得相關數(shù)據(jù)的位置; mongos得到數(shù)據(jù)的分布后,將請求發(fā)給各個分片節(jié)點shard; 各shard節(jié)點進行mapper和reducer處理,并將處理數(shù)據(jù)返回給mongos; mongos將處理完的數(shù)據(jù)進行合并以及傳遞給最后的reducer。
圖1 MongoDB的MapReduce模型Fig. 1 MapReduce model of MongoDB
MongoDB提供的MapReduce聚合計算能夠幫助完成大量數(shù)據(jù)的聚合任務。定時執(zhí)行聚合分析任務考驗數(shù)據(jù)庫集群的性能。文獻[15-16]將MapReduce運用到在線聚合上通過并行處理提高在線請求的相應速度。文獻[17]通過Hadoop的MapReduce計算能力來提高整個MongoDB集群的計算能力,但這樣做的副作用是數(shù)據(jù)的讀寫性能明顯降低。
綜上所述,使用MongoDB實現(xiàn)大數(shù)據(jù)的處理與應用是可行的,但在大規(guī)模運行聚合計算時還是存在優(yōu)化調(diào)整的空間。
1.2 相關研究
許多研究人員從如下幾個方面提出提升分布式數(shù)據(jù)庫分片性能的方法: 吳潤秀等[18]提出了一種基于粒計算的數(shù)據(jù)分片模型; Liu等[19]通過數(shù)據(jù)操作頻率改進分片集群的均衡性能; Huang等[20]實現(xiàn)了復合自身應用的數(shù)據(jù)塊遷移方法,在其自己實現(xiàn)的自動分片控制器中移動最大頻率塊, 但是衡量基本數(shù)據(jù)處理性能時過多地依賴于經(jīng)驗而很難進行預先確認; Wang等[21]通過代理節(jié)點實現(xiàn)動態(tài)熱擴散的負載均衡, 這種方法通過占用更多的資源監(jiān)控系統(tǒng)負載來實現(xiàn)動態(tài)均衡。林基明等[22]提出一種基于分片分配選擇器的算法來優(yōu)化查詢執(zhí)行計劃。
在不同的具體應用中,有多種字段可以作為片鍵的候選字段。Kang等[23]使用MongoDB作為傳感器數(shù)據(jù)倉庫,選擇采用兩個字段作為復合片鍵:第1個字段設置為粒度適中的字段,第2個字段設置為更細粒度和高基數(shù)的字段,這樣,第1個字段能夠均勻分布在不同分片上,而同一分片上的數(shù)據(jù)塊也能通過第2個字段分割得更加細小。 Kookarinrat等[24]的分析得出,同時擁有隨機性和局部性特征的片鍵可以提供一個優(yōu)異的讀寫性能。
以上工作都是從分片負載均衡的角度提高分片性能,而對具有數(shù)據(jù)分析需求的系統(tǒng),不能只是簡單地在均勻分布集群上套用MapReduce方法,因為數(shù)據(jù)的均勻分布并不能保證聚合分析任務在各節(jié)點上同時完成。因此,對于聚合計算的應用場景,應該采用更有針對性的優(yōu)化方法。
MongoDB的聚合操作是一種消耗內(nèi)存資源和磁盤讀性能的計算過程。MongoDB的MapReduce是其中最靈活的計算接口。通過建立分片集群,可以有效提高MapReduce的運算能力。在已有硬件資源一定條件下,本文采取一種基于數(shù)據(jù)特征的優(yōu)化方法(流程如圖2)來提升集群的聚合計算能力。
圖2 優(yōu)化方法流程
Fig. 2 Flow of optimization method
在構建數(shù)據(jù)集合時,需要預估集群的工作負荷以選擇合適的片鍵。集群數(shù)據(jù)分布情況受到字段粒度的影響,聚合操作性能也受到查詢條件和讀寫I/O的影響。一個好的片鍵應該滿足寫操作擴展和查詢分離的目的。通過使用兩個字段作為復合片鍵能夠有效地分布數(shù)據(jù)文件[23],但是這種方法也會增加查詢數(shù)據(jù)的時延,因為均勻分布的數(shù)據(jù)失去了局部性特征。MapReduce的輸入通常為一定范圍內(nèi)的數(shù)據(jù),這種情況下,考慮查詢字段組成片鍵能改善時延增加的情況。
在確定字段后,需選擇合適的片鍵類型來確定數(shù)據(jù)在集群中的分布方式。片鍵的類型分為連續(xù)型、哈希型和標簽型三種。默認的片鍵都是連續(xù)型,而連續(xù)型片鍵會導致數(shù)據(jù)先插入到某個節(jié)點,然后再遷移到其他節(jié)點。為了解決這個問題,MongoDB引入了哈希片鍵。哈希片鍵會為片鍵字段創(chuàng)建哈希值,MongoDB集群依據(jù)該哈希值執(zhí)行分塊和分片操作。集合的分布對于寫入和讀取都是隨機的,這會對讀取操作造成影響。在前期實驗中發(fā)現(xiàn):由于其較慢的讀性能,這種片鍵方式不太適合MapReduce運行。第三種片鍵類型是標簽型。通過創(chuàng)建分片,可以將片鍵的指定范圍手動指向指定的分片節(jié)點上,這樣也能得到數(shù)據(jù)均勻分布的結(jié)果。默認連續(xù)型和標簽型都是比較適用于MapReduce的運行環(huán)境。
接下來需要消除相關的索引。因為在大范圍讀場景中,索引查詢將進行兩次查詢過程,原本能提高查詢速度的索引反而會增加數(shù)據(jù)庫的響應時間。關于到底在何時不該使用索引,Chodorow[25]認為當查詢需要返回集合中2%~60%的數(shù)據(jù)時就應該對索引查詢和全表查詢進行比較,而聚合操作是對集合內(nèi)全體數(shù)據(jù)進行聚合計算,查詢的數(shù)據(jù)量遠超過普通的即席查詢數(shù)據(jù)量, 所以本文的建議是對于需要聚合操作的數(shù)據(jù)集合,不對作為片鍵的字段進行索引。創(chuàng)建片鍵后,MongoDB可以手動刪除該索引,使得在進行MapReduce時采用全表查詢的方式。通過上一步片鍵的選擇保證數(shù)據(jù)的均勻分布,以及這一步的聚合計算全表查詢使得聚合計算的性能在有限資源的條件下提高。在后一章的實驗分析將會進一步證明。
在實際應用中,集合數(shù)據(jù)中有如下幾個字段可以作為候選片鍵: _id字段是一種包含自增的時間戳和隨機數(shù)的ObjectId對象; date字段為MapReduce計算的查詢參數(shù),對date字段的索引會影響查詢效率; name字段為Map函數(shù)分組的依據(jù),數(shù)據(jù)分片的讀寫和執(zhí)行MapReduce的效率會受該字段影響。依據(jù)本文方法可以判斷出date字段或者date和name的組合字段是合適的片鍵。
上述方法能在數(shù)據(jù)庫需要應用MapReduce時作為數(shù)據(jù)庫設計的參考方法,下面將通過實驗來驗證該方法的可行性和有效性。
針對不同的應用場景,片鍵的均勻性、隨機性、局部性特征對插入與讀取操作的影響各不相同[24]。通過實驗來探索不同片鍵對于聚合計算的影響,并驗證本文方法選擇的環(huán)境是否對聚合計算最優(yōu)。本文方法通過選擇業(yè)務的查詢字段作為片鍵字段,還充分利用刪除集合索引的步驟來減少聚合計算查詢時間。
3.1 實驗背景
實驗目的是滿足郵政局寄遞信息離線數(shù)據(jù)分析需求,其數(shù)據(jù)庫根據(jù)寄件日期按月份劃分集合存儲,每一條運單記錄作為一條文檔存儲在集合中,且每條運單文檔包括運單 ID、寄件日期、收件日期以及寄件人和收件人信息。
3.2 實驗環(huán)境
實驗的硬件設備包括6臺3.3 GHz CPU、16 GB內(nèi)存的服務器,硬盤容量2 TB。實驗數(shù)據(jù)采用固定時間范圍內(nèi)的數(shù)據(jù)以滿足MapReduce分析歷史數(shù)據(jù)的場景,數(shù)據(jù)總量超過2億條,占用硬盤104.3 GB的空間。
實驗的分片集群如圖3。MongoDB采用8節(jié)點分片集群,其成員配置如下: 4個分片節(jié)點(shard1~shard4)、3個配置節(jié)點(config)、1個路由節(jié)點(mongos)。
圖3 分片集群實驗環(huán)境Fig. 3 Fragment cluster experimental environment
依據(jù)片鍵和索引構成情況的不同將實驗內(nèi)容分為10組,每組實驗數(shù)據(jù)均達到2 000萬條。實驗數(shù)據(jù)設計如表1所示。實驗01、03、05、07、09組數(shù)據(jù)集合針對5種片鍵情況以全表查詢的方式實驗。01組數(shù)據(jù)采用時間戳自增的ObjectId類型_id作為片鍵; 03組數(shù)據(jù)以_id為片鍵并創(chuàng)建時間字段標簽感知分片(tag-aware)機制,標簽分片采用固定時間范圍劃分數(shù)據(jù),時間粒度保證每個分片執(zhí)行MapReduce的任務量是均等的。01組和03組主要探究標簽感知分片功能對MapReduce計算的影響; 05組數(shù)據(jù)以時間字段作為片鍵; 07組以字符字段和時間字段組成復合片鍵; 09組以時間字段和字符字段組成復合片鍵。這3種分片方式用來與本文提出的優(yōu)化方法中關于片鍵的候選片鍵進行比較。實驗02、04、06、08、10組通過索引的方式查詢數(shù)據(jù),與前一組實驗互為對照,以驗證本文方法中關于索引問題的論述。
表1 各測試集合的模式Tab. 1 Patterns of each test set
3.3 實驗步驟
基于應用的目的,使用MapReduce對數(shù)據(jù)集合進行聚合統(tǒng)計,聚合計算進行“name”字段分組并統(tǒng)計數(shù)量的任務。首先,在進行計算之前,查詢“date”時間范圍的目標數(shù)據(jù)。在mapper中,將字符串字段“name”作為分組依據(jù),在reducer中將收到的分組數(shù)據(jù)進行累加。這個任務能夠驗證本文方法對聚合計算性能的影響。
此外,為了衡量索引對查詢性能的影響,實驗將添加對name字段的單值查詢,對date字段的范圍查詢。
每個環(huán)境都進行上述兩個測試單元,針對每個分片環(huán)境的實驗步驟如下:
1)導入數(shù)據(jù),設置索引、片鍵以及相關分片配置信息(針對標簽分片的操作步驟)。
2)運行MapReduce腳本,依此累加等距時間范圍內(nèi)的數(shù)據(jù)進行聚合分析,并運行查詢腳本,隨機查詢姓名字符串和時間范圍的相關數(shù)據(jù)。
3)刪除數(shù)據(jù)以及配置信息,重復步驟1)~2)直到完成所有分片情況。
重復進行實驗能排除偶然因素對數(shù)據(jù)產(chǎn)生的影響,在統(tǒng)計性能指標時不會將離群值納入結(jié)果中。
3.4 實驗結(jié)果與分析
3.4.1 MapReduce的實驗結(jié)果
片鍵對于MapReducde并行計算有著很大的影響。如圖4、5所示,在相同的索引環(huán)境下,使用查詢字段(date字段)作為片鍵的處理速度是最快的,而使用復合索引的運行性能比使用單片鍵date的性能差。作為復合片鍵的比較,查詢條件匹配越低({date:1, name: 1})的效率要比匹配越低({ name: 1, date:1 })執(zhí)行速度慢。實驗數(shù)據(jù)中,date字段相比name字段重復值較小。
圖4 無索引聚合計算性能指標Fig. 4 Metric of aggreagation without index
圖5 有索引聚合計算性能指標Fig. 5 Metric of aggreagation with index
當數(shù)據(jù)寫入完畢,MongoDB分布式環(huán)境下運行Balancer進程,該進程會完成各個節(jié)點的數(shù)據(jù)遷移以達到數(shù)據(jù)均勻的情況。數(shù)據(jù)分布的最終結(jié)果如表2。
表2 各集合分片分布 %Tab. 2 Distribution of shards of each cluster %
從表2中可以看出來,高基數(shù)(high cordinality)的字段(date字段)作為片鍵的首位字段反而不能夠有效地將數(shù)據(jù)均勻分布,證明了將基數(shù)粒度較小的字段放置在復合片鍵首部的情況性能會更好[23]。
通過實驗還可以得出,具有過高基數(shù)的字段作為片鍵在查詢分離上也會有著明顯的性能缺陷。通過表2的分片數(shù)據(jù)可以看出,_id類型作為片鍵能將數(shù)據(jù)均勻分布到分片上,但是這種均勻分布并不能提高分片上并行計算的速度。數(shù)據(jù)依據(jù)時間分布則可以保證時間連續(xù)的數(shù)據(jù)在存儲空間上的連續(xù)性,這能提高MapReduce的查詢效率,但是這種提高遠遠沒有使用其他字段作為片鍵的性能好。
索引可以提高單次查詢的效率,對于MapReduce定位目標數(shù)據(jù)有著很大的影響。這是MongoDB默認將索引存放在內(nèi)存中以提高查詢速度,但如圖6~10的各個片鍵條件下的MapReduce性能指數(shù)表明,沒有索引的集合的處理速度最快。這是因為在有索引的情況下,MapReduce需要進行兩次查詢:一次是在索引條目中查找,一次是根據(jù)索引指針去查找相關文檔數(shù)據(jù)。
圖6 _id片鍵集合MapReduce性能指標Fig. 6 Metric of MapReduce with _id shard
圖7 帶標簽的_id片鍵集合MapRedcude性能指標Fig. 7 Metric of MapReduce with tagged _id shard
圖8 date片鍵集合MapReduce性能指標Fig. 8 Metric of MapReduce with date shard
從聚合計算的應用場景來說,其目標數(shù)據(jù)是集合中一部分文檔,聚合計算的查詢時間復雜度是O(n2);而優(yōu)化方法針對聚合計算的查詢條件,直接進行全表查詢來使得查詢時間與數(shù)據(jù)量趨于線性關系。從存儲代價方面分析,實驗環(huán)境下2 000萬條數(shù)據(jù)產(chǎn)生的索引占用內(nèi)存空間達到 2 GB以上,而將數(shù)據(jù)量增加到2億條數(shù)據(jù)時,內(nèi)存索引達到了21 GB以上,MongoDB的進程頻繁地在內(nèi)存和磁盤中交換索引,進而降低聚合處理速度。全表查詢的MapReduce比索引查詢的MapReduce快4倍。通過分析這樣的性能指標,可以明顯看到本文提出的優(yōu)化方法對于聚合操作的性能是有明顯提升的, 并且數(shù)據(jù)量越大優(yōu)勢越明顯。
圖9 name&date片鍵集合MapReduce性能指標Fig. 9 Metric of MapReduce with combined name&date shard
圖10 date&name片鍵集合MapReduce性能指標Fig. 10 Metric of MapReduce with combined date&name shard
3.4.2 查詢操作的實驗結(jié)果。
單值查詢和范圍查詢是數(shù)據(jù)庫的基本應用場景,數(shù)據(jù)庫可以通過索引提高查詢速度,以下將通過實驗來驗證沒有索引的集群對于查詢的響應速度。
通過表3可以看出,刪除索引顯然降低了單值查詢的性能。有無索引是對查詢條件的字段是否建立索引。
表3 查詢響應時間指標 sTab. 3 Response time of search function s
分布式數(shù)據(jù)庫的聚合功能使得MongoDB能夠滿足數(shù)據(jù)分析的任務,在滿足基本統(tǒng)計分析的要求下,應用開發(fā)者和數(shù)據(jù)庫管理員還可以從聚合計算框架的特性上進一步調(diào)優(yōu)數(shù)據(jù)庫系統(tǒng)。本文方法以實際的項目出發(fā),分別從片鍵和索引兩個方面來探究MongoDB聚合操作的優(yōu)化方法,而這種方法能夠應用到同類分布式架構的數(shù)據(jù)庫系統(tǒng)。采用高基數(shù)粒度的分片片鍵能夠讓數(shù)據(jù)在集群上較均勻地分布在各個節(jié)點,而當聚合計算的查詢字段是低基粒度的字段時,可以與高基粒度組合成復合片鍵來滿足數(shù)據(jù)計算和均勻存儲的需求。而另一種片鍵選擇的方法適用于部分業(yè)務場景,這種片鍵在較高粒度的字段中選擇最能提高聚合計算速度的字段,而不應滿足數(shù)據(jù)的均勻分布。對于聚合計算任務更頻繁的情形,舍棄索引查詢使用全表查詢能夠有效提高計算速度。這種索引優(yōu)化的方法將以降低普通查詢響應性能為代價來提高整個分布式系統(tǒng)的計算能力。
綜上所述,在一個資源有限的集群中,通過本文方法可以有效提高聚合計算的性能。這種方法從具體的應用場景出發(fā),分析出滿足系統(tǒng)聚合計算性能要求的片鍵并能推廣至同類型數(shù)據(jù)庫。
在接下來的工作,還將繼續(xù)探索MongoDB的最佳設計方法,以幫助數(shù)據(jù)庫管理員合理地配置數(shù)據(jù)庫集群;最終目標是建立一個基于分布式系統(tǒ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 的視頻直播, 錄制及存儲系統(tǒng)設計[J]. 計算機應用, 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ù)存儲架構和算法研究綜述[J]. 計算機應用, 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] 吳潤秀, 吳水秀, 劉清. 基于粒計算的數(shù)據(jù)分片算法[J]. 計算機應用, 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ù)庫查詢優(yōu)化[J]. 計算機應用, 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。 基金項目:國家自然科學基金資助項目(61730063)。
肖子達(1992—),男,湖南長沙人,碩士研究生,主要研究方向:分布式系統(tǒng)、數(shù)據(jù)可視化; 朱立谷(1965—),男,北京人,教授,博士生導師,博士,主要研究方向:計算機系統(tǒng)結(jié)構、海量存儲; 馮東煜(1989—),男,遼寧錦州人,博士研究生,主要研究方向:大數(shù)據(jù)系統(tǒng)架構、分布式系統(tǒng); 張迪(1987—),男,甘肅蘭州人,博士,主要研究方向:數(shù)據(jù)可視化、云存儲。
1001-9081(2017)05-1251-06
10.11772/j.issn.1001-9081.2017.05.1251
TP316
A