(中國建筑科學(xué)研究院深圳分院,深圳 518057)
我國建筑業(yè)正處在大發(fā)展、大建設(shè)階段。建筑業(yè)是資源和能源消耗大戶,其中模板消耗木材的數(shù)量非常龐大。據(jù)統(tǒng)計(jì),木模板市場占到整個模板市場的3/4之上。而木模板有效利用率只為5%。木模板系統(tǒng)的使用不僅浪費(fèi)了木材等資源,而且違背了國家產(chǎn)業(yè)政策向?qū)?,增加了碳排放,也造成了施工成本的大幅提高?/p>
鋁合金模板作為新一代的建筑模板,具有低碳環(huán)保,無建筑施工垃圾,重量輕。拆裝靈活、剛度高、使用壽命長,澆筑的混凝土面平整光潔,施工對機(jī)械依賴程度低等優(yōu)勢。隨著建筑行業(yè)和科學(xué)技術(shù)的快速發(fā)展,低碳經(jīng)濟(jì)發(fā)展模式已經(jīng)成為全球共識,選擇鋁合金模板系統(tǒng)施工成為必然的發(fā)展趨勢。
鋁合金模板加工完成送到現(xiàn)場之后,基本不能修改,不像木模板可以隨便切割。即使模板設(shè)計(jì)上的小小差錯,都可能需要重新深化設(shè)計(jì),加工及制作,再從廠家運(yùn)至施工現(xiàn)場。所以要求鋁合金模板設(shè)計(jì)圖紙必須要十分準(zhǔn)確。鋁合金模板設(shè)計(jì)軟件除了處理模板本身的數(shù)據(jù)信息之外,還需要處理項(xiàng)目的建筑模型信息,結(jié)構(gòu)模型信息以保證模板的對孔,漏漿,碰撞檢查等。因此,如何提升數(shù)據(jù)存儲和讀取性能同時保證系統(tǒng)服務(wù)穩(wěn)定可靠成為該軟件的焦點(diǎn)。
MongoDB是一個高性能、開源、模式自由,基于分布式文件存儲的NoSQL數(shù)據(jù)庫。MongoDb的數(shù)據(jù)模式是動態(tài)的,數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,在同一集合內(nèi)的文檔格式可以不一致,單個文檔內(nèi)部無需考慮數(shù)據(jù)結(jié)構(gòu)及類型,可動態(tài)增加非結(jié)構(gòu)化數(shù)據(jù),還可以嵌套文檔或者數(shù)組。Mongo最大的特點(diǎn)是它支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。其主要功能特性如下:
1)跨平臺、支持語言眾多;
2)模式自由;
3)支持文件存儲;
4)易于水平擴(kuò)展;
5)復(fù)制集機(jī)制;
6)多級索引;
7)面向集合存儲;
8)豐富的查詢語句。
數(shù)據(jù)存儲系統(tǒng)為獨(dú)立的一層,介于業(yè)務(wù)層與數(shù)據(jù)庫之間,主要用于提供給業(yè)務(wù)一個類似內(nèi)存數(shù)據(jù)集合的接口進(jìn)行領(lǐng)域?qū)ο蟮脑L問,并負(fù)責(zé)領(lǐng)域?qū)ο蟮某志没?。系統(tǒng)采用Repository模式封裝存儲,讀取和查找行為的機(jī)制。如圖1所示,將對領(lǐng)域?qū)ο髷?shù)據(jù)公共操作部分提取為IRepository接口,如常見的保存、刪除、查詢等方法,MongoRepository類來具體實(shí)現(xiàn)上面的接口的方法。MongoDB并不像關(guān)系型數(shù)據(jù)庫一樣需要定義一個ORM框架。不同的領(lǐng)域?qū)ο髮?shù)據(jù)的處理有著不同的需求,所以對應(yīng)不同的領(lǐng)域?qū)ο蠖x各自的Repository類。
結(jié)合使用MongoDB的副本集和分片集群技術(shù),使得系統(tǒng)擁有高擴(kuò)展性、高伸縮性的同時也確保集群的可用性和可靠性。利用Mongo的分片技術(shù),將數(shù)據(jù)自動的分解成多個塊,存儲在不同的服務(wù)器節(jié)點(diǎn)上,每個塊都有對應(yīng)副本集。確保有服務(wù)器宕機(jī)時,其他的副本可以立即接替壞掉的部分繼續(xù)工作。數(shù)據(jù)分片以后,可以利用多臺服務(wù)器構(gòu)建一個水平可擴(kuò)展的運(yùn)算架構(gòu),為系統(tǒng)提供強(qiáng)大的處理能力。以確保讓不停增長的數(shù)據(jù)始終如一的提供初始的訪問性能,而不會隨著數(shù)據(jù)的增長,系統(tǒng)的訪問速度越來越慢。
如圖2所示,分片集群有四個組件:mongos、config server、shard、replica set。應(yīng)用請求mongos來操作mongoDB的增刪改查,config server存儲數(shù)據(jù)庫元信息,并且和mongos做同步,數(shù)據(jù)最終存入在shard(分片)上,為了防止數(shù)據(jù)丟失同步在副本集中存儲了一份,Arbiter仲裁在數(shù)據(jù)存儲到分片的時候決定存儲到哪個節(jié)點(diǎn)。
圖2 分片集群
隨著系統(tǒng)數(shù)據(jù)量的不斷增大,對海量數(shù)據(jù)進(jìn)行快速運(yùn)算是該存儲系統(tǒng)必須解決的一個問題。MapReduce模型是解決該問題一個較為成熟的解決方案。該模型將計(jì)算任務(wù)切割并分發(fā)到計(jì)算集群的單個計(jì)算節(jié)點(diǎn)并行計(jì)算,在計(jì)算完成后,把結(jié)果返回給主服務(wù)器,主服務(wù)器匯總結(jié)果,最終完成計(jì)算任務(wù)的處理。
MongoDB的MapReduce功能是MapReduce編程模式的簡化實(shí)現(xiàn)。主要由Map、Shuffle和Reduce組成,使用時Map和Reduce需要顯式定義,shuffle由MongoDB來實(shí)現(xiàn)。首先Map將運(yùn)算映射到文檔,生成Key-Value鍵值對,然后Shuffle按照Key進(jìn)行分組,并將key相同的Value組合成數(shù)組。最后Reduce則把Value數(shù)組化簡為單值被返回。
如圖3所示,MapReduce在分片集群進(jìn)行并行計(jì)算時,路由節(jié)點(diǎn)mongos將客戶端發(fā)出的請求進(jìn)行暫存,并通過訪問config節(jié)點(diǎn)以獲得相關(guān)數(shù)據(jù)的位置。mongos得到數(shù)據(jù)的分布后,將請求發(fā)給相應(yīng)的分片節(jié)點(diǎn)shard,shard節(jié)點(diǎn)進(jìn)行MapReduce處理,并將處理數(shù)據(jù)返回給mongos,mongos將處理完的數(shù)據(jù)進(jìn)行運(yùn)算之后傳遞給最后的reducer。
圖3 MapReduce在分片集群并行計(jì)算過程
此次測試共涉及4臺服務(wù)器: 1臺Web 服務(wù)器和3臺 MongoDB 服務(wù)器。機(jī)器配置:CPU 為Intel(R)Core(TM)2 Duo CPU T6570 @ 2.10 GHz、內(nèi)存為16 G DDR2 667、硬盤為SATA 1T、操作系統(tǒng)為Windows Server 2008 R2。編寫程序進(jìn)行 MongoDB 千萬級數(shù)據(jù)量的性能測試,分別測試如下幾個項(xiàng)目。
如圖4所示,向MongoDB和MySQL數(shù)據(jù)庫插入1億條數(shù)據(jù),每條數(shù)據(jù)大小1kb的情況下,MySQL的插入速度高于MongoDB。如圖5所示,在不同大小的數(shù)據(jù)庫中查詢1 000條數(shù)據(jù),每條數(shù)據(jù)的大小1kb的情況下。MongoDB的查詢速度遠(yuǎn)超MySQL,查詢的數(shù)據(jù)量逐漸增多的時候,MySQL的查詢速度是穩(wěn)步下降的,而MongoDB的查詢速度卻有些起伏。
圖4 插入數(shù)據(jù)對比
圖5 查詢數(shù)據(jù)對比
如圖6所示,在插入的數(shù)據(jù)每條為1 kB 的情況下,正常插入的方式在數(shù)據(jù)量小于1 000萬條時,性能是比較高效的,但之后急劇降低,通過查看任務(wù)管理器,發(fā)現(xiàn)此時的內(nèi)存占用率高于90%以上,說明數(shù)據(jù)的插入跟內(nèi)存有著直接的關(guān)系,數(shù)據(jù)量過大時,需要在磁盤和內(nèi)存間進(jìn)行大量的數(shù)據(jù)交換,因此性能下降較快。而在分片的情況下,則相對穩(wěn)定。批量操作在分片和非分片情況下差別較小。
圖6 插入數(shù)據(jù)對比
如圖7所示,在每次查詢100條記錄,每條數(shù)據(jù)大小1kb的情況下。分片集群與常規(guī)查詢差距不大,但分片集群的穩(wěn)定性要高于非分片查詢。在加入聚合排序條件之后,兩種情況的速度都有所下降。
圖7 查詢數(shù)據(jù)對比
利用MongoDB的模型自由性、高可用性、高可擴(kuò)展性等特點(diǎn),搭建的鋁合金模板設(shè)計(jì)軟件云端數(shù)據(jù)存儲系統(tǒng),可靈活地支持對象屬性字段的擴(kuò)展,同時MongoDB的Shading技術(shù),為突破單節(jié)點(diǎn)數(shù)據(jù)庫服務(wù)器的I/O能力限制,提供了水平擴(kuò)展的解決方案。使用MapReduce模型搭建的并行計(jì)算模型保障了大規(guī)模數(shù)據(jù)運(yùn)算、分析等處理的高效性與穩(wěn)定性。數(shù)據(jù)復(fù)制與故障切換功能,為系統(tǒng)的可靠性提供了保障。實(shí)踐表明,本系統(tǒng)的靈活度及可擴(kuò)展性良好,為建筑信息模型數(shù)據(jù)存儲提供了一種思路。
[1] Heidemann J,Bulusu N.Using geospatial information in sensor networks[C].Proceedings of CSTB workshop on Intersection of Geospatial Information and Information Technology,Arlington,VA,USA, 2001.
[2] MongoDB manual[EB/OL].2012.http://docs.mongodb.org/manual/sharding/.
[3] Chodorow K,Dirolf M.MongoDB 權(quán)威指南[M].程顯峰,譯.北京:人民郵電出版社, 2011.
[4] 姚林, 張永庫.NoSQL 的分布式存儲與擴(kuò)展解決方法[J].計(jì)算機(jī)工程, 2012, 38(6): 40-42.
[5] Kuznetsov S D,Poskonin A V.NoSQL data management systems[J].Programming & Computer Software, 2014, 40(6): 323-332.
[6] Copeland R.MongoDB 應(yīng)用設(shè)計(jì)模式[M].陳新,譯.北京:中國電力出版社, 2015.
[7] 龔健雅. 空間數(shù)據(jù)庫管理系統(tǒng)的概念與發(fā)展趨勢[J].測繪科學(xué), 2001, 26(3): 4-9.
[8] Stonebraker M.SQL databases v.NoSQL databases[J].Communications of the ACM, 2010, 53(4): 10-11.