專利名稱::一種數(shù)據(jù)庫系統(tǒng)實現(xiàn)柵格數(shù)據(jù)類型的方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明主要涉及信息處理技術(shù),特別涉及一種在數(shù)據(jù)庫管理系統(tǒng)內(nèi)核中實現(xiàn)柵格數(shù)據(jù)類型的方法及其系統(tǒng)。
背景技術(shù):
:近些年來,隨著遙感與信息探測技術(shù)的飛速發(fā)展,地理空間數(shù)據(jù)正在呈幾何級數(shù)增長,如何對多源、多尺度下的海量地理空間數(shù)據(jù)進行高效組織和訪問已成為迫切需要解決的核心問題。柵格數(shù)據(jù)是地理空間數(shù)據(jù)的重要組成部分,是以像元(或像素)矩陣結(jié)構(gòu)保存的地理空間數(shù)據(jù),它是一類數(shù)據(jù)的總稱,涵蓋遙感影像、數(shù)字高程模型、格網(wǎng)數(shù)據(jù)等多種具體形態(tài),甚至普通照片也屬于典型的柵格數(shù)據(jù)。由于遙感平臺所采集的地理空間數(shù)據(jù)基本都屬于柵格數(shù)據(jù)(即遙感數(shù)據(jù)產(chǎn)品),因此柵格數(shù)據(jù)所占地理空間數(shù)據(jù)總量的比重最大且數(shù)據(jù)量與日俱增,對其如何進行高效組織和訪問已構(gòu)成挑戰(zhàn)。對地理空間數(shù)據(jù)的存儲,總體上已從文件方式發(fā)展為數(shù)據(jù)庫方式。文件方式存儲柵格數(shù)據(jù)主要存在以下缺陷文件的相對獨立性導(dǎo)致數(shù)據(jù)的松散型組織;難以實現(xiàn)高效檢索,尤其是多條件的聯(lián)合檢索;—體化查詢與分析效率不高,包括跨文件一體化、矢柵一體化查詢與分析等;并發(fā)更新與安全問題無法解決。針對文件方式的不足,近年來空間數(shù)據(jù)庫技術(shù)得到了快速發(fā)展??臻g數(shù)據(jù)庫系統(tǒng)對柵格數(shù)據(jù)的存儲和操作主要借助擴展柵格數(shù)據(jù)類型實現(xiàn)。所謂柵格數(shù)據(jù)類型,是除^t、Varchar等常規(guī)字段類型之外,針對存儲柵格數(shù)據(jù)而專門引入的一種新的字段類型。要實現(xiàn)該數(shù)據(jù)類型,需要對原有數(shù)據(jù)庫系統(tǒng)內(nèi)核進行擴展,設(shè)計針對該數(shù)據(jù)類型的數(shù)據(jù)存儲和訪問機制,并定義一系列針對該數(shù)據(jù)類型的SQL算子以實現(xiàn)對柵格數(shù)據(jù)(或稱柵格對象)的操作,而用戶層面,只要將表中的某個字段定義為柵格數(shù)據(jù)類型字段,就可以在該字段中存儲柵格數(shù)據(jù),并通過執(zhí)行相應(yīng)的SQL算子實現(xiàn)對柵格數(shù)據(jù)的增、刪、改、查。例如,Oracle數(shù)據(jù)庫發(fā)明了柵格數(shù)據(jù)類型SD0_GeORaster,該類型底層采用基于數(shù)據(jù)庫表的存儲和訪問機制,專利號為US2005/0055376A1;國產(chǎn)空間數(shù)據(jù)庫BeyonDB發(fā)明了柵格數(shù)據(jù)類型ST_Raster,該類型獨創(chuàng)了基于數(shù)據(jù)庫表(行內(nèi)模式)和數(shù)據(jù)庫內(nèi)控文件系統(tǒng)(行外模式)兩種并行結(jié)構(gòu)的存儲和訪問機制,專利號為ZL200910M4117。以上基于數(shù)據(jù)庫的類型擴展機制來存儲和操作柵格數(shù)據(jù),可較好地解決所述文件方式所存在的缺陷(即在數(shù)據(jù)的統(tǒng)一組織、高效一體化查詢與檢索、以及并發(fā)安全訪問方面存在的問題),但前提是需要將外部柵格數(shù)據(jù)物理導(dǎo)入到數(shù)據(jù)庫,并以數(shù)據(jù)庫內(nèi)部柵格格式存儲才能解決以上問題。需要指出的是,所述ZL200910M4117所發(fā)明的行外模式雖然采用的是基于文件存儲,但其屬于數(shù)據(jù)庫內(nèi)部實現(xiàn)的一種柵格文件系統(tǒng),其目的是提高數(shù)據(jù)庫只讀訪問的效率,即外部柵格數(shù)據(jù)如要基于數(shù)據(jù)庫行外模式存儲則仍然需要執(zhí)行導(dǎo)入過程。那么,為何不放棄文件方式或?qū)⑺谢谖募绞降臇鸥駭?shù)據(jù)導(dǎo)入數(shù)據(jù)庫來存儲?實際上,柵格數(shù)據(jù)采用文件方式還是數(shù)據(jù)庫方式存儲一直存在爭議,其原因在于,文件方式存儲柵格數(shù)據(jù)仍有很強的現(xiàn)實意義大量遙感數(shù)據(jù)產(chǎn)品主要是以GeoTiff等文件格式保存,數(shù)據(jù)量巨大(單衛(wèi)星數(shù)據(jù)中心往往以百TB計),如要全部導(dǎo)入數(shù)據(jù)庫幾乎不可能完成,且即使完全導(dǎo)入數(shù)據(jù)庫存儲,也致使同一份數(shù)據(jù)需要維護文件存儲和數(shù)據(jù)庫存儲兩個版本,數(shù)據(jù)一致性難以維護;文件格式的數(shù)據(jù)移動、拷貝靈活,不需要類似數(shù)據(jù)庫的導(dǎo)入和導(dǎo)出操作;文件數(shù)據(jù)的獨立訪問和處理性能相對較高,較適合數(shù)據(jù)生產(chǎn)系統(tǒng)使用。那么,能否設(shè)計一種內(nèi)置于數(shù)據(jù)庫的新型柵格數(shù)據(jù)類型及其系統(tǒng),能夠屏蔽后端的柵格數(shù)據(jù)物理存儲格式,既能以數(shù)據(jù)庫內(nèi)部柵格格式存取柵格數(shù)據(jù),又能直接存取外部柵格數(shù)據(jù)源格式(包括常用的如GeoTiff等文件格式或其他數(shù)據(jù)庫格式),從而保留外部柵格數(shù)據(jù)源相對獨立性的同時,又能實現(xiàn)基于數(shù)據(jù)庫系統(tǒng)的統(tǒng)一組織、高效一體化查詢檢索以及并發(fā)安全訪問,是本發(fā)明的初衷。
發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題是針對以GeoTiff等文件方式組織和存儲的大規(guī)模柵格數(shù)據(jù)難以實現(xiàn)統(tǒng)一組織、高效一體化查詢檢索以及并發(fā)安全訪問問題,提出了一種同時支持本地數(shù)據(jù)庫存儲和外部數(shù)據(jù)源格式存儲的數(shù)據(jù)庫新型柵格數(shù)據(jù)類型,并通過在數(shù)據(jù)庫底層引入數(shù)據(jù)結(jié)構(gòu)的統(tǒng)一映射機制并擴展常規(guī)數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)一包括擴展外部存儲驅(qū)動器和柵格邏輯對象處理器,實現(xiàn)了數(shù)據(jù)庫系統(tǒng)對內(nèi)部存儲和外部存儲的柵格數(shù)據(jù)的高效集成和基于SQL的統(tǒng)一操作。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案根據(jù)本發(fā)明的第一方面,提供一種數(shù)據(jù)庫系統(tǒng)實現(xiàn)柵格數(shù)據(jù)類型的方法,包含如下步驟(1)按照數(shù)據(jù)庫的數(shù)據(jù)類型擴展定義規(guī)范,在數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)類型體系中增加定義柵格數(shù)據(jù)類型;(2)對柵格數(shù)據(jù)類型所采用的常規(guī)物理存儲模式進行擴展,能夠同時支持本地存儲和外部存儲,其中,本地存儲即完全以數(shù)據(jù)庫內(nèi)部柵格格式來存儲柵格數(shù)據(jù),而外部存儲則以非本地數(shù)據(jù)庫定義的外部柵格數(shù)據(jù)源格式來存儲柵格數(shù)據(jù);(3)在數(shù)據(jù)訪問時,將本地存儲和外部存儲的不同格式的柵格數(shù)據(jù)動態(tài)映射為同構(gòu)的柵格邏輯對象;(4)以柵格邏輯對象為統(tǒng)一視圖,實現(xiàn)針對柵格數(shù)據(jù)類型的各類SQL操作。所述步驟O)中的柵格數(shù)據(jù)類型包含有存儲標志,該存儲標志用于標識當前記錄的當前柵格數(shù)據(jù)類型字段值所保存的柵格數(shù)據(jù)所采用的物理存儲模式,即本地存儲或外部存儲。所述步驟O)中的外部柵格數(shù)據(jù)源格式包含文件型柵格數(shù)據(jù)源格式和數(shù)據(jù)庫型柵格數(shù)據(jù)源格式。所述步驟O)中的外部存儲包含兩個部分,在柵格數(shù)據(jù)類型字段中保存的對外部柵格數(shù)據(jù)源的描述信息,以及基于所述描述信息關(guān)聯(lián)的以外部柵格數(shù)據(jù)源格式保存的柵格數(shù)據(jù)。其中,所述的在柵格數(shù)據(jù)類型字段中保存的對外部柵格數(shù)據(jù)源的描述信息至少包含對外部柵格數(shù)據(jù)源的鏈接信息。所述步驟(3)中實現(xiàn)不同格式柵格數(shù)據(jù)動態(tài)映射為同構(gòu)的柵格邏輯對象的方法具體為首先,數(shù)據(jù)庫內(nèi)部柵格格式均以柵格邏輯對象為中介實現(xiàn)序列化和解序列化;其次,針對每一種外部柵格數(shù)據(jù)源格式建立數(shù)據(jù)動態(tài)轉(zhuǎn)換驅(qū)動,實現(xiàn)外部柵格數(shù)據(jù)源格式和柵格邏輯對象的實時轉(zhuǎn)換。所述的數(shù)據(jù)動態(tài)轉(zhuǎn)換驅(qū)動具備數(shù)據(jù)延遲轉(zhuǎn)換技術(shù),即柵格邏輯對象實施分步構(gòu)造過程,該過程針對不同SQL操作實時轉(zhuǎn)換并填充柵格邏輯對象所需訪問的局部屬性項,以避免僅局部數(shù)據(jù)訪問而一次性填充柵格邏輯對象的全部屬性項。根據(jù)本發(fā)明的第二方面,提供一種實現(xiàn)柵格數(shù)據(jù)類型的數(shù)據(jù)庫系統(tǒng),包含基礎(chǔ)數(shù)據(jù)庫系統(tǒng),并具有支持柵格數(shù)據(jù)外部存儲的擴展系統(tǒng),該擴展系統(tǒng)保存有以外部柵格數(shù)據(jù)源格式存儲但在所述基礎(chǔ)數(shù)據(jù)庫系統(tǒng)的柵格數(shù)據(jù)類型字段中保存有對該外部柵格數(shù)據(jù)源描述信息的所有柵格數(shù)據(jù),并包括外部存儲驅(qū)動器用于底層存取不同格式的外部柵格數(shù)據(jù)源,并動態(tài)轉(zhuǎn)換為同構(gòu)的柵格邏輯對象;柵格邏輯對象處理器用于輸入柵格邏輯對象,執(zhí)行基于柵格邏輯對象的各類計算操作,并返回計算結(jié)果給基礎(chǔ)數(shù)據(jù)庫系統(tǒng)。所述基礎(chǔ)數(shù)據(jù)庫系統(tǒng)包括訪問接口用于連接到數(shù)據(jù)庫并發(fā)出各類SQL請求;SQL解析/優(yōu)化/執(zhí)行器用于解析SQL請求、生成查詢計劃并分解調(diào)用基于數(shù)據(jù)類型的各種操作;數(shù)據(jù)類型管理器用于維護數(shù)據(jù)庫數(shù)據(jù)類型體系,并接收SQL解析/優(yōu)化/執(zhí)行器對數(shù)據(jù)類型操作的調(diào)用,執(zhí)行包含柵格數(shù)據(jù)類型在內(nèi)的面向數(shù)據(jù)類型的各種操作,并將操作結(jié)果返回給SQL解析/優(yōu)化/執(zhí)行器;數(shù)據(jù)I/O管理器用于緩存并底層存取包含柵格數(shù)據(jù)類型在內(nèi)的所有數(shù)據(jù)類型字段值;事務(wù)管理器用于管理數(shù)據(jù)庫鎖和日志;柵格數(shù)據(jù)庫邏輯上包含本地存儲和外部存儲的各類柵格數(shù)據(jù)。以上所述的一種實現(xiàn)柵格數(shù)據(jù)類型的數(shù)據(jù)庫系統(tǒng),其各組件的具體交互職責為數(shù)據(jù)類型管理器接收SQL解析/優(yōu)化/執(zhí)行器對柵格數(shù)據(jù)類型字段的操作調(diào)用,首先在事務(wù)管理器控制并發(fā)的前提下,通過數(shù)據(jù)I/O管理器讀取柵格數(shù)據(jù)庫中對應(yīng)柵格數(shù)據(jù)類型字段的值,然后根據(jù)該柵格數(shù)據(jù)類型字段中保存的存儲標志執(zhí)行相應(yīng)的柵格數(shù)據(jù)訪問和計算操作,最后將操作結(jié)果返回給SQL解析/優(yōu)化/執(zhí)行器。所述的根據(jù)柵格數(shù)據(jù)類型字段中保存的存儲標志執(zhí)行的柵格數(shù)據(jù)訪問操作具體為,根據(jù)存儲標志判斷如果是本地存儲,則由數(shù)據(jù)類型管理器解序列化所述柵格數(shù)據(jù)類型字段中保存的數(shù)據(jù)庫內(nèi)部柵格格式為柵格邏輯對象;如果是外部存儲,則由數(shù)據(jù)類型管理器根據(jù)柵格數(shù)據(jù)類型字段中保存的對外部柵格數(shù)據(jù)源的描述信息調(diào)用外部存儲驅(qū)動器,由外部存儲驅(qū)動器讀取外部柵格數(shù)據(jù)源格式并動態(tài)轉(zhuǎn)換為柵格邏輯對象。所述的外部存儲驅(qū)動器可內(nèi)置至少一種對不同外部柵格數(shù)據(jù)源格式的讀驅(qū)動或?qū)戲?qū)動,其中的讀驅(qū)動負責將外部柵格數(shù)據(jù)源格式動態(tài)轉(zhuǎn)換為柵格邏輯對象,而寫驅(qū)動負責將柵格邏輯對象動態(tài)轉(zhuǎn)換為外部柵格數(shù)據(jù)源格式。所述的根據(jù)柵格數(shù)據(jù)類型字段中保存的存儲標志執(zhí)行的柵格數(shù)據(jù)計算操作具體由柵格邏輯對象處理器完成,即柵格邏輯對象處理器接受統(tǒng)一格式的柵格邏輯對象及計算所需參數(shù),完成指定的柵格計算,并將計算結(jié)果返回給數(shù)據(jù)類型管理器。本發(fā)明與現(xiàn)有技術(shù)相比所具有的優(yōu)點是首先,對柵格數(shù)據(jù)庫的常規(guī)內(nèi)模式進行了擴展,引入外部柵格數(shù)據(jù)源格式(如GeoTiff、GeoRaster等)作為柵格數(shù)據(jù)類型的底層物理存儲結(jié)構(gòu),從而實現(xiàn)了數(shù)據(jù)庫內(nèi)部和外部柵格數(shù)據(jù)的統(tǒng)一組織。其次,在數(shù)據(jù)訪問和操作過程中,通過在數(shù)據(jù)庫底層引入柵格數(shù)據(jù)物理異構(gòu)到邏輯同構(gòu)的映射機制,使數(shù)據(jù)庫系統(tǒng)能夠?qū)靸?nèi)外不同格式柵格數(shù)據(jù)實現(xiàn)一體化的查詢與分析操作,同時,借助數(shù)據(jù)庫天然的索引環(huán)境并配合本發(fā)明所述的柵格邏輯對象的延遲轉(zhuǎn)換技術(shù),能夠達到較高的檢索效率。最后,由于用戶統(tǒng)一通過數(shù)據(jù)庫接口訪問柵格數(shù)據(jù)類型中保存的柵格數(shù)據(jù),因此數(shù)據(jù)庫的并發(fā)訪問控制和安全訪問策略對于物理存儲結(jié)構(gòu)透明,也即對于外部存儲的文件型柵格數(shù)據(jù),數(shù)據(jù)訪問時能夠同樣遵循數(shù)據(jù)庫的并發(fā)訪問控制和安全訪問策略,從而解決了直接存取文件型柵格數(shù)據(jù)所存在的并發(fā)與安全隱患。圖1為本發(fā)明中的數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)示意圖;圖2為本發(fā)明中的數(shù)據(jù)存儲模式示意圖。具體實施例方式下面結(jié)合附圖和實施例進一步說明本發(fā)明的技術(shù)方案。前已述及,所謂柵格數(shù)據(jù)類型,是除ht、Varchar等常規(guī)數(shù)據(jù)庫所提供的字段類型之外,針對存儲柵格數(shù)據(jù)(一種不同于簡單數(shù)據(jù)的復(fù)雜數(shù)據(jù))而專門引入的一種字段類型。數(shù)據(jù)庫管理系統(tǒng)如要增加支持一種新的復(fù)雜數(shù)據(jù)類型,必須對數(shù)據(jù)庫系統(tǒng)內(nèi)核進行擴展,設(shè)計針對該數(shù)據(jù)類型的數(shù)據(jù)存儲和訪問機制,并定義一系列針對該數(shù)據(jù)類型的SQL算子以實現(xiàn)對柵格數(shù)據(jù)(或稱柵格對象)的操作。參考圖1,假設(shè)采用擴展數(shù)據(jù)庫系統(tǒng)100底層內(nèi)核的方式實現(xiàn)本發(fā)明所述的柵格數(shù)據(jù)類型及其系統(tǒng),則具體的方案實施包含類型定義、存儲模式擴展以及系統(tǒng)結(jié)構(gòu)與處理邏輯擴展三個方面,以下擬結(jié)合具體實例進行說明。1、定義柵格數(shù)據(jù)類型ST_Raster定義柵格數(shù)據(jù)類型是在數(shù)據(jù)庫管理系統(tǒng)的類型體系中增加對柵格數(shù)據(jù)類型及其操作函數(shù)接口的描述,不涉及類型的具體存儲結(jié)構(gòu)和操作函數(shù)的具體實現(xiàn)。不同的數(shù)據(jù)庫管理系統(tǒng)給出的數(shù)據(jù)類型擴展定義規(guī)范不同,如Oracle數(shù)據(jù)庫管理系統(tǒng)采用CreateType語句配合對象描述實現(xiàn)新數(shù)據(jù)類型的定義,但從數(shù)據(jù)庫類型擴展原理上,均符合抽象數(shù)據(jù)類型(ADT)的定義方法,以下給出實施例ADTST_Raster{類型屬性{TYPE_NAME=st_raster;TYPE_ID=1121;TYPE_ATTR=OBJ|NOKEY|N0S0RT...}類型操作{Int=ST_BandNum(ST_Rasterr)Double=ST—NoData(ST—Rasterr,IntBandlndex)Bool=ST—Georeferenced(ST—Rasterr)其中,①類型屬性描述數(shù)據(jù)類型的基本特性,如TYPE_NAME為數(shù)據(jù)類型的名稱,TYPE_ID為數(shù)據(jù)類型的唯一標識,TYPE_ATTR為數(shù)據(jù)類型的特性標志位的組合,其中的OBJ表示該柵格數(shù)據(jù)類型為對象型數(shù)據(jù)類型,NOKEY說明柵格數(shù)據(jù)類型的字段不能作為數(shù)據(jù)表的主鍵,NOSORT說明柵格數(shù)據(jù)類型不支持排序等。②類型操作定義與該柵格數(shù)據(jù)類型相關(guān)的所有操作函數(shù)的接口,包括操作函數(shù)的名稱、參數(shù)類型以及返回值的類型等,如以操作函數(shù)ht=ST_BandNum(ST_Rasterr)為例,該操作函數(shù)用于獲取柵格數(shù)據(jù)類型中存儲的柵格數(shù)據(jù)的波段總數(shù),其中,ST_BandNum為該操作函數(shù)的名稱,ST_Rasterr說明該操作函數(shù)需要傳入ST_Raster類型字段值作為參數(shù),而Int標識該操作函數(shù)返回的波段總數(shù)為整型。2、擴展ST_Raster類型的物理存儲模式定義完ST_Raster數(shù)據(jù)類型后,第二步需要在數(shù)據(jù)庫管理系統(tǒng)的內(nèi)模式確定ST_Raster數(shù)據(jù)類型所對應(yīng)的物理存儲結(jié)構(gòu)。物理存儲結(jié)構(gòu)涉及到存儲模式和具體存儲格式,其中本發(fā)明主要對常規(guī)的數(shù)據(jù)庫存儲模式進行擴展,但不對具體存儲格式進行限定,例如,當采用外部存儲模式時,至于采用GeoTiff格式還是其他格式保存柵格數(shù)據(jù),非本發(fā)明重點ο以圖2中的表rst_tab為例,該表中的字段rast采用上述ST_Raster數(shù)據(jù)類型。ST_Raster數(shù)據(jù)類型設(shè)計包含兩種物理存儲模式,即本發(fā)明所提出的本地存儲和外部存儲。其中,本地存儲即完全以數(shù)據(jù)庫內(nèi)部柵格格式來存儲柵格數(shù)據(jù),而外部存儲則以非本地數(shù)據(jù)庫定義的外部柵格數(shù)據(jù)源格式來存儲柵格數(shù)據(jù)。外部存儲的柵格數(shù)據(jù)可以包含如GeoTiff、ErdasImagine,JPEG等不同格式的文件型柵格數(shù)據(jù),以及類似OracleGeoRaster.ArcSDERaster等數(shù)據(jù)庫型柵格數(shù)據(jù)。以下舉例說明實現(xiàn)兩種物理存儲模式的具體實施例方式以rid=1的記錄為例字段rast中的“MgMode=IN”用于標識該記錄中存儲的柵格數(shù)據(jù)采用的是本地存儲,也即該柵格數(shù)據(jù)以數(shù)據(jù)庫內(nèi)部柵格格式保存于DBMSdatafile中(數(shù)據(jù)庫內(nèi)部數(shù)據(jù)文件)中,至于具體存儲格式可參考專利US2005/0055376A1等,此處不作限定。以rid=2的記錄為例該字段rast中保存的柵格數(shù)據(jù)采用的是外部存儲模式,且為文件型柵格數(shù)據(jù),其具體包含兩個部分,①在柵格數(shù)據(jù)類型字段中保存的對外部柵格數(shù)據(jù)源的描述信息“MgMode=OUT”用于標識該記錄中存儲的柵格數(shù)據(jù)采用的是外部存儲,“Frmt=TIF”標識外部柵格數(shù)據(jù)源格式為Tiff格式,“URL=D:\Imgs\600_600_3.tif”記錄外部柵格數(shù)據(jù)源所在路徑的鏈接信息。②基于所述描述信息關(guān)聯(lián)的以外部柵格數(shù)據(jù)源格式保存的柵格數(shù)據(jù),該具體實施例中即為以Tiff格式保存的600_600_3.tif文件。rid=3的記錄與rid=2的記錄類似,采用的也是外部存儲模式,且同樣為文件型柵格數(shù)據(jù),但鏈接的是ErdasImagine格式的外部柵格文件。rid=4的記錄采用的也是外部存儲模式,但為數(shù)據(jù)庫型柵格數(shù)據(jù),其中的“Frmt=0RA”標識外部柵格數(shù)據(jù)源為Oracle數(shù)據(jù)庫提供的GeoRaster格式;“URLscott,tiger,db,table,column,rid=21”記錄外部柵格數(shù)據(jù)源所在數(shù)據(jù)庫的鏈接信息,包括用戶名、密碼、數(shù)據(jù)庫名、表名、柵格數(shù)據(jù)類型字段名以及行的定位條件。綜上,采用以上所述的ST_Raster數(shù)據(jù)類型存儲柵格數(shù)據(jù),單從存儲角度具有以下特點(1)存儲結(jié)構(gòu)較為靈活,即使在同一張rst_tab表中,也可以混合基于本地存儲和外部存儲的不同的柵格數(shù)據(jù),且外部存儲既可以是文件型柵格數(shù)據(jù),也可以是其它數(shù)據(jù)庫系統(tǒng)中保存的數(shù)據(jù)庫型柵格數(shù)據(jù)。(2)當主要采用基于文件型的外部存儲時,由于柵格數(shù)據(jù)主要占據(jù)本地數(shù)據(jù)庫之外的存儲空間,因此表結(jié)構(gòu)本身數(shù)據(jù)量較小,但卻可以實現(xiàn)對外部大規(guī)模柵格數(shù)據(jù)的統(tǒng)一組織。(3)用戶通過統(tǒng)一的訪問接口存取柵格數(shù)據(jù)類型字段值,因此用戶對于ST_Raster的存儲結(jié)構(gòu)可做到透明,這樣充分體現(xiàn)了抽象數(shù)據(jù)類型的作用,并實現(xiàn)了數(shù)據(jù)庫系統(tǒng)對不同格式柵格數(shù)據(jù)基于ST_Raster類型的統(tǒng)一組織。3、擴展數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)和處理邏輯以擴展后的ST_Raster物理存儲模式為基礎(chǔ),進一步對常規(guī)數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)及處理邏輯進行擴展,目的是為了實現(xiàn)對內(nèi)部存儲和外部存儲柵格數(shù)據(jù)的一體化操作。如圖2所示,對包含訪問接口、SQL解析/優(yōu)化/執(zhí)行器、數(shù)據(jù)類型管理器、事務(wù)管理器、數(shù)據(jù)I/O管理器和柵格數(shù)據(jù)庫的基礎(chǔ)數(shù)據(jù)庫系統(tǒng)50進行擴展,加入了柵格邏輯對象處理器、外部存儲驅(qū)動器并引入外部數(shù)據(jù)源,構(gòu)成外部存儲的擴展系統(tǒng)60。下面結(jié)合實施例說明各組件職責和處理邏輯。假設(shè)要從上述rst_tab中搜索出所有未進行過地理空間參考(Georeferencing)的柵格數(shù)據(jù),并返回這些記錄的rid字段值。其中Georeferencing為遙感或地理信息系統(tǒng)領(lǐng)域的公知常識,用于描述柵格數(shù)據(jù)的象元坐標和實地坐標的換算關(guān)系,即如果包含Georeferencing信息,則可以由象元坐標(指圖面上的坐標)計算實地坐標(比如現(xiàn)實世界的經(jīng)緯度坐標),或通過實地坐標計算象元坐標,從而使一幅遙感影像(一種最典型的柵格數(shù)據(jù))具有了空間定位能力。要實現(xiàn)以上搜索,數(shù)據(jù)庫只要執(zhí)行以下SQL語句SELECTridFROMrst_tabWHEREST_Georeferenced(rast)=FALSE其中的WHERE語句對符合條件的記錄進行篩選,即對rst_tab表中的每一行柵格數(shù)據(jù)執(zhí)行ST_Ge0referenced操作函數(shù),如果返回值為FALSE即當前行符合搜索條件。ST_Georeferenced操作函數(shù)的完整接口為Bool=ST_Georeferenced(ST_Rasterr),需傳入柵格數(shù)據(jù)類型字段值,并判斷該字段中存儲的柵格數(shù)據(jù)是否包含了Georeferencing信息,如果不具備就返回FALSE,如果具備則返回TRUE。以上SQL語句通過訪問接口組件發(fā)送給SQL解析/編譯/執(zhí)行器,SQL解析/編譯/執(zhí)行器解析該SQL請求、生成對應(yīng)的查詢計劃并分解執(zhí)行其中的ST_GeoreferenCed操作,而該操作的具體執(zhí)行由數(shù)據(jù)類型管理器負責,即數(shù)據(jù)類型管理器首先在事務(wù)管理器控制并發(fā)的前提下,通過數(shù)據(jù)I/O管理器讀取rst_tab中的當前記錄行,其中包含rast字段值,然后根據(jù)該rast字段值中保存的存儲標志MgMode執(zhí)行相應(yīng)的柵格數(shù)據(jù)訪問和計算操作。假設(shè)當前操作的是rid=1的記錄行,通過判斷rast字段值中的“StgMode=IN”知道該柵格數(shù)據(jù)采用了本地存儲,則數(shù)據(jù)類型管理器根據(jù)預(yù)知的數(shù)據(jù)庫內(nèi)部柵格格式對rast字段值進行解序列化,生成統(tǒng)一的柵格邏輯對象。其中,柵格邏輯對象為中間數(shù)據(jù)結(jié)構(gòu),與具體存儲格式無關(guān),可采用類或結(jié)構(gòu)方式實現(xiàn),此處以結(jié)構(gòu)方式給出示例StructRastOBJ{Int4RastWidth;/*柵格寬度*/Int4RastHeight;/*柵格高度*/Int4BandNum;/*波段數(shù)*/GeoRefPara*georefs;/*GeoRefPara結(jié)構(gòu)定義了有關(guān)Georeferencing的所有參數(shù)信息,業(yè)界有多種參數(shù)形式并為公知技術(shù),比如仿射變換參數(shù)是其中一種*/…}假設(shè)當前操作的是rid=2的記錄行,通過判斷rast字段值中的“StgMode=OUT”知道該柵格數(shù)據(jù)采用了外部存儲,則由數(shù)據(jù)類型管理器進一步根據(jù)rast字段中保存的對外部柵格數(shù)據(jù)源的描述信息——對應(yīng)到本實施例中即為“Frmt=TIF”和“URL=D\Imgs\600_600_3.tif”調(diào)用外部存儲驅(qū)動器讀取柵格數(shù)據(jù)。此處,假設(shè)外部存儲驅(qū)動器內(nèi)置了對以上Tiff和IMG兩種文件型柵格數(shù)據(jù)源以及OracleGeoRaster數(shù)據(jù)庫型柵格數(shù)據(jù)源的讀寫驅(qū)動,其中的讀驅(qū)動負責將Tiff、IMG和GeoRaster格式的柵格數(shù)據(jù)動態(tài)轉(zhuǎn)換為柵格邏輯對象RastOBJ,而寫驅(qū)動負責將柵格邏輯對象RastOBJ動態(tài)轉(zhuǎn)換為Tiff、IMG和GeoRaster格式。由于當前的SI^Georeferenced操作是一種讀取操作,且外部存儲格式為Tiff格式,故外部存儲驅(qū)動器將實例化Tiff格式的讀驅(qū)動,通過間接調(diào)用Tiff格式的讀寫庫(如公知的Iibtiff庫等),讀取D:\Imgs\600_600_3.tif文件的所需數(shù)據(jù)項,并填充到RastOBJ中(如果是數(shù)據(jù)庫型柵格數(shù)據(jù)源,則連接到外部數(shù)據(jù)庫,并通過數(shù)據(jù)庫接口訪問柵格對象的所需數(shù)據(jù)項)。此處,由于ST_GeoreferenCed操作只涉及對空間參考信息的讀取,故可進一步使用延遲轉(zhuǎn)換技術(shù),即對RastOBJ實施分步構(gòu)造過程,例如,在對象實例化時只填充以上RastHeight、Rastffidth等基本屬性項,對于空間參考、顏色表等非基本屬性項在對象實例化時暫不進行填充,直到邏輯對象處理器執(zhí)行空間參考計算操作時,再通過驅(qū)動按需實時讀取外部柵格數(shù)據(jù)源的空間參考信息,從而實現(xiàn)較高的數(shù)據(jù)存取效率。通過以上訪問過程獲得同構(gòu)的柵格邏輯對象RastOBJ后,具體判斷當前RastOBJ是否已被空間參考將由柵格邏輯對象處理器完成。柵格邏輯對象處理器以RastOBJ為操作對象,并實現(xiàn)了針對RastOBJ實例的各類計算操作。例如,對應(yīng)上述的ST_Georeferenced操作函數(shù),在邏輯對象處理器中需要實現(xiàn)對應(yīng)的針對RastOBJ實例的空間參考計算操作,假設(shè)入口函數(shù)為BoolRastOBJ_ISGeoref(RastOBJ^rastobj),該函數(shù)實現(xiàn)邏輯如下(1)判斷所傳入的柵格邏輯對象rastobj是否已經(jīng)讀取了空間參考信息(比如通過判斷其georefs成員指針是否為空實現(xiàn)),如果由于延遲轉(zhuǎn)換機制尚未讀取,則通過當前的柵格數(shù)據(jù)驅(qū)動實例實時讀取外部柵格數(shù)據(jù)源的空間參考信息并填充到georefs成員;(2)判斷georefs成員是否已包含準確的空間參考信息,如果參數(shù)值已被準確填充,則說明已被空間參考,則返回TURE,如果未準確填充,則返回FALSE,從而實質(zhì)上完成了ST_Ge0referenced操作函數(shù)所需實現(xiàn)的功能。以上,在執(zhí)行帶有SI^Georeferenced的SQL操作過程中,系統(tǒng)借助柵格數(shù)據(jù)物理存儲格式異構(gòu)到邏輯同構(gòu)的映射機制,使數(shù)據(jù)庫系統(tǒng)能夠?qū)st_tab表中不同存儲模式的柵格數(shù)據(jù)實現(xiàn)一體化訪問和計算,其中,柵格邏輯對象的延遲轉(zhuǎn)換技術(shù),能夠避免為訪問局部數(shù)據(jù)(如本實施例中只需訪問空間參考信息)而實例化整體對象,從而保證了較高的查詢檢索效率。同時,由于用戶統(tǒng)一通過類似以上SQL操作訪問柵格數(shù)據(jù)類型中保存的柵格數(shù)據(jù),因此數(shù)據(jù)庫的并發(fā)訪問控制和安全訪問策略對于物理存儲結(jié)構(gòu)透明。比如,當一個會話執(zhí)行對rid=2記錄(對應(yīng)外部存儲的文件型柵格數(shù)據(jù))中的rast字段進行Update更新時,另一個對該記錄的Update更新會等待,一旦前一更新完成,后一更新立即執(zhí)行,因此,對于并發(fā)更新外部存儲的文件型柵格數(shù)據(jù),不會存在并發(fā)沖突問題,從而解決了直接存取文件型柵格數(shù)據(jù)所存在的并發(fā)與安全隱患。本發(fā)明未詳細闡述部分屬于本領(lǐng)域公知常識,且本
技術(shù)領(lǐng)域:
中的普通技術(shù)人員應(yīng)當認識到,以上的實施例僅是用來說明本發(fā)明,而并非用于對本發(fā)明的限定,只要在本發(fā)明的實質(zhì)思想范圍內(nèi),對以上實施例的變化、變型都將落在本發(fā)明的權(quán)利要求書范圍內(nèi)。權(quán)利要求1.一種數(shù)據(jù)庫系統(tǒng)實現(xiàn)柵格數(shù)據(jù)類型的方法,其特征在于,包含如下步驟(1)按照數(shù)據(jù)庫的數(shù)據(jù)類型擴展定義規(guī)范,在數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)類型體系中增加定義柵格數(shù)據(jù)類型;(2)對柵格數(shù)據(jù)類型所采用的常規(guī)物理存儲模式進行擴展,能夠同時支持本地存儲和外部存儲,其中,本地存儲即完全以數(shù)據(jù)庫內(nèi)部柵格格式來存儲柵格數(shù)據(jù),而外部存儲則以非本地數(shù)據(jù)庫定義的外部柵格數(shù)據(jù)源格式來存儲柵格數(shù)據(jù);(3)在數(shù)據(jù)訪問時,將本地存儲和外部存儲的不同格式的柵格數(shù)據(jù)動態(tài)映射為同構(gòu)的柵格邏輯對象;(4)以柵格邏輯對象為統(tǒng)一視圖,實現(xiàn)針對柵格數(shù)據(jù)類型的各類SQL操作。2.如權(quán)利要求1所述的一種數(shù)據(jù)庫系統(tǒng)實現(xiàn)柵格數(shù)據(jù)類型的方法,其特征在于,所述步驟O)中的柵格數(shù)據(jù)類型包含有存儲標志,該存儲標志用于標識當前記錄的當前柵格數(shù)據(jù)類型字段值所保存的柵格數(shù)據(jù)所采用的物理存儲模式。3.如權(quán)利要求1所述的一種數(shù)據(jù)庫系統(tǒng)實現(xiàn)柵格數(shù)據(jù)類型的方法,其特征在于,所述步驟O)中的外部柵格數(shù)據(jù)源格式包含文件型柵格數(shù)據(jù)源格式和數(shù)據(jù)庫型柵格數(shù)據(jù)源格式。4.如權(quán)利要求1所述的一種數(shù)據(jù)庫系統(tǒng)實現(xiàn)柵格數(shù)據(jù)類型的方法,其特征在于,所述步驟O)中的外部存儲包含兩個部分,在柵格數(shù)據(jù)類型字段中保存的對外部柵格數(shù)據(jù)源的描述信息,以及基于所述描述信息關(guān)聯(lián)的以外部柵格數(shù)據(jù)源格式保存的柵格數(shù)據(jù)。5.如權(quán)利要求4所述的一種數(shù)據(jù)庫系統(tǒng)實現(xiàn)柵格數(shù)據(jù)類型的方法,其特征在于,所述的在柵格數(shù)據(jù)類型字段中保存的對外部柵格數(shù)據(jù)源的描述信息至少包含對外部柵格數(shù)據(jù)源的鏈接信息。6.如權(quán)利要求1所述的一種數(shù)據(jù)庫系統(tǒng)實現(xiàn)柵格數(shù)據(jù)類型的方法,其特征在于,所述步驟(3)中實現(xiàn)不同格式柵格數(shù)據(jù)動態(tài)映射為同構(gòu)的柵格邏輯對象的方法具體為首先,數(shù)據(jù)庫內(nèi)部柵格格式均以柵格邏輯對象為中介實現(xiàn)序列化和解序列化;其次,針對每一種外部柵格數(shù)據(jù)源格式建立數(shù)據(jù)動態(tài)轉(zhuǎn)換驅(qū)動,實現(xiàn)外部柵格數(shù)據(jù)源格式和柵格邏輯對象的實時轉(zhuǎn)換。7.如權(quán)利要求6所述的一種數(shù)據(jù)庫系統(tǒng)實現(xiàn)柵格數(shù)據(jù)類型的方法,其特征在于,所述的數(shù)據(jù)動態(tài)轉(zhuǎn)換驅(qū)動具備數(shù)據(jù)延遲轉(zhuǎn)換技術(shù),即柵格邏輯對象實施分步構(gòu)造過程,該過程針對不同SQL操作實時轉(zhuǎn)換并填充柵格邏輯對象所需訪問的局部屬性項,以避免僅局部數(shù)據(jù)訪問而一次性填充柵格邏輯對象的全部屬性項。8.一種實現(xiàn)柵格數(shù)據(jù)類型的數(shù)據(jù)庫系統(tǒng),其特征在于,包含基礎(chǔ)數(shù)據(jù)庫系統(tǒng),并具有支持柵格數(shù)據(jù)外部存儲的擴展系統(tǒng),該擴展系統(tǒng)保存有以外部柵格數(shù)據(jù)源格式存儲但在所述基礎(chǔ)數(shù)據(jù)庫系統(tǒng)的柵格數(shù)據(jù)類型字段中保存有對該外部柵格數(shù)據(jù)源描述信息的所有柵格數(shù)據(jù),并包括外部存儲驅(qū)動器用于底層存取不同格式的外部柵格數(shù)據(jù)源,并動態(tài)轉(zhuǎn)換為同構(gòu)的柵格邏輯對象;柵格邏輯對象處理器用于輸入柵格邏輯對象,執(zhí)行基于柵格邏輯對象的各類計算操作,并返回計算結(jié)果給基礎(chǔ)數(shù)據(jù)庫系統(tǒng)。9.如權(quán)利要求8所述的一種實現(xiàn)柵格數(shù)據(jù)類型的數(shù)據(jù)庫系統(tǒng),其特征在于,所述基礎(chǔ)數(shù)據(jù)庫系統(tǒng)包括訪問接口用于連接到數(shù)據(jù)庫并發(fā)出各類SQL請求;SQL解析/優(yōu)化/執(zhí)行器用于解析SQL請求、生成查詢計劃并分解調(diào)用基于數(shù)據(jù)類型的各種操作;數(shù)據(jù)類型管理器用于維護數(shù)據(jù)庫數(shù)據(jù)類型體系,接收SQL解析/優(yōu)化/執(zhí)行器對數(shù)據(jù)類型操作的調(diào)用,執(zhí)行包含柵格數(shù)據(jù)類型在內(nèi)的面向數(shù)據(jù)類型的各種操作,并將操作結(jié)果返回給SQL解析/優(yōu)化/執(zhí)行器;數(shù)據(jù)I/O管理器用于緩存并底層存取包含柵格數(shù)據(jù)類型在內(nèi)的所有數(shù)據(jù)類型字段值;事務(wù)管理器用于管理數(shù)據(jù)庫鎖和日志;柵格數(shù)據(jù)庫邏輯上包含本地存儲和外部存儲的各類柵格數(shù)據(jù)。10.如權(quán)利要求8所述的一種實現(xiàn)柵格數(shù)據(jù)類型的數(shù)據(jù)庫系統(tǒng),其特征在于,所述的對外部柵格數(shù)據(jù)源的描述信息至少包含對外部柵格數(shù)據(jù)源的鏈接信息。11.如權(quán)利要求8或9所述的一種實現(xiàn)柵格數(shù)據(jù)類型的數(shù)據(jù)庫系統(tǒng),其特征在于,數(shù)據(jù)類型管理器接收SQL解析/優(yōu)化/執(zhí)行器對柵格數(shù)據(jù)類型字段的操作調(diào)用,首先在事務(wù)管理器控制并發(fā)的前提下,通過數(shù)據(jù)I/O管理器讀取柵格數(shù)據(jù)庫中對應(yīng)柵格數(shù)據(jù)類型字段的值,然后根據(jù)該柵格數(shù)據(jù)類型字段中保存的存儲標志執(zhí)行相應(yīng)的柵格數(shù)據(jù)訪問和計算操作,最后將操作結(jié)果返回給SQL解析/優(yōu)化/執(zhí)行器。12.如權(quán)利要求11所述的一種實現(xiàn)柵格數(shù)據(jù)類型的數(shù)據(jù)庫系統(tǒng),其特征在于,所述的根據(jù)柵格數(shù)據(jù)類型字段中保存的存儲標志執(zhí)行的柵格數(shù)據(jù)訪問操作具體為,根據(jù)存儲標志判斷如果是本地存儲,則由數(shù)據(jù)類型管理器解序列化所述柵格數(shù)據(jù)類型字段中保存的數(shù)據(jù)庫內(nèi)部柵格格式為柵格邏輯對象;如果是外部存儲,則由數(shù)據(jù)類型管理器根據(jù)柵格數(shù)據(jù)類型字段中保存的對外部柵格數(shù)據(jù)源的描述信息調(diào)用外部存儲驅(qū)動器,由外部存儲驅(qū)動器讀取外部柵格數(shù)據(jù)源格式并動態(tài)轉(zhuǎn)換為柵格邏輯對象;13.如權(quán)利要求12所述的一種實現(xiàn)柵格數(shù)據(jù)類型的數(shù)據(jù)庫系統(tǒng),其特征在于,所述的外部存儲驅(qū)動器內(nèi)置至少一種對不同外部柵格數(shù)據(jù)源格式的讀驅(qū)動或?qū)戲?qū)動,其中的讀驅(qū)動負責將外部柵格數(shù)據(jù)源格式動態(tài)轉(zhuǎn)換為柵格邏輯對象,而寫驅(qū)動負責將柵格邏輯對象動態(tài)轉(zhuǎn)換為外部柵格數(shù)據(jù)源格式。14.如權(quán)利要求11所述的一種實現(xiàn)柵格數(shù)據(jù)類型的數(shù)據(jù)庫系統(tǒng),其特征在于,所述的根據(jù)柵格數(shù)據(jù)類型字段中保存的存儲標志執(zhí)行的柵格數(shù)據(jù)計算操作具體由柵格邏輯對象處理器完成,即柵格邏輯對象處理器接受統(tǒng)一格式的柵格邏輯對象及計算所需參數(shù),完成指定的柵格計算,并將計算結(jié)果返回給數(shù)據(jù)類型管理器。全文摘要針對以GeoTiff等文件方式組織和存儲的大規(guī)模柵格數(shù)據(jù)難以實現(xiàn)統(tǒng)一組織、高效一體化查詢檢索以及并發(fā)安全訪問問題,提出了一種數(shù)據(jù)庫系統(tǒng)實現(xiàn)柵格數(shù)據(jù)類型的方法及其系統(tǒng),對柵格數(shù)據(jù)類型所采用的常規(guī)物理存儲模式進行了擴展,能夠同時支持基于數(shù)據(jù)庫內(nèi)部柵格格式的本地存儲和基于外部柵格數(shù)據(jù)源格式的外部存儲,并通過引入數(shù)據(jù)結(jié)構(gòu)的統(tǒng)一映射機制并擴展常規(guī)數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)——包括擴展外部存儲驅(qū)動器和柵格邏輯對象處理器,實現(xiàn)了數(shù)據(jù)庫系統(tǒng)對內(nèi)部存儲和外部存儲柵格數(shù)據(jù)的高效集成和基于SQL的統(tǒng)一操作。文檔編號G06F17/30GK102368272SQ20111036119公開日2012年3月7日申請日期2011年11月15日優(yōu)先權(quán)日2011年11月15日發(fā)明者姜平,張明波,程昌秀,謝炯,陳應(yīng)東,陳振,陳榮國申請人:中國科學(xué)院地理科學(xué)與資源研究所,北京博陽世通信息技術(shù)有限公司