張海兵,操 鋒,段高博,許永宏,喬 俊
(中鐵第四勘察設(shè)計(jì)院集團(tuán)有限公司,武漢 430063)
隨著鐵路和城市軌道交通行業(yè)建筑信息模型(Building Information Modeling,BIM)應(yīng)用的不斷推進(jìn),在BIM 應(yīng)用項(xiàng)目中均會(huì)引用BIM 平臺(tái),以實(shí)現(xiàn)多單位間工程協(xié)作、施工過程管理或運(yùn)維管理等,眾多的管理平臺(tái)均需要完善的存儲(chǔ)機(jī)制為前端的管理業(yè)務(wù)做支撐。隨著BIM 項(xiàng)目的日益增多,BIM 文件數(shù)據(jù)量、體量越來越大。同時(shí),鐵路和城市軌道交通行業(yè)BIM設(shè)計(jì)成果具有專業(yè)多、體量大、階段性的特征,采用什么存儲(chǔ)機(jī)制,以支撐鐵路和城市軌道交通BIM 項(xiàng)目的設(shè)計(jì)成果文件的管理、高效檢索和文件的擴(kuò)展存儲(chǔ)是亟須解決的問題。良好的存儲(chǔ)機(jī)制也將為實(shí)現(xiàn)專業(yè)間協(xié)作平臺(tái)、專業(yè)間提資平臺(tái)、項(xiàng)目成果管理平臺(tái)建設(shè)打下良好的基礎(chǔ)。
針對(duì)BIM 設(shè)計(jì)成果的存儲(chǔ)策略有很多,有基于文件傳輸協(xié)議(File Transfer Protocol,F(xiàn)TP)服務(wù)器的文件存儲(chǔ),但是存在難以擴(kuò)容、服務(wù)器負(fù)載不均衡,缺乏文件備份與恢復(fù)機(jī)制等問題。有基于Hadoop 分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)的存儲(chǔ),但是無法高效地對(duì)構(gòu)件(如族Rfa、ipt)、設(shè)計(jì)參數(shù)文檔(xls、doc)等小文件進(jìn)行存儲(chǔ)。Mongo DB 可用于文件數(shù)據(jù)的存儲(chǔ),具有可擴(kuò)展、高可用的特性。本文提出基于MongoDB的BIM 設(shè)計(jì)文件的存儲(chǔ)機(jī)制,實(shí)現(xiàn)不同格式、不同大小的設(shè)計(jì)成果的可擴(kuò)展、高可用存儲(chǔ),并提供檢索機(jī)制便于數(shù)據(jù)的檢索。
為實(shí)現(xiàn)管理平臺(tái)中海量、類型復(fù)雜、文件體量跨度大的文件的存儲(chǔ)且兼顧高擴(kuò)展性、高伸縮性和數(shù)據(jù)高可用,本文采用MongoDB 的分片加副本機(jī)制,并引用GridFS 存儲(chǔ)機(jī)制,建立BIM 設(shè)計(jì)文件的存儲(chǔ)集群,如圖1 所示。
(1)Mongos 即集群請(qǐng)求的入口,所有的請(qǐng)求都通過Mongos進(jìn)行協(xié)調(diào),Mongos 是一個(gè)請(qǐng)求分發(fā)中心,負(fù)責(zé)把對(duì)應(yīng)的數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的Shard 服務(wù)器上。在生產(chǎn)環(huán)境通常有多個(gè)Mongos 作為請(qǐng)求的入口,防止入口掛掉的問題。
(2)Config Server 即配置服務(wù)器,存儲(chǔ)所有數(shù)據(jù)庫元信息(路由、分片)的配置。Mongos 本身沒有物理存儲(chǔ)分片服務(wù)器和數(shù)據(jù)路由信息,只是緩存在內(nèi)存里,配置服務(wù)器則實(shí)際存儲(chǔ)這些數(shù)據(jù)。
(3)分片(Sharding)是指將數(shù)據(jù)拆分,將其分散在不同的機(jī)器上。將數(shù)據(jù)分散到不同的機(jī)器上,不需要功能強(qiáng)大的服務(wù)器就可以存儲(chǔ)更多的數(shù)據(jù)和處理更大的負(fù)載。將集合切成小塊,這些塊分散到若干片里,每個(gè)片只負(fù)責(zé)總數(shù)據(jù)的一部分,最后通過一個(gè)均衡器來對(duì)各個(gè)分片進(jìn)行均衡(數(shù)據(jù)遷移)。Shard機(jī)制的存在支持了BIM 設(shè)計(jì)文件的橫向擴(kuò)展存儲(chǔ)。
(4)Replica set 即副本集,其實(shí)就是Shard 的備份,防止Shard 掛掉之后數(shù)據(jù)丟失。復(fù)制提供了數(shù)據(jù)的冗余備份,并在多個(gè)服務(wù)器上存儲(chǔ)數(shù)據(jù)副本,提高了BIM 設(shè)計(jì)成果文件的可用性,并可以保證數(shù)據(jù)的安全性。
(5)GridFS 即MongoDB 的一個(gè)子模塊,使用GridFS 可以輔助管理BIM 設(shè)計(jì)成果的大文件,如大體量的BIM 模型。它使用兩個(gè)集合(Collection)存儲(chǔ)文件,一個(gè)集合是Chunks,用于存儲(chǔ)文件內(nèi)容的二進(jìn)制數(shù)據(jù);另一個(gè)集合是Files,用于存儲(chǔ)文件的元數(shù)據(jù)。如果文件大于Chunksize,會(huì)先將文件按照Chunk的大小分割成多個(gè)Chunk 塊,最終將Chunk 塊的信息存儲(chǔ)在fs.chunks 集合的多個(gè)文檔中。然后將文件信息存儲(chǔ)在fs.files集合的唯一一份文檔中。其中fs.chunks 集合中多個(gè)文檔中的file_id 字段對(duì)應(yīng)fs.files 集中文檔“_id”字段。
圖1 基于MongoDB 的BIM 設(shè)計(jì)文件的存儲(chǔ)架構(gòu)
基于本文的存儲(chǔ)架構(gòu)便于文件存儲(chǔ)的橫向擴(kuò)展,增加存儲(chǔ)節(jié)點(diǎn)可擴(kuò)充存儲(chǔ)容量,達(dá)到存儲(chǔ)的高可擴(kuò)展,解決傳統(tǒng)存儲(chǔ)方式存儲(chǔ)容量不夠的問題?;诟北炯鞴?jié)點(diǎn)會(huì)通過心跳算法來檢測(cè)各自的健康狀況,當(dāng)主節(jié)點(diǎn)出現(xiàn)故障時(shí),多個(gè)從節(jié)點(diǎn)會(huì)觸發(fā)一次新的選舉操作,并選舉其中一個(gè)作為新的主節(jié)點(diǎn),從而確保系統(tǒng)的高可用性?;贕ridFS 機(jī)制可支持存儲(chǔ)量小的設(shè)計(jì)成果如普通的文檔、Excel 表格、Rfa 族文件、ipt 構(gòu)件等,也可支持成百上千兆字節(jié)的BIM 模型成果。
MongoDB 存儲(chǔ)文件元數(shù)據(jù)包含兩部分,默認(rèn)元數(shù)據(jù)和自定義元數(shù)據(jù),默認(rèn)元數(shù)據(jù)包含文檔ID、名稱、長(zhǎng)度、塊長(zhǎng)度、文件md5 和上傳時(shí)間。本文設(shè)計(jì)BIM 設(shè)計(jì)文件自定義元數(shù)據(jù)包含以下字段,如表1 所示,可根據(jù)項(xiàng)目需要額外進(jìn)行擴(kuò)充,基于元數(shù)據(jù)模型,配合具體項(xiàng)目的業(yè)務(wù)邏輯,實(shí)現(xiàn)高效檢索。
表1 自定義元數(shù)據(jù)字段
如圖2 所示,在本次研究的課題成果應(yīng)用于基于軌道交通的BIM+GIS 的集成系統(tǒng)中,采用3 臺(tái)服務(wù)器搭建了最小的高可用、可擴(kuò)展的存儲(chǔ)集群,用于該系統(tǒng)的BIM 設(shè)計(jì)成果數(shù)據(jù)的存儲(chǔ)和管理,便于數(shù)據(jù)的下載和利用。
圖2 基于軌道交通的BIM+GIS 的集成系統(tǒng)