1.一種遙感影像云存儲方法,其特征在于,包括下述步驟:
步驟S1,拓展GDAL文件訪問接口,使GDAL能夠讀寫HDFS上的影像;
步驟S2,提供一套本地緩存機制,即建立本地緩存,用于實現(xiàn)GDAL需要隨機寫的需要。
2.如權(quán)利要求1所述的遙感影像云存儲方法,其特征在于,
步驟S1具體包括:
1)實現(xiàn)繼承自VSIFilesystemHandler用以訪問HDFS的文件系統(tǒng)訪問類,調(diào)用libhdfs提供的函數(shù),完成VSIFilesystemHandler中定義的文件系統(tǒng)訪問接口;
2)在VSIFileManager中注冊,即在VSIFileManager維護的映射表中加入一個新的鍵值對,新鍵值對的鍵為唯一標識HDFS文件系統(tǒng)訪問句柄的字符串,鍵值為HDFS文件系統(tǒng)訪問句柄。
3.如權(quán)利要求1所述的遙感影像云存儲方法,其特征在于,
步驟S2具體包括:
對文件進行分塊處理,每次從HDFS上按塊讀取存入本地緩存;所述本地緩存包括內(nèi)存緩存和本地文件緩存;
采用LRU策略來協(xié)調(diào)內(nèi)存緩存與本地文件緩存:
1)初始化內(nèi)存緩存,內(nèi)存緩存最多緩存N個文件塊;
2)初始化本地文件緩存,即創(chuàng)建一個本地文件;
3)在內(nèi)存緩存中維護一個LRU排序隊列,最近用過的文件塊排在LRU隊列的隊首,越久沒有用到的文件塊在隊列中排得越靠后;
4)當內(nèi)存緩存已滿時,從LRU排序隊列中進行淘汰,將最久沒有使用過的文件塊寫入本地文件緩存,空出新的緩存載入新的文件塊。
4.如權(quán)利要求1、2或3所述的遙感影像云存儲方法,其特征在于,
本地緩存機制的讀文件塊過程,包括以下步驟:
步驟S101,判斷文件塊是否在本地緩存中,若是則進行步驟S102,否則進行步驟S104;
步驟S102,判斷文件塊在內(nèi)存緩存中還是在本地文件緩存中,若在本地文件緩存中進行步驟S103,若在內(nèi)存緩存中進行步驟S109;
步驟S103,向本地文件緩存讀取該文件塊;轉(zhuǎn)步驟S105;
步驟S104,向HDFS讀取該文件塊;
步驟S105,判斷內(nèi)存緩存是否有空的內(nèi)存緩存塊;若是轉(zhuǎn)步驟S107,若否進行步驟S106;
步驟S106,將LRU隊列中最末尾的文件塊寫入本地文件緩存,空出一個內(nèi)存緩存塊;
步驟S107,向該空內(nèi)存緩存塊中載入讀取的文件塊數(shù)據(jù);
步驟S108,將經(jīng)過步驟S107后的該內(nèi)存緩存塊排到LRU隊列隊首;
步驟S109,返回該內(nèi)存緩存塊中的數(shù)據(jù)。
5.如權(quán)利要求1、2或3所述的遙感影像云存儲方法,其特征在于,
本地緩存機制的寫文件塊過程,包括以下步驟:
步驟S201,判斷是否要寫整個文件塊;若是則進行步驟S209,若否則進行步驟S202;
步驟S202,進一步判斷文件塊是否在本地緩存中,若是則進行步驟S204,若否則進行步驟S203;
步驟S203,向HDFS讀取該文件塊;
步驟S204,進一步判斷文件塊是否在內(nèi)存緩存中,若是則進行步驟S211,若否則進行步驟S205;
步驟S205,向本地文件緩存讀取該文件塊;
步驟S206,判斷內(nèi)存緩存是否有空的內(nèi)存緩存塊;若是轉(zhuǎn)步驟S208,若否進行步驟S207;
步驟S207,將LRU隊列中最末尾的文件塊寫入本地文件緩存,空出一個內(nèi)存緩存塊;
步驟S208,向該空內(nèi)存緩存塊載入讀取的文件塊數(shù)據(jù);轉(zhuǎn)步驟S211;
步驟S209,判斷內(nèi)存緩存是否有空的內(nèi)存緩存塊;若是轉(zhuǎn)步驟S211,若否進行步驟S210;
步驟S210,將LRU隊列中最末尾的文件塊寫入本地文件緩存,空出一個內(nèi)存緩存塊;
步驟S211,向步驟S209或S210中的空內(nèi)存緩存塊寫文件塊數(shù)據(jù);
步驟S212,將經(jīng)過步驟S211后的該內(nèi)存緩存塊排到LRU隊列隊首。