王寶會 邢景軒 高 遠
(北京航空航天大學軟件學院,北京 100191)
運用FastDFS和Drill構(gòu)建海量BIM族數(shù)據(jù)存儲和查詢平臺
王寶會 邢景軒 高 遠
(北京航空航天大學軟件學院,北京 100191)
BIM族數(shù)據(jù)屬于半結(jié)構(gòu)化數(shù)據(jù),其數(shù)據(jù)結(jié)構(gòu)相對松散且可變,難以使用傳統(tǒng)關(guān)系數(shù)據(jù)庫進行存儲和查詢。本文以FastDFS分布式文件系統(tǒng)和Drill實時查詢引擎為基礎(chǔ),在BIM資源庫下針對族數(shù)據(jù)的存儲和查詢構(gòu)建了的分布式數(shù)據(jù)處理平臺。經(jīng)測試,較傳統(tǒng)以關(guān)系數(shù)據(jù)庫為核心的非分布式系統(tǒng),存儲性能和查詢性能均有較大提升。
族數(shù)據(jù); BIM; FastDFS; Drill
【DOI】 10.16670/j.cnki.cn11-5823/tu.2016.06.04
BIM(Building Information Modeling)是“建筑信息建?!钡暮喎Q。因其在縮短工期、節(jié)約成本、提高生產(chǎn)效率等方面的先天優(yōu)勢,BIM相關(guān)技術(shù)廣泛應用于以美國為首的眾多國家。[1]BIM技術(shù)的不斷發(fā)展促使BIM相關(guān)數(shù)據(jù)迅速增長,建立BIM數(shù)據(jù)的資源庫變得越發(fā)重要。族數(shù)據(jù)是BIM資源庫中的主要處理對象。
1.1 數(shù)據(jù)介紹
1.1.1 族
族(Family)是Autodesk的BIM構(gòu)建軟件Revit中的一個概念。建筑模型由墻、窗、門等圖元(Element)構(gòu)成,族中包含了這些圖元的幾何定義和及其所使用的參數(shù)(其名稱與含義),圖1展示了Revit中的門圖元及其門族,圖中門圖元為三維模型,其對應的族中包含了尺寸、材質(zhì)等參數(shù)。族包含多個通用參數(shù)集,不同的族類型包含不同的參數(shù)集合,若圖元參數(shù)的集合相同,則屬于同一個族類型。屬于同一族類型下具體實例的具體參數(shù)值可以各不相同。[2]
對項目中任何位置的圖元族數(shù)據(jù)修改后,Revit 都能在整個項目內(nèi)協(xié)調(diào)此修改,始終保持模型的一致性,如鋼筋之間的間隔相等,如果修改了圖元族數(shù)據(jù)中的長度,Revit會使這種等距關(guān)系仍保持不變。所以族是體現(xiàn)Revit參數(shù)化建模的數(shù)據(jù)基礎(chǔ),是BIM思想在Revit中的核心表現(xiàn)。
BIM資源庫的作用之一便是匯總作為建筑模型數(shù)據(jù)基礎(chǔ)的族資源,提高用戶存儲和查詢族信息的效率,其中各不相同的族所包含的參數(shù)便是存儲和查詢的信息實體。
圖1 Revit中的門圖元與其門族
1.1.2 半結(jié)構(gòu)化數(shù)據(jù)
Serge Abiteboul簡要指出,半結(jié)構(gòu)化數(shù)據(jù)(Semi-structured Data)既非完全無結(jié)構(gòu),又不同于傳統(tǒng)關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)一般結(jié)構(gòu)嚴謹。[3]李慶華和劉昊提出了一種用待確定文法分析半結(jié)構(gòu)化數(shù)據(jù)的方法,并在文中給出了半結(jié)構(gòu)化數(shù)據(jù)更為明確的定義:
“如果數(shù)據(jù)的結(jié)構(gòu)所對應的語言無法用全局一致的上下文無關(guān)文法描述,但是存在數(shù)據(jù)的一個有序劃分,對分割出來的每個分劃,利用前i個分劃的語義信息,可以得到第i+1個分劃的局部一致的上下文無關(guān)文法,則稱之為半結(jié)構(gòu)化數(shù)據(jù)。[4]”
所謂“上下文無關(guān)”,即對于形式V→w,字符串V總可被任意字符串w自由替換,而無需考慮V出現(xiàn)的上下文[5]。
由此可見,區(qū)分結(jié)構(gòu)化、非結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)的關(guān)鍵在于數(shù)據(jù)是否存在全局或局部的上下文無關(guān)文法。
半結(jié)構(gòu)化數(shù)據(jù)在數(shù)據(jù)結(jié)構(gòu)定義上有很大的靈活性,適于描述互聯(lián)網(wǎng)和大數(shù)據(jù)環(huán)境中多樣的復雜數(shù)據(jù),但這也使得傳統(tǒng)的關(guān)系數(shù)據(jù)庫對其無從下手,加大了數(shù)據(jù)存儲、查詢等操作的難度。
1.2 應用模塊介紹
1.2.1 FastDFS
FastDFS(Fast Distributed File System)是一款類GFS(Google File System)的開源分布式文件存儲系統(tǒng),由淘寶網(wǎng)的資深架構(gòu)師余慶開發(fā)。
FastDFS含有TrackerServer和StorageServer兩種角色,分別負責調(diào)度任務(wù)和文件數(shù)據(jù)的存儲。在架構(gòu)和設(shè)計理念,較之其他分布式文件系統(tǒng),其主要特點為輕量級、分組方式和對等結(jié)構(gòu)。[6]
1.2.2 Drill
Drill是Apache Hadoop的頂級項目,是Google Dremel的開源實現(xiàn)。自2006年《Dremel:Interactive Analysis of Web-Scale Datasets》論文完成至今,Google以將Dremel廣泛運用于Google Books的OCR檢索和Gmail的垃圾郵件分析等場景。這些應用體現(xiàn)了Dremel實時分析、處理數(shù)據(jù)的優(yōu)秀性能,也從側(cè)面體現(xiàn)了Drill的實時查詢在設(shè)計理念上的先進性。
由于不需要調(diào)用MapReduce,Drill可以在幾秒內(nèi)查詢PB級的半結(jié)構(gòu)化數(shù)據(jù),為海量數(shù)據(jù)提供分布式的、低延遲的交互式查詢服務(wù)。不同于Hive等查詢系統(tǒng)提供了類SQL查詢語句,Drill支持標準的SQL,減輕了開發(fā)人員的學習成本。
1.2.3 Zoopkeeper
Zoopkeeper同Drill一樣,是隸屬于Apache Hadoop家族的子項目,是Google Chubby的開源實現(xiàn),為如Drill等分布式應用程序提供任務(wù)協(xié)調(diào)服務(wù)。
1.2.4 Neginx
Nginx(“Engine x”)是俄羅斯人Igor Sysoev編寫的一款高性能的HTTP和反向代理服務(wù)器,可提供負載均衡服務(wù)。
1.2.5 Keepalived
Keepalived通過VRRP(Virtual Router Redundancy Protocol)協(xié)議為集群提供高可用性[]。VRRP,即虛擬路由冗余協(xié)議,可使用戶通過虛擬IP多路訪問鏈路上的多臺路由器[8]。
經(jīng)總結(jié),族數(shù)據(jù)有如下特點:
2.1 族數(shù)據(jù)是半結(jié)構(gòu)化數(shù)據(jù)
圖1顯示,Revit族的數(shù)據(jù)模型為嵌套數(shù)據(jù)模型。顯然族類型參數(shù)存在局部的上下文無關(guān)文法,根據(jù)李慶華和劉昊的定義(見引言),屬于半結(jié)構(gòu)化數(shù)據(jù)。半結(jié)構(gòu)化數(shù)據(jù)可被類JSON的數(shù)據(jù)格式輕松表示。圖3為族數(shù)據(jù)在類JSON[9]形式下的數(shù)據(jù)格式和數(shù)據(jù)實例,其中required為必須字段(有且僅有唯一值),optional為可選字段,repeated為可重復字段。
圖3 族數(shù)據(jù)的類JSON數(shù)據(jù)格式和數(shù)據(jù)實例
在BIM資源庫之上建立的族數(shù)據(jù)存儲查詢平臺,應能存儲和查詢半結(jié)構(gòu)化數(shù)據(jù)。
2.2 族數(shù)據(jù)為小文件
BIM的族數(shù)據(jù)主要以Revit的.rft文件格式存在,單個文件大小在KB級別,故族數(shù)據(jù)存儲查詢平臺應善于處理海量的小文件。
2.3 族數(shù)據(jù)總體體量龐大
BIM思想在工程實踐中經(jīng)過多年的實踐,積累了大量的族數(shù)據(jù),又由于族數(shù)據(jù)是BIM從業(yè)公司的重要財產(chǎn),雖然數(shù)據(jù)量龐大,但一般情況不會刪除。所以族數(shù)據(jù)處理平臺的存儲系統(tǒng)應易于擴展,以適應不斷增加的數(shù)據(jù)量。平臺還應提供實時條件查詢功能,如可在秒級時間查詢出同屬某種材料的門族,便于工作人員通過檢索族信息的重要屬性快速鎖定所需族,以便其進行進一步的編輯操作。
2.4 族數(shù)據(jù)應用周期長
BIM數(shù)據(jù)應用于建筑設(shè)施的全部生命周期[10](見圖4),而族數(shù)據(jù)作為BIM基礎(chǔ)數(shù)據(jù),更是會被反復運用于多個項目工程中。所以族數(shù)據(jù)存儲查詢平臺應能為族數(shù)據(jù)提供高可用性存儲,以保障數(shù)據(jù)的長期可靠保存。
圖4 BIIM數(shù)據(jù)貫穿建筑設(shè)施全部生命周期
根據(jù)族數(shù)據(jù)的存儲和查詢需求,在BIM資源庫中設(shè)計了族數(shù)據(jù)存儲及查詢平臺,其平臺架構(gòu)圖見圖5,物理拓撲圖見圖6。
圖5 平臺架構(gòu)
圖6 平臺物理拓撲
平臺用戶界面部分由兩臺配置有為Negix和Keepalived的WebServer提供,其中Negix負責將存儲和查詢服務(wù)負載均衡至TrackerServer,Keepalived為這兩臺WebServer提供高可用性,并建立虛擬IP,為用戶提供統(tǒng)一的服務(wù)接口。用戶通過WebServer訪問族數(shù)據(jù)存儲及查詢服務(wù)頁面,WebServer將族數(shù)據(jù)從.rft文件轉(zhuǎn)換至JSON文件。
存儲系統(tǒng)由FastDFS集群組成,負責對JSON文件進行分布式存儲,對其提供高可用性,并為查詢系統(tǒng)提供數(shù)據(jù)支撐。
查詢系統(tǒng)由Drill和ZooKeeper構(gòu)成。Drill集群通過處理FastDFS所存的JSON文件,為平臺提供實時查詢服務(wù),Zookeeper集群用于協(xié)調(diào)Drill集群的分布式查詢?nèi)蝿?wù)。
經(jīng)測試,較傳統(tǒng)由關(guān)系數(shù)據(jù)庫為核心的非分布式數(shù)據(jù)處理系統(tǒng),存儲性能提升近20%,查詢性能提升近30%。
3.1 族數(shù)據(jù)的存儲
由于FastDFS為文件系統(tǒng),對任何結(jié)構(gòu)、非結(jié)構(gòu)和半結(jié)構(gòu)數(shù)據(jù)均以文件形式存儲。而又如JSON等嵌套式數(shù)據(jù)模型可以自然地描述編程語言中使用的數(shù)據(jù)結(jié)構(gòu)、分布式系統(tǒng)之間的交換消息和結(jié)構(gòu)化文檔等數(shù)據(jù)。所以對于族數(shù)據(jù)的存儲,可在WebServer上通過Revit API解析.rft文件,提取族中包含的屬性,并轉(zhuǎn)化為JSON文件,存于FastDFS分布式文件系統(tǒng)。
用戶可在WebServer中向Tracker Server申請文件存儲服務(wù),F(xiàn)astDFS存儲文件的流程如圖7所示。
圖7 FastDFS存儲文件流程
用戶通過族數(shù)據(jù)平臺的存儲頁面向FastDFS的WebServer發(fā)起存儲請求,TrackerServer將可用StorageServer的IP及端口返回給用戶,用戶根據(jù)返回信息將待存儲文件上傳至StorageServer,最終,StorageServer返回文件ID,ID中包含文件的存儲元數(shù)據(jù)。
FastDFS不同于HDFS等分布式文件系統(tǒng),不會對文件進行分塊存儲,直接存儲源文件,故FastDFS適合存儲中小型文件,而且在文件名中保存元數(shù)據(jù),不用另設(shè)置元數(shù)據(jù)的存儲,簡化了后期查詢文件的過程。
FastDFS采取對等結(jié)構(gòu),可存在多臺TrackerServer和StorageServer,且各自集群內(nèi)部關(guān)系平等,從而實現(xiàn)存儲的系統(tǒng)高可用性。FastDFS以分組方式組建其存儲集群,集群由一個或多個分組組成,每個分組下包含一臺或多臺StorageServer。同一組內(nèi)的StorageServer相互備份,所存文件完全一致,通過冗余備份實現(xiàn)文件數(shù)據(jù)的高可用性。
FastDFS支持在線擴容,存儲集群的存儲總?cè)萘繛樗蟹纸M存儲容量的線性和。當有新的StorageServer加入某一分組時,該StorageServer會在啟動時,為已存在的每個TrackerServer建立一個線程用于通信。TrackerServer在接收到新StorageServer的心跳包時會更新自己分組的映射表,并將新表同步至該分組的每臺StorageServer上。最后該組內(nèi)一臺存有全部文件的StorageServer會將全部文件備份至新進StorageServer。
當有新的分組加入時,新分組中的StorageServer會以在啟動時向TrackerServer發(fā)送自己的信息。TrackerServer整理信息,建立該分組與其下StorageServer的映射表,并將該表返回給新分組中的每臺StorageServer。
3.2 族數(shù)據(jù)的查詢
Drill可通過存儲插件連接各不相同的數(shù)據(jù)源[11](見圖8),其支持的數(shù)據(jù)源除了有Hadoop家族中的HDFS、HBase和Hive外,還包括任意的分布式文件存儲系統(tǒng)。Drill還可直接解析JSON文件。
圖9 Drill任務(wù)生成流程
Drill集群中由Drillbit執(zhí)行查詢服務(wù)。Drillbit可部署于分布式系統(tǒng)中的任意節(jié)點上,且各Drillbit間無主從關(guān)系,每一個Drillbit均包含Drill的全部服務(wù)和功能,集群中的任意Drillbit都可接收來自用戶的查詢。[12]
當用戶在WebServer發(fā)起SQL查詢時,會從Zookeeper獲取當前可用的Drillbit表,并從中選擇一個Drillbit作為Foreman,負責接手初始查詢。如圖,F(xiàn)oreman會將SQL命令轉(zhuǎn)化為邏輯計劃(Logical Plan),其中包含一系列可被Drillbit識別的邏輯操作。之后,邏輯計劃經(jīng)優(yōu)化器處理,轉(zhuǎn)化為物理計劃(Physical Plan),描述了查詢?nèi)蝿?wù)的拆分情況,用于具體的分布式查詢?nèi)蝿?wù)。
圖8 Drill通過存儲插件連接數(shù)據(jù)源
圖10 Drill任務(wù)的分解
對于查詢?nèi)蝿?wù)分解,Drill集群中的Foreman通過Zookeeper獲得可用Drillbit表,并將物理計劃中經(jīng)拆分得到的子查詢?nèi)蝿?wù)下發(fā)給各Drillbit,構(gòu)建用于查詢和回收結(jié)果的任務(wù)執(zhí)行樹(見圖10),最終回傳結(jié)果給用戶。
本文首先介紹了BIM的族數(shù)據(jù)和平臺應用模塊,隨后分析了族數(shù)據(jù)的存儲和查詢需求,最后給出了BIM資源庫下和族數(shù)據(jù)存儲和查詢平臺的架構(gòu)設(shè)計,并詳細介紹了存儲和查詢的執(zhí)行流程及原理。測試結(jié)果顯示,較以關(guān)系數(shù)據(jù)庫核心的非分布式數(shù)據(jù)處理系統(tǒng),新平臺的存儲性能和查詢性能為均有較大提升。
[1]王珺. BIM理念及BIM軟件在建設(shè)項目中的應用研究[D]. 西南交通大學,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]李慶華,劉昊.用待確定的上下文無關(guān)文法分析半結(jié)構(gòu)化數(shù)據(jù)[J].華中理工大學學報,1999,27(5):60- 62.
[5]維基百科上下無關(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
國家科技支撐計劃子課題“建筑行業(yè)設(shè)計服務(wù)共性技術(shù)集成平臺研發(fā)與應用”(編號: 2014BAH25F03-04) 【作者簡介】 王寶會(1973-),男,教授級高工,碩士,主要研究方向:軟件架構(gòu); 邢景軒(1993-),男,碩士在讀,主要研究方向:軟件工程; 高 遠(1992-),男,碩士在讀,主要研究方向:軟件工程。
TU17
A
1674-7461(2016)06-0023-06