欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

遙感影像云存儲(chǔ)方法與流程

文檔序號(hào):12470296閱讀:988來源:國知局
遙感影像云存儲(chǔ)方法與流程

本發(fā)明涉及遙感數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,尤其是一種基于HDFS的遙感影像存儲(chǔ)方案。



背景技術(shù):

遙感影像是各種傳感器所獲信息的產(chǎn)物,是遙感探測(cè)目標(biāo)的信息載體。航天遙感技術(shù)經(jīng)過多年的發(fā)展,無論在光譜分辨率、空間分辨率、時(shí)間分辨率等方面都有了長(zhǎng)足的進(jìn)步。但與此同時(shí),遙感影像的數(shù)據(jù)規(guī)模陡然攀升,傳統(tǒng)的單機(jī)存儲(chǔ)系統(tǒng)已經(jīng)無法滿足需求:

1)單機(jī)存儲(chǔ)系統(tǒng)無法承載如此大規(guī)模的影像數(shù)據(jù),每天至少幾TB的數(shù)據(jù),單機(jī)硬盤會(huì)很快裝滿,這使得單機(jī)存儲(chǔ)系統(tǒng)不易擴(kuò)展的缺點(diǎn)暴露無遺;

2)更重要的是,單機(jī)存儲(chǔ)系統(tǒng)的可靠性不易保證,當(dāng)有硬盤出現(xiàn)故障時(shí),其中的數(shù)據(jù)也隨之丟失。

介于單機(jī)存儲(chǔ)無法滿足遙感影像大規(guī)模存儲(chǔ)的現(xiàn)實(shí)情況,本發(fā)明提出了基于遙感影像常用庫——GDAL與分布式文件系統(tǒng)——HDFS相結(jié)合的解決方案。

要實(shí)現(xiàn)本方案需要解決以下兩點(diǎn)問題:

1)原生GDAL庫不支持直接訪問在HDFS上存儲(chǔ)的影像;

2)GDAL要修改影像,需要對(duì)影像文件進(jìn)行隨機(jī)寫,但HDFS不支持隨機(jī)寫。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的在于克服現(xiàn)有技術(shù)中存在的不足,提供一種遙感影像云存儲(chǔ)方法,基于GDAL與HDFS解決了遙感影像單機(jī)存儲(chǔ)容量、可靠性不足的問題。本發(fā)明采用的技術(shù)方案是:

一種遙感影像云存儲(chǔ)方法,包括下述步驟:

步驟S1,拓展GDAL文件訪問接口,使GDAL能夠讀寫HDFS上的影像;

步驟S2,提供一套本地緩存機(jī)制,即建立本地緩存,用于實(shí)現(xiàn)GDAL需要隨機(jī)寫的需要。

進(jìn)一步地,步驟S1具體包括:

1)實(shí)現(xiàn)繼承自VSIFilesystemHandler用以訪問HDFS的文件系統(tǒng)訪問類,調(diào)用libhdfs提供的函數(shù),完成VSIFilesystemHandler中定義的文件系統(tǒng)訪問接口;

2)在VSIFileManager中注冊(cè),即在VSIFileManager維護(hù)的映射表中加入一個(gè)新的鍵值對(duì),新鍵值對(duì)的鍵為唯一標(biāo)識(shí)HDFS文件系統(tǒng)訪問句柄的字符串,鍵值為HDFS文件系統(tǒng)訪問句柄。

進(jìn)一步地,步驟S2具體包括:

對(duì)文件進(jìn)行分塊處理,每次從HDFS上按塊讀取存入本地緩存;所述本地緩存包括內(nèi)存緩存和本地文件緩存;

采用LRU策略來協(xié)調(diào)內(nèi)存緩存與本地文件緩存:

1)初始化內(nèi)存緩存,內(nèi)存緩存最多緩存N個(gè)文件塊;

2)初始化本地文件緩存,即創(chuàng)建一個(gè)本地文件;

3)在內(nèi)存緩存中維護(hù)一個(gè)LRU排序隊(duì)列,最近用過的文件塊排在LRU隊(duì)列的隊(duì)首,越久沒有用到的文件塊在隊(duì)列中排得越靠后;

4)當(dāng)內(nèi)存緩存已滿時(shí),從LRU排序隊(duì)列中進(jìn)行淘汰,將最久沒有使用過的文件塊寫入本地文件緩存,空出新的緩存載入新的文件塊。

具體地,本地緩存機(jī)制的讀文件塊過程,包括以下步驟:

步驟S101,判斷文件塊是否在本地緩存中,若是則進(jìn)行步驟S102,否則進(jìn)行步驟S104;

步驟S102,判斷文件塊在內(nèi)存緩存中還是在本地文件緩存中,若在本地文件緩存中進(jìn)行步驟S103,若在內(nèi)存緩存中進(jìn)行步驟S109;

步驟S103,向本地文件緩存讀取該文件塊;轉(zhuǎn)步驟S105;

步驟S104,向HDFS讀取該文件塊;

步驟S105,判斷內(nèi)存緩存是否有空的內(nèi)存緩存塊;若是轉(zhuǎn)步驟S107,若否進(jìn)行步驟S106;

步驟S106,將LRU隊(duì)列中最末尾的文件塊寫入本地文件緩存,空出一個(gè)內(nèi)存緩存塊;

步驟S107,向該空內(nèi)存緩存塊中載入讀取的文件塊數(shù)據(jù);

步驟S108,將經(jīng)過步驟S107后的該內(nèi)存緩存塊排到LRU隊(duì)列隊(duì)首;

步驟S109,返回該內(nèi)存緩存塊中的數(shù)據(jù)。

具體地,本地緩存機(jī)制的寫文件塊過程,包括以下步驟:

步驟S201,判斷是否要寫整個(gè)文件塊;若是則進(jìn)行步驟S209,若否則進(jìn)行步驟S202;

步驟S202,進(jìn)一步判斷文件塊是否在本地緩存中,若是則進(jìn)行步驟S204,若否則進(jìn)行步驟S203;

步驟S203,向HDFS讀取該文件塊;

步驟S204,進(jìn)一步判斷文件塊是否在內(nèi)存緩存中,若是則進(jìn)行步驟S211,若否則進(jìn)行步驟S205;

步驟S205,向本地文件緩存讀取該文件塊;

步驟S206,判斷內(nèi)存緩存是否有空的內(nèi)存緩存塊;若是轉(zhuǎn)步驟S208,若否進(jìn)行步驟S207;

步驟S207,將LRU隊(duì)列中最末尾的文件塊寫入本地文件緩存,空出一個(gè)內(nèi)存緩存塊;

步驟S208,向該空內(nèi)存緩存塊載入讀取的文件塊數(shù)據(jù);轉(zhuǎn)步驟S211;

步驟S209,判斷內(nèi)存緩存是否有空的內(nèi)存緩存塊;若是轉(zhuǎn)步驟S211,若否進(jìn)行步驟S210;

步驟S210,將LRU隊(duì)列中最末尾的文件塊寫入本地文件緩存,空出一個(gè)內(nèi)存緩存塊;

步驟S211,向步驟S209或S210中的空內(nèi)存緩存塊寫文件塊數(shù)據(jù);

步驟S212,將經(jīng)過步驟S211后的該內(nèi)存緩存塊排到LRU隊(duì)列隊(duì)首。

本發(fā)明的優(yōu)點(diǎn)在于:

1)本發(fā)明基于GDAL與HDFS解決了遙感影像單機(jī)存儲(chǔ)容量、可靠性不足的問題;

2)拓展了GDAL文件訪問接口,方便遙感影像在HDFS上的存取;

3)以本地緩存的方式實(shí)現(xiàn)了GDAL修改HDFS上影像文件的功能;

4)增加了本地緩存,在重復(fù)讀的情形下,提高了GDAL讀取HDFS影像文件的速度。

附圖說明

圖1為本發(fā)明的整體框架圖。

圖2為本發(fā)明的GDAL文件系統(tǒng)訪問句柄繼承關(guān)系圖。

圖3為本發(fā)明的GDAL文件訪問部分結(jié)構(gòu)示意圖。

圖4為本發(fā)明的讀文件塊流程圖。

圖5為本發(fā)明的寫文件塊流程圖。

具體實(shí)施方式

下面結(jié)合具體附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明。

如圖1所示,遙感影像云存儲(chǔ)方法,是一種基于遙感影像常用庫——GDAL與分布式文件系統(tǒng)——HDFS相結(jié)合的解決方案;圖1中的Cache是緩存;

本發(fā)明的目標(biāo)是:

(一)拓展GDAL文件訪問接口,使GDAL能夠讀寫HDFS上的影像;

(二)提供一套本地緩存機(jī)制,即建立本地緩存,用于解決GDAL需要隨機(jī)寫,而HDFS不支持的問題;同時(shí)盡可能提高命中,提高讀寫速度;所述本地緩存包括內(nèi)存緩存和本地文件緩存。

下面是本發(fā)明兩個(gè)主要部分的詳細(xì)描述;

(一)拓展GDAL文件訪問接口;

作為遙感影像數(shù)據(jù)常用的圖像處理庫,GDAL主要包括以下四部分:

1)抽象數(shù)據(jù)結(jié)構(gòu)。此部分定義了“GDAL影像”的屬性,以及針對(duì)“GDAL圖像”可以進(jìn)行的基本操作;

2)圖像格式解析器。GDAL打開圖像文件時(shí),通過此部分將不同格式的影像文件內(nèi)容轉(zhuǎn)換為內(nèi)存中的“GDAL影像”;

3)圖像處理算法。此部分包含了一些圖像處理算法,如幾何校正、RPC校正、坐標(biāo)投影變換等;

4)文件訪問部分。此部分定義了文件訪問接口,用于訪問不同“文件系統(tǒng)”上的“文件”。

要能操作HDFS上的文件,需要做的就是擴(kuò)展GDAL的文件訪問部分。GDAL文件訪問部分的代碼在GDAL源代碼的port目錄下。GDAL可以訪問的各個(gè)文件系統(tǒng)都以VSIFilesystemHandler為基類的,各個(gè)文件系統(tǒng)的句柄由一個(gè)叫VSIFileManager的類管理著,其內(nèi)部維護(hù)了一個(gè)以文件系統(tǒng)句柄唯一綁定的字符串(string)為鍵(key),文件系統(tǒng)句柄為鍵值(value)的映射表(map),這樣當(dāng)訪問不同的文件系統(tǒng)時(shí),可以根據(jù)不同的key值選取不同的文件系統(tǒng)句柄。VSIFilesystemHandler和VSIFileManager都是GDAL中的類(class);因此為完成本方案設(shè)計(jì)需要以下步驟:

1)實(shí)現(xiàn)繼承自VSIFilesystemHandler用以訪問HDFS的文件系統(tǒng)訪問類,調(diào)用libhdfs提供的函數(shù),完成VSIFilesystemHandler中定義的諸如文件系統(tǒng)打開、創(chuàng)建目錄等文件系統(tǒng)訪問接口;

2)在VSIFileManager中注冊(cè),即在VSIFileManager維護(hù)的映射表(map)中加入一個(gè)新的鍵值對(duì),新鍵值對(duì)的鍵為唯一標(biāo)識(shí)HDFS文件系統(tǒng)訪問句柄的字符串(string),鍵值(value)為HDFS文件系統(tǒng)訪問句柄。

GDAL文件系統(tǒng)訪問句柄繼承關(guān)系如圖2所示,

GDAL文件訪問部分結(jié)構(gòu)示意如圖3所示;

(二)本地緩存的實(shí)現(xiàn);

由于HDFS不支持隨機(jī)寫,因此已存入HFDS的文件不能直接的進(jìn)行修改。本發(fā)明的方案是,在本地建立緩存,只在本地緩存讀到或?qū)懙降膮^(qū)域,在關(guān)閉文件時(shí)先同步未讀到的區(qū)域,再寫HDFS文件。

這樣做有以下優(yōu)點(diǎn):

1)實(shí)現(xiàn)了GDAL直接修改HDFS中的影像文件;

2)在有重復(fù)讀的情況時(shí),減少了對(duì)HDFS的請(qǐng)求次數(shù),提高了文件讀取速度。

本發(fā)明對(duì)文件進(jìn)行分塊處理,每次從HDFS上按塊讀取存入本地緩存;本方案采取的是雙緩存機(jī)制,即內(nèi)存緩存和本地文件緩存協(xié)同構(gòu)成本地緩存的機(jī)制。

從讀寫速度上討論,內(nèi)存緩存速度快于本地磁盤緩存,本地磁盤緩存快于直接讀取HDFS文件,因此盡可能發(fā)揮內(nèi)存緩存的速度優(yōu)勢(shì)有利于優(yōu)化GDAL讀寫文件的速度。

本發(fā)明采用LRU策略來協(xié)調(diào)內(nèi)存緩存與本地文件緩存,使內(nèi)存緩存與本地文件緩存可以最大限度的滿足需求,具體實(shí)施步驟如下:

1)初始化內(nèi)存緩存,內(nèi)存緩存可以最多緩存N個(gè)文件塊;N≥1,是整數(shù);

2)初始化本地文件緩存,即創(chuàng)建一個(gè)本地文件;

3)在內(nèi)存緩存中維護(hù)一個(gè)LRU排序隊(duì)列,最近用過的文件塊排在LRU隊(duì)列的隊(duì)首,越久沒有用到的文件塊在隊(duì)列中排得越靠后;

4)當(dāng)內(nèi)存緩存已滿時(shí),從LRU排序隊(duì)列中進(jìn)行淘汰,將最久沒有使用過的文件塊寫入本地文件緩存,空出新的緩存載入新的文件塊。

具體地,

讀文件塊流程如圖4所示,包括:

步驟S101,判斷文件塊是否在本地緩存中,若是則進(jìn)行步驟S102,否則進(jìn)行步驟S104;

步驟S102,判斷文件塊在內(nèi)存緩存中還是在本地文件緩存中,若在本地文件緩存中進(jìn)行步驟S103,若在內(nèi)存緩存中進(jìn)行步驟S109;

步驟S103,向本地文件緩存讀取該文件塊;轉(zhuǎn)步驟S105;

步驟S104,向HDFS讀取該文件塊;

步驟S105,判斷內(nèi)存緩存是否有空的內(nèi)存緩存塊;若是轉(zhuǎn)步驟S107,若否進(jìn)行步驟S106;

步驟S106,將LRU隊(duì)列中最末尾的文件塊寫入本地文件緩存,空出一個(gè)內(nèi)存緩存塊;

步驟S107,向該空內(nèi)存緩存塊中載入讀取的文件塊數(shù)據(jù);

步驟S108,將經(jīng)過步驟S107后的該內(nèi)存緩存塊排到LRU隊(duì)列隊(duì)首;

步驟S109,返回該內(nèi)存緩存塊中的數(shù)據(jù)。

寫文件塊流程如圖5所示,包括:

步驟S201,判斷是否要寫整個(gè)文件塊;若是則進(jìn)行步驟S209,若否則進(jìn)行步驟S202;

步驟S202,進(jìn)一步判斷文件塊是否在本地緩存中,若是則進(jìn)行步驟S204,若否則進(jìn)行步驟S203;

步驟S203,向HDFS讀取該文件塊;然后轉(zhuǎn)步驟S206;

步驟S204,進(jìn)一步判斷文件塊是否在內(nèi)存緩存中,若是則進(jìn)行步驟S211,若否則進(jìn)行步驟S205;

步驟S205,向本地文件緩存讀取該文件塊;

步驟S206,判斷內(nèi)存緩存是否有空的內(nèi)存緩存塊;若是轉(zhuǎn)步驟S208,若否進(jìn)行步驟S207;

步驟S207,將LRU隊(duì)列中最末尾的文件塊寫入本地文件緩存,空出一個(gè)內(nèi)存緩存塊;

步驟S208,向該空內(nèi)存緩存塊載入讀取的文件塊數(shù)據(jù);轉(zhuǎn)步驟S211;

步驟S209,判斷內(nèi)存緩存是否有空的內(nèi)存緩存塊;若是轉(zhuǎn)步驟S211,若否進(jìn)行步驟S210;

步驟S210,將LRU隊(duì)列中最末尾的文件塊寫入本地文件緩存,空出一個(gè)內(nèi)存緩存塊;

步驟S211,向步驟S209或S210中的空內(nèi)存緩存塊寫文件塊數(shù)據(jù);

步驟S212,將經(jīng)過步驟S211后的該內(nèi)存緩存塊排到LRU隊(duì)列隊(duì)首。

向內(nèi)存緩存塊寫過程結(jié)束后,再將內(nèi)存緩存塊中的數(shù)據(jù)推入(保存進(jìn))HDFS中;

步驟S202~S208所起的作用是,當(dāng)要寫的不是一個(gè)完整的文件塊時(shí),先要把它在HDFS或本地文件緩存中找到,然后調(diào)出該文件塊,放入內(nèi)存緩存的LRU隊(duì)列的內(nèi)存緩存塊中,才可以對(duì)其進(jìn)行修改。

本發(fā)明涉及的一些術(shù)語解釋如下:

GDAL(Geospatial Data Abstraction Library)是一個(gè)在X/MIT許可協(xié)議下的開源柵格空間數(shù)據(jù)轉(zhuǎn)換庫。

HDFS:Hadoop分布式文件系統(tǒng)(HDFS)被設(shè)計(jì)成適合運(yùn)行在通用硬件(commodity hardware)上的分布式文件系統(tǒng)。

libhdfs是基于JNI的hdfs的C應(yīng)用接口,它提供了通過C接口訪問HDFS的功能。

LRU是Least Recently Used 近期最少使用算法。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
佛学| 瓦房店市| 屏东县| 边坝县| 任丘市| 新民市| 泰和县| 海城市| 杭锦后旗| 延安市| 吐鲁番市| 堆龙德庆县| 五峰| 仁寿县| 金秀| 博湖县| 安岳县| 深水埗区| 萝北县| 沽源县| 大足县| 江川县| 临湘市| 新宁县| 亳州市| 承德市| 尼玛县| 石台县| 广水市| 阿巴嘎旗| 怀集县| 瓦房店市| 陇川县| 榆树市| 寻甸| 宝坻区| 荣昌县| 合肥市| 耿马| 舒兰市| 平武县|