国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Hadoop的矢量空間數(shù)據(jù)庫(kù)技術(shù)

2014-10-15 07:39:48朱美正張鋒葉
關(guān)鍵詞:關(guān)系數(shù)據(jù)庫(kù)圖幅海量

孟 輝,朱美正,張鋒葉

(華北計(jì)算技術(shù)研究所地理信息與圖形圖像技術(shù)研發(fā)中心,北京 100083)

0 引言

隨著GIS應(yīng)用的發(fā)展和普及,地理數(shù)據(jù)的空間和時(shí)間分辨率不斷提高,其數(shù)據(jù)量將面對(duì)迅速增長(zhǎng)的壓力。大型GIS系統(tǒng)對(duì)海量數(shù)據(jù)的管理能力和多用戶(hù)高效并發(fā)訪問(wèn)的要求也越來(lái)越高。傳統(tǒng)GIS對(duì)數(shù)據(jù)的組織形式大多為文件系統(tǒng)與數(shù)據(jù)庫(kù)結(jié)合或者完全基于關(guān)系型數(shù)據(jù)庫(kù)的方式,這2種構(gòu)架在解決日益增長(zhǎng)的空間數(shù)據(jù)問(wèn)題的思路一般為Scale-up模式的擴(kuò)展,即增加垂直方向上硬件的處理能力。這種模式擴(kuò)展成本很高,并且硬件更新的速度遠(yuǎn)遠(yuǎn)跟不上數(shù)據(jù)膨脹的速度,在應(yīng)對(duì)海量數(shù)據(jù)管理上顯得力不從心。云計(jì)算的出現(xiàn)為解決海量空間數(shù)據(jù)的管理提供了新的思路。得益于云計(jì)算集群多機(jī)協(xié)同作業(yè)的優(yōu)勢(shì),利用云計(jì)算系統(tǒng)可以輕松地將廉價(jià)的計(jì)算資源組織起來(lái)形成存儲(chǔ)量大、運(yùn)算性能高的計(jì)算集群,并且云計(jì)算系統(tǒng)采用Scale-out的擴(kuò)展模式,當(dāng)現(xiàn)有集群性能、存儲(chǔ)出現(xiàn)不足時(shí),可以簡(jiǎn)單地通過(guò)添加新的機(jī)器來(lái)實(shí)現(xiàn)集群的擴(kuò)展。這種縱向擴(kuò)展省去了數(shù)據(jù)遷移的代價(jià),擴(kuò)展成本低,硬件資源廉價(jià),較傳統(tǒng)Scale-up模式有明顯優(yōu)勢(shì)。本文研究存儲(chǔ)的矢量數(shù)據(jù)是空間數(shù)據(jù)中結(jié)構(gòu)復(fù)雜、查詢(xún)顯示困難的數(shù)據(jù)類(lèi)型。矢量數(shù)據(jù)具有半結(jié)構(gòu)化特點(diǎn),存儲(chǔ)設(shè)計(jì)比較困難,而且用戶(hù)經(jīng)?;谑噶繑?shù)據(jù)做大量的查詢(xún)計(jì)算操作,對(duì)矢量數(shù)據(jù)庫(kù)的設(shè)計(jì)直接影響到用戶(hù)請(qǐng)求服務(wù)的質(zhì)量和服務(wù)體驗(yàn)。矢量數(shù)據(jù)庫(kù)是地理信息系統(tǒng)的基礎(chǔ)與關(guān)鍵,其設(shè)計(jì)的好壞直接影響整個(gè)系統(tǒng)的性能與質(zhì)量,因此有必要對(duì)其進(jìn)行深入的研究與設(shè)計(jì)。大型的GIS系統(tǒng),地理信息采集入庫(kù)后改動(dòng)一般較少,大部分的用戶(hù)請(qǐng)求為讀操作,為提高存儲(chǔ)模型設(shè)計(jì)的針對(duì)性,本文將矢量數(shù)據(jù)庫(kù)面向的場(chǎng)景設(shè)定為多用戶(hù)高并發(fā)訪問(wèn)。HDFS分布式文件系統(tǒng)是云計(jì)算的一種開(kāi)源方案,在處理海量數(shù)據(jù)方面有著廣泛的應(yīng)用。本文采用基于HDFS分布式文件系統(tǒng),由HBase分布式數(shù)據(jù)庫(kù)來(lái)管理存儲(chǔ)海量的矢量數(shù)據(jù),充分利用分布式集群海量的存儲(chǔ)空間和高效的并行運(yùn)算,解決海量矢量數(shù)據(jù)的存儲(chǔ)和多用戶(hù)高效并發(fā)訪問(wèn)的問(wèn)題。

1 Hadoop及HBase簡(jiǎn)介

Hadoop是一個(gè)分布式系統(tǒng)基礎(chǔ)架構(gòu),由Apache基金會(huì)開(kāi)發(fā)。它可以對(duì)用戶(hù)屏蔽底層分布式細(xì)節(jié),支持分布式程序,充分利用集群的高運(yùn)算速度和海量數(shù)據(jù)存儲(chǔ)。Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)HDFS(Hadoop Distributed File System)和 MapReduce并行計(jì)算框架。2部分分屬Hadoop邏輯上的2層,如圖1所示。HDFS是Hadoop框架的底層實(shí)現(xiàn)部分,具有高容錯(cuò)性(fault-tolerent)的特點(diǎn),并且設(shè)計(jì)用來(lái)部署在低廉的(low-cost)硬件上。HDFS放寬了POSIX的要求,這樣可以以流的形式訪問(wèn)文件系統(tǒng)中的數(shù)據(jù),能提供高吞吐量的數(shù)據(jù)訪問(wèn)。MapReduce是在HDFS的基礎(chǔ)上實(shí)現(xiàn)的并行計(jì)算框架,用戶(hù)可以使用它輕松進(jìn)行并行編程。MapReduce計(jì)算由2個(gè)階段組成:Map映射階段和Reduce規(guī)約階段。首先Map函數(shù)把一組(Key,Value)輸入,經(jīng)過(guò)Map階段的處理生成一組中間結(jié)果(Key,Value),然后Reduce函數(shù)匯總所有Map的中間結(jié)果進(jìn)行合并化簡(jiǎn)。分布式計(jì)算中移動(dòng)數(shù)據(jù)的代價(jià)總是高于移動(dòng)計(jì)算的代價(jià)。因此MapReduce將計(jì)算作業(yè)細(xì)化成小的分片分配到不同機(jī)器上進(jìn)行計(jì)算,既保證了數(shù)據(jù)的可靠性又方便MapReduce在數(shù)據(jù)宿主機(jī)器上進(jìn)行計(jì)算。

圖1 Hadoop的結(jié)構(gòu)圖

由于HDFS設(shè)計(jì)之初的目的是存儲(chǔ)大文件,一個(gè)典型HDFS文件大小一般都在G字節(jié)至T字節(jié)。其可以存儲(chǔ)的文件容量可以達(dá)到海量,但是HDFS存儲(chǔ)的文件數(shù)量并不能達(dá)到海量。當(dāng)HDFS中存儲(chǔ)的文件數(shù)超過(guò)一定量時(shí),系統(tǒng)的性能會(huì)嚴(yán)重降低,足見(jiàn)其對(duì)海量小文件支持并不好。因此要將單文件數(shù)據(jù)量較小的矢量數(shù)據(jù)存儲(chǔ)到HDFS中,還需要借助HBase分布式數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)實(shí)現(xiàn)。

HBase是Google公司Bigtable的開(kāi)源實(shí)現(xiàn),是一個(gè)功能強(qiáng)大的分布式數(shù)據(jù)庫(kù)系統(tǒng)。與傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)不同的是,它的數(shù)據(jù)組織是按列來(lái)存儲(chǔ)的,因此可以不用遵守第一范式的約束存儲(chǔ)半結(jié)構(gòu)、非結(jié)構(gòu)的數(shù)據(jù)。HBase可以處理非常龐大的表,可以用普通計(jì)算機(jī)處理超過(guò)10億行數(shù)據(jù)及由數(shù)百列數(shù)據(jù)組成的表。HBase的這一特性正好可以用來(lái)存儲(chǔ)管理文件較小但是文件數(shù)量海量的矢量數(shù)據(jù)。HBase的底層物理存儲(chǔ)可以基于任何文件系統(tǒng),但是為了支持高性能的數(shù)據(jù)存取和海量數(shù)據(jù)的存儲(chǔ),提高數(shù)據(jù)的可靠性和系統(tǒng)的健壯性,可以使用HDFS作為文件系統(tǒng)來(lái)存儲(chǔ)物理數(shù)據(jù)文件。將HBase和Hadoop結(jié)合起來(lái)使用可以解決海量矢量數(shù)據(jù)塊的存儲(chǔ)問(wèn)題。

2 矢量空間數(shù)據(jù)庫(kù)整體架構(gòu)及存儲(chǔ)策略

2.1 整體架構(gòu)

雖然目前業(yè)界各大地理信息系統(tǒng)都已經(jīng)具備了比較成熟的空間數(shù)據(jù)庫(kù)技術(shù),但是絕大多數(shù)空間數(shù)據(jù)庫(kù)都是針對(duì)有限數(shù)據(jù)和應(yīng)用規(guī)模的應(yīng)用場(chǎng)景,采用的大都是基于集中存儲(chǔ)和關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的技術(shù)路線。集中式的存儲(chǔ)方案使數(shù)據(jù)量很難擴(kuò)展,無(wú)法管理海量的空間數(shù)據(jù)。采用關(guān)系型數(shù)據(jù)庫(kù)來(lái)管理地理信息,空間數(shù)據(jù)以數(shù)據(jù)記錄的形式組織,受限于索引機(jī)制,當(dāng)數(shù)據(jù)記錄數(shù)量增大到一定程度,關(guān)系數(shù)據(jù)庫(kù)的訪問(wèn)性能會(huì)嚴(yán)重降低,并且其支持的并發(fā)用戶(hù)數(shù)有限,無(wú)法滿(mǎn)足大型地理系統(tǒng)面向大量用戶(hù)高效并發(fā)訪問(wèn)的需求。

沿用傳統(tǒng)的技術(shù)路線,無(wú)法從根本解決海量空間數(shù)據(jù)存儲(chǔ)以及高效訪問(wèn)問(wèn)題,很難取得質(zhì)的突破。因此本文摒棄傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)+集中存儲(chǔ)的技術(shù)體制,徹底擺脫傳統(tǒng)空間數(shù)據(jù)庫(kù)本質(zhì)上的缺陷,研究基于分布式存儲(chǔ)的空間數(shù)據(jù)庫(kù)技術(shù)。

本文設(shè)計(jì)的整體結(jié)構(gòu)如圖2所示,數(shù)據(jù)存儲(chǔ)層采用分布式文件系統(tǒng)和關(guān)系數(shù)據(jù)庫(kù)組成,以分布式文件系統(tǒng)存儲(chǔ)用于顯示和空間查詢(xún)的矢量數(shù)據(jù),這些數(shù)據(jù)壓縮成數(shù)據(jù)塊存儲(chǔ)到分布式文件系統(tǒng)中;將用于屬性查詢(xún)的空間屬性信息以及圖層描述信息、元數(shù)據(jù)信息等數(shù)據(jù)量小、查詢(xún)更新頻繁、結(jié)構(gòu)性強(qiáng)的數(shù)據(jù)存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中。分布式半結(jié)構(gòu)數(shù)據(jù)管理系統(tǒng)HBase在HDFS高性能存儲(chǔ)能力的基礎(chǔ)上提供半結(jié)構(gòu)化空間數(shù)據(jù)的存儲(chǔ)和管理功能??臻g數(shù)據(jù)訪問(wèn)中間件用于維護(hù)存儲(chǔ)在分布式文件系統(tǒng)和關(guān)系型數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性??臻g數(shù)據(jù)訪問(wèn)引擎用于對(duì)上層應(yīng)用提供數(shù)據(jù)接入、查詢(xún)、存儲(chǔ)等功能。這種存儲(chǔ)方案可以充分利用分布式存儲(chǔ)集群提供的海量存儲(chǔ)空間、平滑的存儲(chǔ)擴(kuò)展能力,輕松應(yīng)對(duì)海量空間數(shù)據(jù)的存儲(chǔ)。計(jì)算集群的高I/O帶寬和高運(yùn)算性能可以滿(mǎn)足大用戶(hù)量高并發(fā)的訪問(wèn)需求。同時(shí)關(guān)系數(shù)據(jù)庫(kù)強(qiáng)大的SQL查詢(xún)功能可以用來(lái)完成屬性查詢(xún)功能。

圖2 整體結(jié)構(gòu)圖

2.2 存儲(chǔ)策略

通過(guò)分析,傳統(tǒng)的空間數(shù)據(jù)庫(kù)方案以地理目標(biāo)為單位進(jìn)行組織,與大型地理信息系統(tǒng)管理的海量數(shù)據(jù)量相比存儲(chǔ)粒度過(guò)細(xì),查詢(xún)讀取數(shù)據(jù)時(shí)需要逐條加載目標(biāo)信息,導(dǎo)致數(shù)據(jù)庫(kù)的讀取性能很低。本文采用HBase分布式海量半結(jié)構(gòu)化數(shù)據(jù)管理技術(shù),將矢量數(shù)據(jù)進(jìn)行瓦片化分塊處理,每個(gè)數(shù)據(jù)塊交由HBase進(jìn)行管理,分布存儲(chǔ)到HDFS中。數(shù)據(jù)瓦片內(nèi)則基于矢量目標(biāo)記錄進(jìn)行存儲(chǔ)組織,并以塊為單位進(jìn)行壓縮。這樣提高了數(shù)據(jù)存儲(chǔ)的粒度,極大地提高了加載的速度,明顯地改進(jìn)了地圖顯示和空間查詢(xún)的性能。

矢量數(shù)據(jù)存儲(chǔ)策略如圖3所示,考慮某一層次的矢量數(shù)據(jù),由于可視范圍有限,往往只需要對(duì)較小區(qū)域內(nèi)的矢量數(shù)據(jù)進(jìn)行可視化、編輯、更新,如何快速地查找指定區(qū)域的矢量數(shù)據(jù)是影響系統(tǒng)性能的關(guān)鍵因素。為此,本文采用數(shù)據(jù)分塊的方法來(lái)實(shí)現(xiàn)矢量數(shù)據(jù)的快速定位和靈活調(diào)度。根據(jù)分塊規(guī)則在全球范圍內(nèi)按一定規(guī)則進(jìn)行瓦片分塊,對(duì)每個(gè)瓦片進(jìn)行唯一標(biāo)識(shí),建立快速索引。根據(jù)全球劃分瓦片后計(jì)算當(dāng)前矢量所覆蓋的范圍,將矢量圖層劃分為一系列子塊,子塊中包含圖層的地理目標(biāo),將矢量圖層劃分塊后,在邏輯上空間數(shù)據(jù)是無(wú)縫組織的。對(duì)數(shù)據(jù)塊所包含的地理目標(biāo)建立地理目標(biāo)級(jí)索引,實(shí)現(xiàn)矢量數(shù)據(jù)的多級(jí)索引。將劃分所得的數(shù)據(jù)塊壓縮后存儲(chǔ)到HBase分布式數(shù)據(jù)庫(kù)中進(jìn)行管理。同時(shí)考慮矢量數(shù)據(jù)中的空間屬性數(shù)據(jù)多為結(jié)構(gòu)化數(shù)據(jù),通常需要頻繁更新,而且需要按不同字段進(jìn)行檢索查詢(xún),NoSQL目前的單鍵值存儲(chǔ)限制了屬性查詢(xún)的靈活性,并且屬性數(shù)據(jù)的數(shù)據(jù)量通常較小,因此本文選擇將屬性數(shù)據(jù)冗余存儲(chǔ)到關(guān)系型數(shù)據(jù)庫(kù)中,充分利用關(guān)系型數(shù)據(jù)庫(kù)靈活的檢索特性彌補(bǔ)HBase在檢索方面的不足。這樣存儲(chǔ)在HBase中的矢量數(shù)據(jù)專(zhuān)門(mén)用來(lái)進(jìn)行高速的加載顯示以及空間查詢(xún),存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中的屬性數(shù)據(jù)用來(lái)支持屬性查詢(xún)。

圖3 存儲(chǔ)策略

3 矢量空間數(shù)據(jù)庫(kù)設(shè)計(jì)

空間數(shù)據(jù)庫(kù)作為整個(gè)GIS系統(tǒng)最底層的存儲(chǔ)媒介,承載組織矢量數(shù)據(jù)模型并統(tǒng)一存儲(chǔ)和集中管理的功能,為整個(gè)GIS系統(tǒng)提供數(shù)據(jù)存儲(chǔ)支持。數(shù)據(jù)庫(kù)的讀取性能和面對(duì)高并發(fā)訪問(wèn)的抗壓能力,直接決定了系統(tǒng)對(duì)用戶(hù)訪問(wèn)請(qǐng)求的響應(yīng)速度。良好的數(shù)據(jù)庫(kù)的設(shè)計(jì)是決定一個(gè)空間數(shù)據(jù)庫(kù)性能的基礎(chǔ)和關(guān)鍵。

3.1 相關(guān)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)

矢量圖層在全球范圍內(nèi)按照一定規(guī)則劃分瓦片,瓦片是一次矢量數(shù)據(jù)存儲(chǔ)的基本單位。本文將一塊瓦片數(shù)據(jù)組織成一種叫做桶的基本單位。一個(gè)桶對(duì)應(yīng)一個(gè)地圖瓦片,每個(gè)桶屬于且只屬于一個(gè)矢量圖層,一個(gè)矢量圖層可以包含多個(gè)桶。桶是矢量入庫(kù)的基本單位也是構(gòu)建空間索引的基本單位。

桶是根據(jù)待存儲(chǔ)的地圖瓦片構(gòu)建而成。首先桶以目標(biāo)集合的形式獲得瓦片中的地理目標(biāo),通過(guò)遍歷目標(biāo)集合內(nèi)的所有目標(biāo),計(jì)算每個(gè)目標(biāo)的最小外界矩形(MBR),以MBR的幾何中心表示目標(biāo)的位置;同時(shí)統(tǒng)計(jì)出所有地理目標(biāo)的ID范圍,以及桶所包含的目標(biāo)集合所覆蓋的地理范圍;然后根據(jù)桶的地理范圍按照一定規(guī)則劃分成塊,對(duì)每一塊內(nèi)的地理目標(biāo)建立空間索引。將空間索引以及各個(gè)塊所包含的地理目標(biāo)ID作為桶的組成部分進(jìn)行保存。將每一個(gè)地理目標(biāo)塊進(jìn)行壓縮序列化后存儲(chǔ)到數(shù)據(jù)庫(kù)中。桶的形成過(guò)程如圖4所示。

圖4 桶形成過(guò)程

3.2 數(shù)據(jù)庫(kù)的物理模型

本文設(shè)計(jì)將矢量數(shù)據(jù)冗余存儲(chǔ)到分布式NoSQL數(shù)據(jù)庫(kù)HBase和關(guān)系數(shù)據(jù)庫(kù)Oracle中。為提高矢量數(shù)據(jù)的存取效率,簡(jiǎn)化數(shù)據(jù)庫(kù)的存儲(chǔ)模型,本文設(shè)計(jì)直接將矢量數(shù)據(jù)分塊序列化后以二進(jìn)制流的形式存儲(chǔ)到HBase中。同時(shí)將矢量數(shù)據(jù)中數(shù)據(jù)量較小的元數(shù)據(jù)信息以及需要大量SQL語(yǔ)句查詢(xún)的屬性信息冗余存儲(chǔ)到關(guān)系數(shù)據(jù)庫(kù)中,彌補(bǔ)HBase查詢(xún)操作的不足。

3.2.1 關(guān)系數(shù)據(jù)庫(kù)表的設(shè)計(jì)

系統(tǒng)為了支持系統(tǒng)的大用戶(hù)量和高并發(fā)訪問(wèn),將矢量數(shù)據(jù)打包成塊存儲(chǔ)到分布式空間數(shù)據(jù)庫(kù)中。同時(shí)考慮屬性數(shù)據(jù)要大量用到SQL查詢(xún)操作,適合存儲(chǔ)到關(guān)系數(shù)據(jù)庫(kù)中。矢量數(shù)據(jù)的描述和管理類(lèi)信息,數(shù)據(jù)量小,數(shù)據(jù)條目少,查詢(xún)和修改操作頻繁,亦適合存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)(Oracle)中。同時(shí)也可利用關(guān)系數(shù)據(jù)庫(kù)的事務(wù)機(jī)制維護(hù)關(guān)鍵數(shù)據(jù)的一致性,因此將矢量數(shù)據(jù)的屬性信息部分冗余存儲(chǔ)到關(guān)系型數(shù)據(jù)庫(kù)中。

關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)均為數(shù)據(jù)量較小的數(shù)據(jù)。圖層描述表存儲(chǔ)的是矢量圖層的架子,該表維護(hù)一個(gè)圖層最基本的描述信息,包括圖層ID、圖層類(lèi)型、圖層名稱(chēng)、空間參考、圖層范圍、拓?fù)湫畔⒌刃畔?。圖層中的目標(biāo)組織需要有唯一的ID,在為圖層創(chuàng)建目標(biāo)之前需要為目標(biāo)分配ID,圖層目標(biāo)ID表用來(lái)管理每個(gè)圖層地理目標(biāo)ID的統(tǒng)一分配。當(dāng)需要批量分配目標(biāo)ID時(shí),從表中讀取圖層對(duì)應(yīng)的最大ID值,再將分配后的最大ID值存回表中。元數(shù)據(jù)表包括基本元數(shù)據(jù)和擴(kuò)展元數(shù)據(jù)2部分,圖層和圖幅的元數(shù)據(jù)統(tǒng)一交由元數(shù)據(jù)表來(lái)維護(hù)。以上各表均只有一張,由各個(gè)圖層共同使用。

此外在創(chuàng)建圖層時(shí),還會(huì)分別為每個(gè)圖層相應(yīng)地創(chuàng)建圖幅信息表、圖幅版本信息表、屬性信息表,表名由圖層ID進(jìn)行區(qū)分,與具體圖層進(jìn)行關(guān)聯(lián)。屬性信息表用來(lái)存儲(chǔ)圖層地理目標(biāo)的屬性信息。當(dāng)新建圖層時(shí)相應(yīng)地創(chuàng)建屬性信息表。該部分?jǐn)?shù)據(jù)與分布式空間數(shù)據(jù)庫(kù)中存儲(chǔ)的屬性信息冗余存儲(chǔ),方便對(duì)矢量數(shù)據(jù)進(jìn)行屬性查詢(xún)。為支持圖層的分幅管理以及多版本管理,還會(huì)為每個(gè)圖層建立一張圖幅信息表和圖幅版本表。圖幅信息表用來(lái)存儲(chǔ)圖層對(duì)應(yīng)的圖幅的ID、編號(hào)、范圍和保存時(shí)間。圖幅版本表用來(lái)存儲(chǔ)每個(gè)圖幅不同版本的信息。

3.2.2 Hbase 表的設(shè)計(jì)

HDFS分布式文件系統(tǒng)對(duì)海量小文件的支持效果不好,因此海量的矢量數(shù)據(jù)分塊不適合直接由分布式文件系統(tǒng)來(lái)存儲(chǔ),而是交由分布式數(shù)據(jù)庫(kù)HBase來(lái)管理,每個(gè)矢量數(shù)據(jù)塊作為HBase表中的一個(gè)Cell存儲(chǔ)。如前文所述,HBase為按列存儲(chǔ)的數(shù)據(jù)庫(kù),表中相鄰記錄的同列族數(shù)據(jù)在物理存儲(chǔ)上是相鄰組織的。同時(shí)HBase物理模型簡(jiǎn)單,沒(méi)有復(fù)雜的關(guān)系和事務(wù)機(jī)制,因此可以滿(mǎn)足對(duì)海量數(shù)據(jù)高性能讀寫(xiě)的需求。

HBase中存儲(chǔ)的數(shù)據(jù)主要包括圖層信息——屬性字段和桶信息、矢量數(shù)據(jù)塊2部分,分別由圖層信息表和矢量數(shù)據(jù)表來(lái)存儲(chǔ)。

圖層信息表VEC_LAYER_INFO用來(lái)存儲(chǔ)矢量圖層的屬性字段信息和桶信息。如表1所示,該表由一個(gè)列族組成:Info。Info列族又分為2列,分別存儲(chǔ)。該表的存儲(chǔ)為簡(jiǎn)單的鍵值對(duì)的形式,每一行存儲(chǔ)一個(gè)序列化的桶信息。為方便將同一圖層的所有桶信息區(qū)分出來(lái),每行數(shù)據(jù)的RowKey前綴為圖層ID,RowKey由圖層ID和桶ID拼接組成。當(dāng)打開(kāi)圖層時(shí),一次性按前綴將圖層對(duì)應(yīng)的桶信息加載到內(nèi)存中,用來(lái)進(jìn)行圖層內(nèi)的空間查詢(xún)。

表1 圖層信息表

矢量數(shù)據(jù)表VEC_DATA用來(lái)存儲(chǔ)所有圖層的分塊數(shù)據(jù)。如表2所示,該表由一個(gè)列族組成。Data列族用來(lái)存儲(chǔ)分塊數(shù)據(jù)。

表2 圖層數(shù)據(jù)表

Data列族存儲(chǔ)的是桶切分成塊后對(duì)應(yīng)范圍內(nèi)各個(gè)圖層的矢量數(shù)據(jù)。每一個(gè)圖層對(duì)應(yīng)該范圍內(nèi)的矢量目標(biāo)均被組織成塊,序列化后以二進(jìn)制流的形式存儲(chǔ)到矢量數(shù)據(jù)表中。每個(gè)圖層的塊都作為Data列族中的一列進(jìn)行存儲(chǔ),每一行的列數(shù)可以不同。這樣的設(shè)計(jì)可以保證每塊區(qū)域內(nèi)各個(gè)圖層的數(shù)據(jù)可以連續(xù)地存儲(chǔ)在一起,方便地圖顯示時(shí)連續(xù)地一次性讀取出來(lái),可以提高數(shù)據(jù)讀取的效率。

3.2.3 物理存儲(chǔ)優(yōu)化

由于HBase表中的數(shù)據(jù)在組織時(shí)是按RowKey的字典序來(lái)組織的,字典序上相鄰的RowKey對(duì)應(yīng)的行會(huì)被連續(xù)地存儲(chǔ)到HDFS中,HBase的這一存儲(chǔ)特點(diǎn)為底層數(shù)據(jù)存儲(chǔ)提供了優(yōu)化的空間。利用HBase存儲(chǔ)的這個(gè)特點(diǎn),可以通過(guò)設(shè)計(jì)RowKey的結(jié)構(gòu)來(lái)保證將顯示中經(jīng)常會(huì)被一同讀取的數(shù)據(jù)連續(xù)地存儲(chǔ)到一起,以提高數(shù)據(jù)讀取的速度。

在實(shí)際應(yīng)用中,同一區(qū)域的各個(gè)圖層的數(shù)據(jù)會(huì)被一同讀取出來(lái),因此這些數(shù)據(jù)應(yīng)該優(yōu)先存儲(chǔ)到一起。在地圖漫游操作中,當(dāng)前區(qū)域內(nèi)的數(shù)據(jù)塊周?chē)臄?shù)據(jù)塊會(huì)在后續(xù)的拖動(dòng)中被讀取,因此這些空間上相鄰的數(shù)據(jù)塊也應(yīng)該盡量存儲(chǔ)到一起。所以在讀取HBase中的一塊數(shù)據(jù)時(shí),會(huì)連續(xù)地將該塊周?chē)臄?shù)據(jù)一同調(diào)入到緩存中,這樣在請(qǐng)求周?chē)膲K數(shù)據(jù)時(shí)可以直接從內(nèi)存緩存中獲取,減少HBase訪問(wèn)文件系統(tǒng)的次數(shù),提高系統(tǒng)的讀取速度。在表設(shè)計(jì)中,將同一區(qū)域的不同圖層的塊數(shù)據(jù)作為多個(gè)列存儲(chǔ)在Data列族中,這樣可以利用HBase的存儲(chǔ)機(jī)制,絕對(duì)保證同一區(qū)域內(nèi)的多個(gè)圖層數(shù)據(jù)連續(xù)存儲(chǔ)在一起。在RowKey的設(shè)計(jì)中,綜合考慮到圖幅內(nèi)塊的連續(xù)性和各個(gè)圖幅之間的連續(xù)性。圖幅內(nèi)的塊號(hào)按照希爾伯特曲線進(jìn)行編碼,按照該編碼可以自然地將圖幅內(nèi)臨近的區(qū)域塊連續(xù)地存儲(chǔ)。在考慮相鄰圖幅連續(xù)存儲(chǔ)的設(shè)計(jì)時(shí),本文研究標(biāo)準(zhǔn)分幅規(guī)則的圖幅號(hào)命名規(guī)則,通過(guò)圖幅號(hào)獲得圖幅之間的相鄰關(guān)系,類(lèi)似地將每相鄰的16個(gè)圖幅按希爾伯特曲線進(jìn)行編碼,按照編碼來(lái)順序存儲(chǔ)相鄰的圖幅數(shù)據(jù)。最終RowKey的結(jié)構(gòu)如圖5所示。

圖5 RowKey的結(jié)構(gòu)

同時(shí)為避免HBase讀寫(xiě)的單點(diǎn)問(wèn)題的出現(xiàn),將每16塊相鄰的圖幅鄰接存儲(chǔ)到一個(gè)Region中。不同的16塊圖幅隨機(jī)存儲(chǔ)到不同的Region,這樣既可以避免入庫(kù)時(shí),多臺(tái)客戶(hù)端機(jī)器同時(shí)將數(shù)據(jù)入到一臺(tái)機(jī)器中,造成單臺(tái)機(jī)器的數(shù)據(jù)寫(xiě)入成為瓶頸,也可以避免在數(shù)據(jù)讀取時(shí),無(wú)法利用集群多機(jī)運(yùn)算的優(yōu)勢(shì),并行地讀取數(shù)據(jù)。考慮到上述需求,本文在RowKey的開(kāi)頭添加了一個(gè)根據(jù)圖幅區(qū)域隨機(jī)生成的前綴,通過(guò)此前綴將不同范圍內(nèi)的數(shù)據(jù)分散存儲(chǔ)到不同的Region-Server中去。實(shí)驗(yàn)表明,RowKey的設(shè)計(jì)好壞大大影響數(shù)據(jù)庫(kù)訪問(wèn)的性能。

4 實(shí)驗(yàn)結(jié)果及分析

4.1 實(shí)驗(yàn)環(huán)境及數(shù)據(jù)

用作實(shí)驗(yàn)的Hadoop集群由5臺(tái)機(jī)器組成,系統(tǒng)為Ubuntu Linux。5臺(tái)機(jī)器上部署HDFS,在其中3臺(tái)上部署HBase。關(guān)系數(shù)據(jù)庫(kù)采用Oracle,部署在5臺(tái)Windows計(jì)算機(jī),機(jī)器配置與Hadoop集群機(jī)器相同。測(cè)試客戶(hù)端機(jī)器由3臺(tái)組成,配置均為2 GB內(nèi)存,2.83 GHz四核CPU,系統(tǒng)同樣為Ubuntu Linux。集群各臺(tái)機(jī)器的配置及具體程序的部署如圖6所示。

圖6 集群環(huán)境

實(shí)驗(yàn)數(shù)據(jù)采用矢量數(shù)據(jù)中數(shù)據(jù)量最大的1:50000比例尺的數(shù)據(jù),選取其中的1000幅作為入庫(kù)實(shí)驗(yàn)數(shù)據(jù),數(shù)據(jù)總量為28 GB,圖層包含陸地地貌及土質(zhì)、居民地及附屬設(shè)施等11個(gè)圖層。

4.2 矢量入庫(kù)

矢量入庫(kù)采用3臺(tái)客戶(hù)端同時(shí)進(jìn)行,每臺(tái)客戶(hù)端運(yùn)行3個(gè)線程并行入庫(kù)。矢量數(shù)據(jù)的數(shù)據(jù)主要集中在“陸地地貌及土質(zhì)”和“居民地及附屬設(shè)施”2個(gè)圖層。本實(shí)驗(yàn)將“陸地地貌及土質(zhì)”圖層(26 GB,7003541個(gè)目標(biāo))和“居民地及附屬設(shè)施”(300 MB,673195個(gè)目標(biāo))存入 HDFS中所用時(shí)間分別為:1094.52 min、123.36 min。存入 Oracle 中所用的時(shí)間分別為:5316.17 min、613.92 min。

4.3 并發(fā)空間查詢(xún)

以數(shù)據(jù)量最大的“陸地地貌及土質(zhì)”圖層為待查圖層,圖層內(nèi)目標(biāo)數(shù)量為7003541。通過(guò)在文件中預(yù)先定義好1000個(gè)覆蓋不同空間范圍的矩形,矩形覆蓋的范圍大小均勻,以矩形為空間查詢(xún)條件查詢(xún)加載被包含和相交地理目標(biāo)。使用3臺(tái)客戶(hù)端以多線程的方式模擬多用戶(hù)分別對(duì)基于2種存儲(chǔ)方案實(shí)現(xiàn)的空間數(shù)據(jù)庫(kù)進(jìn)行空間查詢(xún)。以每臺(tái)計(jì)算機(jī)模擬10個(gè)并發(fā)用戶(hù),循環(huán)執(zhí)行查詢(xún)條件,持續(xù)10 min。每過(guò)10 min每臺(tái)計(jì)算機(jī)增加10個(gè)并發(fā)用戶(hù)。記錄2種情況下各并發(fā)用戶(hù)數(shù)空間查詢(xún)的平均耗時(shí),并以如折線圖7的形式將實(shí)驗(yàn)結(jié)果呈現(xiàn)出來(lái)。

圖7 空間查詢(xún)實(shí)驗(yàn)結(jié)果

從圖7可以看出,隨著并發(fā)用戶(hù)數(shù)的遞增,基于2種方案的空間數(shù)據(jù)庫(kù)應(yīng)對(duì)空間查詢(xún)的響應(yīng)時(shí)間都有所增加,傳統(tǒng)方案實(shí)現(xiàn)空間數(shù)據(jù)庫(kù)空間查詢(xún)耗時(shí)始終較高?;贠racle的空間數(shù)據(jù)庫(kù),在并發(fā)訪問(wèn)數(shù)較少的情況下請(qǐng)求響應(yīng)時(shí)間比較穩(wěn)定,當(dāng)并發(fā)訪問(wèn)數(shù)超過(guò)一定數(shù)量時(shí)響應(yīng)時(shí)間會(huì)急劇增長(zhǎng);基于Hadoop實(shí)現(xiàn)的空間數(shù)據(jù)庫(kù)在并發(fā)訪問(wèn)數(shù)增長(zhǎng)時(shí)可以保持比較穩(wěn)定的緩慢增長(zhǎng)。由此可見(jiàn)基于Hadoop的空間數(shù)據(jù)庫(kù)可以輕松應(yīng)對(duì)高并發(fā)的空間查詢(xún)請(qǐng)求,而基于Oracle的空間數(shù)據(jù)庫(kù)則無(wú)法滿(mǎn)足高并發(fā)訪問(wèn)的需求。

4.4 并發(fā)漫游操作

以相同的方式測(cè)試空間數(shù)據(jù)庫(kù)在高并發(fā)漫游操作場(chǎng)景下的表現(xiàn)。待測(cè)試的空間數(shù)據(jù)庫(kù)實(shí)現(xiàn)方案分別為基于傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)集中存儲(chǔ)、分布式存儲(chǔ)未經(jīng)存儲(chǔ)優(yōu)化以及基于分布式存儲(chǔ)經(jīng)過(guò)存儲(chǔ)優(yōu)化3種。測(cè)試過(guò)程為:以“陸地地貌及土質(zhì)”圖層上某一顯示區(qū)域范圍為起點(diǎn),之后以1/2圖幅范圍為單位逐次加載區(qū)域四周臨近2個(gè)圖幅范圍內(nèi)的地圖數(shù)據(jù),以模擬用戶(hù)漫游操作。為避免起點(diǎn)區(qū)域選取的偶然性對(duì)實(shí)驗(yàn)結(jié)果的影響,實(shí)驗(yàn)開(kāi)始前隨機(jī)在圖層內(nèi)選取10個(gè)起始范圍,當(dāng)完成以一個(gè)區(qū)域起始的漫游之后,再漫游下一個(gè)區(qū)域,直到將10個(gè)區(qū)域都漫游完記錄下10次操作完成的總耗時(shí),并計(jì)算出10次漫游操作的平均耗時(shí)。測(cè)試依然在并發(fā)用戶(hù)數(shù)逐級(jí)遞增的情況下進(jìn)行。最終的實(shí)驗(yàn)結(jié)果如圖8所示。

圖8 漫游實(shí)驗(yàn)結(jié)果

由圖8可以看出,在地圖漫游操作的實(shí)驗(yàn)中,當(dāng)并發(fā)用戶(hù)數(shù)較少時(shí)基于Oracle集中存儲(chǔ)的方案與基于Hadoop分布式存儲(chǔ)的方案性能相當(dāng),略高于后者。但是,當(dāng)并發(fā)用戶(hù)數(shù)超過(guò)一定數(shù)值時(shí),關(guān)系數(shù)據(jù)庫(kù)的性能急劇下降,訪問(wèn)響應(yīng)時(shí)間大幅提高。分布式集群的性能受并發(fā)用戶(hù)數(shù)的影響不大,只是緩慢地上升。經(jīng)過(guò)存儲(chǔ)優(yōu)化之后,地圖漫游時(shí)對(duì)臨近數(shù)據(jù)的加載速度會(huì)比未經(jīng)存儲(chǔ)優(yōu)化情況下快約30%。

5 結(jié)束語(yǔ)

本文針對(duì)大型GIS系統(tǒng)中海量矢量數(shù)據(jù)組織困難,面對(duì)大量用戶(hù)高并發(fā)訪問(wèn)時(shí)效率底下的問(wèn)題,提出一種全新的基于Hadoop分布式存儲(chǔ)的方案。通過(guò)實(shí)驗(yàn)驗(yàn)證了該方案的有效性,在解決海量矢量數(shù)據(jù)高效并發(fā)訪問(wèn)方面效果明顯。

[1]陸嘉恒.Hadoop實(shí)戰(zhàn)[M].北京:機(jī)械工業(yè)出版社,2011:260-261.

[2]鄔倫,劉瑜,張晶,等.地理信息系統(tǒng)——原理、方法和應(yīng)用[M].北京:科學(xué)出版社,2005.

[3]薩師煊,王珊.數(shù)據(jù)庫(kù)系統(tǒng)概述[M].北京:高等教育出版社,1990.

[4]胡鵬,吳艷蘭,楊傳勇,等.大型GIS與數(shù)字地球的空間數(shù)學(xué)基礎(chǔ)研究[J].武漢大學(xué)學(xué)報(bào):信息科學(xué)版,2001,26(4):296-302.

[5]劉鵬.云計(jì)算[M].北京:電子工業(yè)出版社,2010:189-230.

[6]龔健雅.地理信息系統(tǒng)基礎(chǔ)[M].北京:科學(xué)出版社,2001:29-35.

[7]常燕卿.大型GIS空間數(shù)據(jù)組織方法初探[J].遙感信息,2000(2):28-31.

[8]毋河海.地圖數(shù)據(jù)庫(kù)系統(tǒng)[M].北京:測(cè)繪出版社,1991:236-251.

[9]胡志勇,何建邦.分布式地理信息服務(wù)類(lèi)型及解決方案[C]//中國(guó)GIS協(xié)會(huì)年會(huì)論文集.1999.

[10]屈紅剛,潘懋,王勇,等.設(shè)計(jì)模式在GIS軟件開(kāi)發(fā)中的應(yīng)用研究[J].計(jì)算機(jī)工程與應(yīng)用,2003,39(25):1-4.

[11]張洪巖,王欽敏,周成虎,等.“數(shù)字地球”與地理信息科學(xué)[J].地球信息科學(xué),2001(4):1-4.

[12]The Apache Software Foundation.Hadoop[DB/OL].http://hadoop.apache.org/,2011-10-31.

[13]Chang F,Dean J,Ghemawat S,et al.Bigtable:A distributed storage system for structured data[C]//Proceedings of the 7th USENIX Symposium on Operating Systems Design and Implementation.2006:205-218.

[14]Ghemawat S,Gobioff H,Leung S T.The Google file system[C]//Proceedings of the 19th ACM Symposium on Operation Systems Principles.2003:29-43.

猜你喜歡
關(guān)系數(shù)據(jù)庫(kù)圖幅海量
一種傅里葉域海量數(shù)據(jù)高速譜聚類(lèi)方法
關(guān)系數(shù)據(jù)庫(kù)在高爐數(shù)據(jù)采集系統(tǒng)中的應(yīng)用
山東冶金(2022年2期)2022-08-08 01:51:30
海量快遞垃圾正在“圍城”——“綠色快遞”勢(shì)在必行
一個(gè)圖形所蘊(yùn)含的“海量”巧題
基于EXCEL的地形圖圖幅號(hào)轉(zhuǎn)換查詢(xún)方法
基于索引結(jié)構(gòu)的關(guān)系數(shù)據(jù)庫(kù)關(guān)鍵詞檢索
基于ArcMap的圖幅接合表快速生成方法研究
地形圖圖幅編號(hào)規(guī)則及實(shí)現(xiàn)
基于文件系統(tǒng)的分布式海量空間數(shù)據(jù)高效存儲(chǔ)與組織研究
基于Bing Maps的地形圖圖幅編號(hào)的網(wǎng)絡(luò)可視化查詢(xún)
柯坪县| 滕州市| 富顺县| 涪陵区| 灵山县| 连南| 武城县| 仁布县| 杭锦旗| 林州市| 年辖:市辖区| 资中县| 静乐县| 白城市| 永安市| 昌邑市| 大冶市| 博罗县| 喜德县| 大渡口区| 芦山县| 榆中县| 民丰县| 大兴区| 芒康县| 徐闻县| 新营市| 宜州市| 射阳县| 云龙县| 胶州市| 彰化县| 湘阴县| 应用必备| 桓台县| 金塔县| 沾化县| 赤水市| 石屏县| 德庆县| 阳山县|