王寶會(huì) 邢景軒 高 遠(yuǎn)
(北京航空航天大學(xué)軟件學(xué)院,北京 100191)
運(yùn)用FastDFS和Drill構(gòu)建海量BIM族數(shù)據(jù)存儲(chǔ)和查詢平臺(tái)
王寶會(huì) 邢景軒 高 遠(yuǎn)
(北京航空航天大學(xué)軟件學(xué)院,北京 100191)
BIM族數(shù)據(jù)屬于半結(jié)構(gòu)化數(shù)據(jù),其數(shù)據(jù)結(jié)構(gòu)相對(duì)松散且可變,難以使用傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ)和查詢。本文以FastDFS分布式文件系統(tǒng)和Drill實(shí)時(shí)查詢引擎為基礎(chǔ),在BIM資源庫(kù)下針對(duì)族數(shù)據(jù)的存儲(chǔ)和查詢構(gòu)建了的分布式數(shù)據(jù)處理平臺(tái)。經(jīng)測(cè)試,較傳統(tǒng)以關(guān)系數(shù)據(jù)庫(kù)為核心的非分布式系統(tǒng),存儲(chǔ)性能和查詢性能均有較大提升。
族數(shù)據(jù); BIM; FastDFS; Drill
【DOI】 10.16670/j.cnki.cn11-5823/tu.2016.06.04
BIM(Building Information Modeling)是“建筑信息建模”的簡(jiǎn)稱(chēng)。因其在縮短工期、節(jié)約成本、提高生產(chǎn)效率等方面的先天優(yōu)勢(shì),BIM相關(guān)技術(shù)廣泛應(yīng)用于以美國(guó)為首的眾多國(guó)家。[1]BIM技術(shù)的不斷發(fā)展促使BIM相關(guān)數(shù)據(jù)迅速增長(zhǎng),建立BIM數(shù)據(jù)的資源庫(kù)變得越發(fā)重要。族數(shù)據(jù)是BIM資源庫(kù)中的主要處理對(duì)象。
1.1 數(shù)據(jù)介紹
1.1.1 族
族(Family)是Autodesk的BIM構(gòu)建軟件Revit中的一個(gè)概念。建筑模型由墻、窗、門(mén)等圖元(Element)構(gòu)成,族中包含了這些圖元的幾何定義和及其所使用的參數(shù)(其名稱(chēng)與含義),圖1展示了Revit中的門(mén)圖元及其門(mén)族,圖中門(mén)圖元為三維模型,其對(duì)應(yīng)的族中包含了尺寸、材質(zhì)等參數(shù)。族包含多個(gè)通用參數(shù)集,不同的族類(lèi)型包含不同的參數(shù)集合,若圖元參數(shù)的集合相同,則屬于同一個(gè)族類(lèi)型。屬于同一族類(lèi)型下具體實(shí)例的具體參數(shù)值可以各不相同。[2]
對(duì)項(xiàng)目中任何位置的圖元族數(shù)據(jù)修改后,Revit 都能在整個(gè)項(xiàng)目?jī)?nèi)協(xié)調(diào)此修改,始終保持模型的一致性,如鋼筋之間的間隔相等,如果修改了圖元族數(shù)據(jù)中的長(zhǎng)度,Revit會(huì)使這種等距關(guān)系仍保持不變。所以族是體現(xiàn)Revit參數(shù)化建模的數(shù)據(jù)基礎(chǔ),是BIM思想在Revit中的核心表現(xiàn)。
BIM資源庫(kù)的作用之一便是匯總作為建筑模型數(shù)據(jù)基礎(chǔ)的族資源,提高用戶存儲(chǔ)和查詢族信息的效率,其中各不相同的族所包含的參數(shù)便是存儲(chǔ)和查詢的信息實(shí)體。
圖1 Revit中的門(mén)圖元與其門(mén)族
1.1.2 半結(jié)構(gòu)化數(shù)據(jù)
Serge Abiteboul簡(jiǎn)要指出,半結(jié)構(gòu)化數(shù)據(jù)(Semi-structured Data)既非完全無(wú)結(jié)構(gòu),又不同于傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)一般結(jié)構(gòu)嚴(yán)謹(jǐn)。[3]李慶華和劉昊提出了一種用待確定文法分析半結(jié)構(gòu)化數(shù)據(jù)的方法,并在文中給出了半結(jié)構(gòu)化數(shù)據(jù)更為明確的定義:
“如果數(shù)據(jù)的結(jié)構(gòu)所對(duì)應(yīng)的語(yǔ)言無(wú)法用全局一致的上下文無(wú)關(guān)文法描述,但是存在數(shù)據(jù)的一個(gè)有序劃分,對(duì)分割出來(lái)的每個(gè)分劃,利用前i個(gè)分劃的語(yǔ)義信息,可以得到第i+1個(gè)分劃的局部一致的上下文無(wú)關(guān)文法,則稱(chēng)之為半結(jié)構(gòu)化數(shù)據(jù)。[4]”
所謂“上下文無(wú)關(guān)”,即對(duì)于形式V→w,字符串V總可被任意字符串w自由替換,而無(wú)需考慮V出現(xiàn)的上下文[5]。
由此可見(jiàn),區(qū)分結(jié)構(gòu)化、非結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)的關(guān)鍵在于數(shù)據(jù)是否存在全局或局部的上下文無(wú)關(guān)文法。
半結(jié)構(gòu)化數(shù)據(jù)在數(shù)據(jù)結(jié)構(gòu)定義上有很大的靈活性,適于描述互聯(lián)網(wǎng)和大數(shù)據(jù)環(huán)境中多樣的復(fù)雜數(shù)據(jù),但這也使得傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)對(duì)其無(wú)從下手,加大了數(shù)據(jù)存儲(chǔ)、查詢等操作的難度。
1.2 應(yīng)用模塊介紹
1.2.1 FastDFS
FastDFS(Fast Distributed File System)是一款類(lèi)GFS(Google File System)的開(kāi)源分布式文件存儲(chǔ)系統(tǒng),由淘寶網(wǎng)的資深架構(gòu)師余慶開(kāi)發(fā)。
FastDFS含有TrackerServer和StorageServer兩種角色,分別負(fù)責(zé)調(diào)度任務(wù)和文件數(shù)據(jù)的存儲(chǔ)。在架構(gòu)和設(shè)計(jì)理念,較之其他分布式文件系統(tǒng),其主要特點(diǎn)為輕量級(jí)、分組方式和對(duì)等結(jié)構(gòu)。[6]
1.2.2 Drill
Drill是Apache Hadoop的頂級(jí)項(xiàng)目,是Google Dremel的開(kāi)源實(shí)現(xiàn)。自2006年《Dremel:Interactive Analysis of Web-Scale Datasets》論文完成至今,Google以將Dremel廣泛運(yùn)用于Google Books的OCR檢索和Gmail的垃圾郵件分析等場(chǎng)景。這些應(yīng)用體現(xiàn)了Dremel實(shí)時(shí)分析、處理數(shù)據(jù)的優(yōu)秀性能,也從側(cè)面體現(xiàn)了Drill的實(shí)時(shí)查詢?cè)谠O(shè)計(jì)理念上的先進(jìn)性。
由于不需要調(diào)用MapReduce,Drill可以在幾秒內(nèi)查詢PB級(jí)的半結(jié)構(gòu)化數(shù)據(jù),為海量數(shù)據(jù)提供分布式的、低延遲的交互式查詢服務(wù)。不同于Hive等查詢系統(tǒng)提供了類(lèi)SQL查詢語(yǔ)句,Drill支持標(biāo)準(zhǔn)的SQL,減輕了開(kāi)發(fā)人員的學(xué)習(xí)成本。
1.2.3 Zoopkeeper
Zoopkeeper同Drill一樣,是隸屬于Apache Hadoop家族的子項(xiàng)目,是Google Chubby的開(kāi)源實(shí)現(xiàn),為如Drill等分布式應(yīng)用程序提供任務(wù)協(xié)調(diào)服務(wù)。
1.2.4 Neginx
Nginx(“Engine x”)是俄羅斯人Igor Sysoev編寫(xiě)的一款高性能的HTTP和反向代理服務(wù)器,可提供負(fù)載均衡服務(wù)。
1.2.5 Keepalived
Keepalived通過(guò)VRRP(Virtual Router Redundancy Protocol)協(xié)議為集群提供高可用性[]。VRRP,即虛擬路由冗余協(xié)議,可使用戶通過(guò)虛擬IP多路訪問(wèn)鏈路上的多臺(tái)路由器[8]。
經(jīng)總結(jié),族數(shù)據(jù)有如下特點(diǎn):
2.1 族數(shù)據(jù)是半結(jié)構(gòu)化數(shù)據(jù)
圖1顯示,Revit族的數(shù)據(jù)模型為嵌套數(shù)據(jù)模型。顯然族類(lèi)型參數(shù)存在局部的上下文無(wú)關(guān)文法,根據(jù)李慶華和劉昊的定義(見(jiàn)引言),屬于半結(jié)構(gòu)化數(shù)據(jù)。半結(jié)構(gòu)化數(shù)據(jù)可被類(lèi)JSON的數(shù)據(jù)格式輕松表示。圖3為族數(shù)據(jù)在類(lèi)JSON[9]形式下的數(shù)據(jù)格式和數(shù)據(jù)實(shí)例,其中required為必須字段(有且僅有唯一值),optional為可選字段,repeated為可重復(fù)字段。
圖3 族數(shù)據(jù)的類(lèi)JSON數(shù)據(jù)格式和數(shù)據(jù)實(shí)例
在BIM資源庫(kù)之上建立的族數(shù)據(jù)存儲(chǔ)查詢平臺(tái),應(yīng)能存儲(chǔ)和查詢半結(jié)構(gòu)化數(shù)據(jù)。
2.2 族數(shù)據(jù)為小文件
BIM的族數(shù)據(jù)主要以Revit的.rft文件格式存在,單個(gè)文件大小在KB級(jí)別,故族數(shù)據(jù)存儲(chǔ)查詢平臺(tái)應(yīng)善于處理海量的小文件。
2.3 族數(shù)據(jù)總體體量龐大
BIM思想在工程實(shí)踐中經(jīng)過(guò)多年的實(shí)踐,積累了大量的族數(shù)據(jù),又由于族數(shù)據(jù)是BIM從業(yè)公司的重要財(cái)產(chǎn),雖然數(shù)據(jù)量龐大,但一般情況不會(huì)刪除。所以族數(shù)據(jù)處理平臺(tái)的存儲(chǔ)系統(tǒng)應(yīng)易于擴(kuò)展,以適應(yīng)不斷增加的數(shù)據(jù)量。平臺(tái)還應(yīng)提供實(shí)時(shí)條件查詢功能,如可在秒級(jí)時(shí)間查詢出同屬某種材料的門(mén)族,便于工作人員通過(guò)檢索族信息的重要屬性快速鎖定所需族,以便其進(jìn)行進(jìn)一步的編輯操作。
2.4 族數(shù)據(jù)應(yīng)用周期長(zhǎng)
BIM數(shù)據(jù)應(yīng)用于建筑設(shè)施的全部生命周期[10](見(jiàn)圖4),而族數(shù)據(jù)作為BIM基礎(chǔ)數(shù)據(jù),更是會(huì)被反復(fù)運(yùn)用于多個(gè)項(xiàng)目工程中。所以族數(shù)據(jù)存儲(chǔ)查詢平臺(tái)應(yīng)能為族數(shù)據(jù)提供高可用性存儲(chǔ),以保障數(shù)據(jù)的長(zhǎng)期可靠保存。
圖4 BIIM數(shù)據(jù)貫穿建筑設(shè)施全部生命周期
根據(jù)族數(shù)據(jù)的存儲(chǔ)和查詢需求,在BIM資源庫(kù)中設(shè)計(jì)了族數(shù)據(jù)存儲(chǔ)及查詢平臺(tái),其平臺(tái)架構(gòu)圖見(jiàn)圖5,物理拓?fù)鋱D見(jiàn)圖6。
圖5 平臺(tái)架構(gòu)
圖6 平臺(tái)物理拓?fù)?/p>
平臺(tái)用戶界面部分由兩臺(tái)配置有為Negix和Keepalived的WebServer提供,其中Negix負(fù)責(zé)將存儲(chǔ)和查詢服務(wù)負(fù)載均衡至TrackerServer,Keepalived為這兩臺(tái)WebServer提供高可用性,并建立虛擬IP,為用戶提供統(tǒng)一的服務(wù)接口。用戶通過(guò)WebServer訪問(wèn)族數(shù)據(jù)存儲(chǔ)及查詢服務(wù)頁(yè)面,WebServer將族數(shù)據(jù)從.rft文件轉(zhuǎn)換至JSON文件。
存儲(chǔ)系統(tǒng)由FastDFS集群組成,負(fù)責(zé)對(duì)JSON文件進(jìn)行分布式存儲(chǔ),對(duì)其提供高可用性,并為查詢系統(tǒng)提供數(shù)據(jù)支撐。
查詢系統(tǒng)由Drill和ZooKeeper構(gòu)成。Drill集群通過(guò)處理FastDFS所存的JSON文件,為平臺(tái)提供實(shí)時(shí)查詢服務(wù),Zookeeper集群用于協(xié)調(diào)Drill集群的分布式查詢?nèi)蝿?wù)。
經(jīng)測(cè)試,較傳統(tǒng)由關(guān)系數(shù)據(jù)庫(kù)為核心的非分布式數(shù)據(jù)處理系統(tǒng),存儲(chǔ)性能提升近20%,查詢性能提升近30%。
3.1 族數(shù)據(jù)的存儲(chǔ)
由于FastDFS為文件系統(tǒng),對(duì)任何結(jié)構(gòu)、非結(jié)構(gòu)和半結(jié)構(gòu)數(shù)據(jù)均以文件形式存儲(chǔ)。而又如JSON等嵌套式數(shù)據(jù)模型可以自然地描述編程語(yǔ)言中使用的數(shù)據(jù)結(jié)構(gòu)、分布式系統(tǒng)之間的交換消息和結(jié)構(gòu)化文檔等數(shù)據(jù)。所以對(duì)于族數(shù)據(jù)的存儲(chǔ),可在WebServer上通過(guò)Revit API解析.rft文件,提取族中包含的屬性,并轉(zhuǎn)化為JSON文件,存于FastDFS分布式文件系統(tǒng)。
用戶可在WebServer中向Tracker Server申請(qǐng)文件存儲(chǔ)服務(wù),F(xiàn)astDFS存儲(chǔ)文件的流程如圖7所示。
圖7 FastDFS存儲(chǔ)文件流程
用戶通過(guò)族數(shù)據(jù)平臺(tái)的存儲(chǔ)頁(yè)面向FastDFS的WebServer發(fā)起存儲(chǔ)請(qǐng)求,TrackerServer將可用StorageServer的IP及端口返回給用戶,用戶根據(jù)返回信息將待存儲(chǔ)文件上傳至StorageServer,最終,StorageServer返回文件ID,ID中包含文件的存儲(chǔ)元數(shù)據(jù)。
FastDFS不同于HDFS等分布式文件系統(tǒng),不會(huì)對(duì)文件進(jìn)行分塊存儲(chǔ),直接存儲(chǔ)源文件,故FastDFS適合存儲(chǔ)中小型文件,而且在文件名中保存元數(shù)據(jù),不用另設(shè)置元數(shù)據(jù)的存儲(chǔ),簡(jiǎn)化了后期查詢文件的過(guò)程。
FastDFS采取對(duì)等結(jié)構(gòu),可存在多臺(tái)TrackerServer和StorageServer,且各自集群內(nèi)部關(guān)系平等,從而實(shí)現(xiàn)存儲(chǔ)的系統(tǒng)高可用性。FastDFS以分組方式組建其存儲(chǔ)集群,集群由一個(gè)或多個(gè)分組組成,每個(gè)分組下包含一臺(tái)或多臺(tái)StorageServer。同一組內(nèi)的StorageServer相互備份,所存文件完全一致,通過(guò)冗余備份實(shí)現(xiàn)文件數(shù)據(jù)的高可用性。
FastDFS支持在線擴(kuò)容,存儲(chǔ)集群的存儲(chǔ)總?cè)萘繛樗蟹纸M存儲(chǔ)容量的線性和。當(dāng)有新的StorageServer加入某一分組時(shí),該StorageServer會(huì)在啟動(dòng)時(shí),為已存在的每個(gè)TrackerServer建立一個(gè)線程用于通信。TrackerServer在接收到新StorageServer的心跳包時(shí)會(huì)更新自己分組的映射表,并將新表同步至該分組的每臺(tái)StorageServer上。最后該組內(nèi)一臺(tái)存有全部文件的StorageServer會(huì)將全部文件備份至新進(jìn)StorageServer。
當(dāng)有新的分組加入時(shí),新分組中的StorageServer會(huì)以在啟動(dòng)時(shí)向TrackerServer發(fā)送自己的信息。TrackerServer整理信息,建立該分組與其下StorageServer的映射表,并將該表返回給新分組中的每臺(tái)StorageServer。
3.2 族數(shù)據(jù)的查詢
Drill可通過(guò)存儲(chǔ)插件連接各不相同的數(shù)據(jù)源[11](見(jiàn)圖8),其支持的數(shù)據(jù)源除了有Hadoop家族中的HDFS、HBase和Hive外,還包括任意的分布式文件存儲(chǔ)系統(tǒng)。Drill還可直接解析JSON文件。
圖9 Drill任務(wù)生成流程
Drill集群中由Drillbit執(zhí)行查詢服務(wù)。Drillbit可部署于分布式系統(tǒng)中的任意節(jié)點(diǎn)上,且各Drillbit間無(wú)主從關(guān)系,每一個(gè)Drillbit均包含Drill的全部服務(wù)和功能,集群中的任意Drillbit都可接收來(lái)自用戶的查詢。[12]
當(dāng)用戶在WebServer發(fā)起SQL查詢時(shí),會(huì)從Zookeeper獲取當(dāng)前可用的Drillbit表,并從中選擇一個(gè)Drillbit作為Foreman,負(fù)責(zé)接手初始查詢。如圖,F(xiàn)oreman會(huì)將SQL命令轉(zhuǎn)化為邏輯計(jì)劃(Logical Plan),其中包含一系列可被Drillbit識(shí)別的邏輯操作。之后,邏輯計(jì)劃經(jīng)優(yōu)化器處理,轉(zhuǎn)化為物理計(jì)劃(Physical Plan),描述了查詢?nèi)蝿?wù)的拆分情況,用于具體的分布式查詢?nèi)蝿?wù)。
圖8 Drill通過(guò)存儲(chǔ)插件連接數(shù)據(jù)源
圖10 Drill任務(wù)的分解
對(duì)于查詢?nèi)蝿?wù)分解,Drill集群中的Foreman通過(guò)Zookeeper獲得可用Drillbit表,并將物理計(jì)劃中經(jīng)拆分得到的子查詢?nèi)蝿?wù)下發(fā)給各Drillbit,構(gòu)建用于查詢和回收結(jié)果的任務(wù)執(zhí)行樹(shù)(見(jiàn)圖10),最終回傳結(jié)果給用戶。
本文首先介紹了BIM的族數(shù)據(jù)和平臺(tái)應(yīng)用模塊,隨后分析了族數(shù)據(jù)的存儲(chǔ)和查詢需求,最后給出了BIM資源庫(kù)下和族數(shù)據(jù)存儲(chǔ)和查詢平臺(tái)的架構(gòu)設(shè)計(jì),并詳細(xì)介紹了存儲(chǔ)和查詢的執(zhí)行流程及原理。測(cè)試結(jié)果顯示,較以關(guān)系數(shù)據(jù)庫(kù)核心的非分布式數(shù)據(jù)處理系統(tǒng),新平臺(tái)的存儲(chǔ)性能和查詢性能為均有較大提升。
[1]王珺. BIM理念及BIM軟件在建設(shè)項(xiàng)目中的應(yīng)用研究[D]. 西南交通大學(xué),2011.
[2]Revit 2016 help[EB/OL]. [2016-10-27]. http://help.autodesk.com/view/RVT/2016/ENU/
[3]Abiteboul, S. Querying semi-structured data. International Conference on Database Theory. Lecture Notes in Computer Science, 1997, 1186:1-18.
[4]李慶華,劉昊.用待確定的上下文無(wú)關(guān)文法分析半結(jié)構(gòu)化數(shù)據(jù)[J].華中理工大學(xué)學(xué)報(bào),1999,27(5):60- 62.
[5]維基百科上下無(wú)關(guān)文法[EB/OL]. [2016-10-27]. https://zh.wikipedia.org/wiki/%E4%B8%8A%E4%B8%8B%E6%96%87%E6%97%A0%E5%85%B3%E6%96%87%E6%B3%95
[6]余慶.分布式文件系統(tǒng)FastDFS架構(gòu)剖析[J],程序員,2010,(11):63-65.
[7]Keepalived[EB/OL]. [2016-10-27]. http://www.keepalived.org/
[8]Configuring VRRP[EB/OL]. [2016-10-27]. http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipapp_fhrp/configuration/15-mt/fhp-15-mt-book/fhp-vrrp.html
[9]Melnik, S., Gubarev, A., Long, J. J., Romer, G., Shivakumar, S., Tolton, M., &Vassilakis, T. Dremel: interactive analysis of web-scale datasets. Proceedings of the VLDB Endowment, 2010, 3(1-2): 330-339.
[10]A bulidngSMARTallianceTM Project, BIM Project Execution Planning Guide, 2010,Developed by Computer Integrated Construction Research Group, Department ofArchitectural Engineering,The Pennsylvania State University, retrieved fromhttp://bim.psu.edu/. 1-9.
[11]Drill Connect a Data Source Introduction[EB/OL]. [2016-10-27]. https://drill.apache.org/docs/connect-a-data-source-introduction/
[12]Apache Drill Architecture: The Ultimate Guide[EB/OL]. [2016-10-27]. https://www.mapr.com/blog/apache-drill-architecture-ultimate-guide/
Using FastDFs and Drill to Build BIM Family Platform for Storage and Query
Wang Baohui, Gao Yuan
(SoftwareCollegeofBeihangUniversity,Beijing100191,China)
BIM Family is semi-structured data.The data structure is relatively loose and variable,so it is difficult to bestored and queried usingtraditional relational database.Based on FastDFs and Drill,we build a distributed data processing platform tostoreandquery BIM family under BIM resource library.After testing,compared with the non-distributed system which it is core is the relational database,the platform performance is significantly improved.
BIM Family; BIM; FastDFS; Drill
國(guó)家科技支撐計(jì)劃子課題“建筑行業(yè)設(shè)計(jì)服務(wù)共性技術(shù)集成平臺(tái)研發(fā)與應(yīng)用”(編號(hào): 2014BAH25F03-04) 【作者簡(jiǎn)介】 王寶會(huì)(1973-),男,教授級(jí)高工,碩士,主要研究方向:軟件架構(gòu); 邢景軒(1993-),男,碩士在讀,主要研究方向:軟件工程; 高 遠(yuǎn)(1992-),男,碩士在讀,主要研究方向:軟件工程。
TU17
A
1674-7461(2016)06-0023-06