亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種目標(biāo)特性數(shù)據(jù)的存儲方法和系統(tǒng)與流程

文檔序號:11262020閱讀:428來源:國知局
一種目標(biāo)特性數(shù)據(jù)的存儲方法和系統(tǒng)與流程

本申請涉及數(shù)據(jù)存儲技術(shù)領(lǐng)域,尤其涉及一種目標(biāo)特性數(shù)據(jù)的存儲方法和系統(tǒng)。



背景技術(shù):

在現(xiàn)有技術(shù)中,隨著現(xiàn)代戰(zhàn)場環(huán)境日趨復(fù)雜,目標(biāo)特性數(shù)據(jù)的容量越來越大、增長速度越來越快、數(shù)據(jù)類型越來越多樣,傳統(tǒng)關(guān)系型數(shù)據(jù)庫系統(tǒng)(rdbms)由于存儲容量、性能等限制,難以滿足海量特性數(shù)據(jù)的存儲與管理。

在目標(biāo)特性領(lǐng)域主要存在兩類數(shù)據(jù):結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。結(jié)構(gòu)化數(shù)據(jù)具有一定的數(shù)據(jù)格式,可被解析并存儲到關(guān)系型數(shù)據(jù)庫(rdbms)中。非結(jié)構(gòu)化數(shù)據(jù)的格式和規(guī)模不固定,無法直接解析,如原始雷達、紅外測量數(shù)據(jù)等。在目標(biāo)特性領(lǐng)域,非結(jié)構(gòu)化數(shù)據(jù)在數(shù)據(jù)規(guī)模和容量上遠多于結(jié)構(gòu)化數(shù)據(jù)。隨著測量、仿真次數(shù)的增多,非結(jié)構(gòu)數(shù)據(jù)增長迅速。因此,如何統(tǒng)一存儲和管理這些特性文件,解決大量小文件查詢效率問題以及大文件存儲、上傳、下載效率問題,為后續(xù)分析處理提供數(shù)據(jù)支持,已成為目標(biāo)特性行業(yè)中亟需解決的難題。



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

有鑒于此,本發(fā)明提供了一種目標(biāo)特性數(shù)據(jù)的存儲方法和系統(tǒng),從而可以降低數(shù)據(jù)存儲成本,統(tǒng)一管理和維護數(shù)據(jù),保障數(shù)據(jù)安全,方便數(shù)據(jù)共享和使用。

本發(fā)明的技術(shù)方案具體是這樣實現(xiàn)的:

一種目標(biāo)特性數(shù)據(jù)的存儲方法,該方法包括:

預(yù)先設(shè)置多個用于存儲數(shù)據(jù)的數(shù)據(jù)存儲模塊以及對應(yīng)的存儲控制器;所述數(shù)據(jù)存儲模塊包括:oracle存儲模塊、hdfs存儲模塊、hbase存儲模塊和cache存儲模塊;

客戶端向分發(fā)器發(fā)送數(shù)據(jù)存儲請求,所述數(shù)據(jù)存儲請求中攜帶有數(shù)據(jù)信息,所述數(shù)據(jù)信息包括:密級信息、共享信息、用戶組信息和訪問權(quán)限信息;

分發(fā)器根據(jù)接收到的數(shù)據(jù)存儲請求以及各個存儲控制器的負載情況選擇一個存儲控制器,將數(shù)據(jù)存儲請求轉(zhuǎn)發(fā)給所選擇的存儲控制器,并將所選擇的存儲控制器通知所述客戶端;

客戶端與存儲控制器直接進行通信,存儲控制器為客戶端提供統(tǒng)一的數(shù)據(jù)讀寫接口,將客戶端上傳的數(shù)據(jù)存儲到與所述存儲控制器對應(yīng)的數(shù)據(jù)存儲模塊中。

較佳的,該方法進一步包括:

所述分發(fā)器根據(jù)預(yù)設(shè)的分發(fā)策略將同一用戶的所有請求分發(fā)給對應(yīng)的存儲控制器,每個存儲控制器均可訪問所有的數(shù)據(jù)存儲模塊;

其中,所述分發(fā)策略為:對用戶地址進行一致性哈希分配策略分配對應(yīng)的存儲控制器。

較佳的,該方法進一步包括:

通過文件共享表來為各個用戶分配所擁有的對文件的操作權(quán)限;

預(yù)先設(shè)置一個或多個用戶組,每一個用戶組對應(yīng)一組文件的操作權(quán)限,通過用戶組的方式給用戶授權(quán)。

較佳的,該方法進一步包括:

當(dāng)所需存儲的數(shù)據(jù)為結(jié)構(gòu)化數(shù)據(jù)時,所需存儲的數(shù)據(jù)被存儲到oracle存儲模塊中;

當(dāng)所需存儲的數(shù)據(jù)為非結(jié)構(gòu)化數(shù)據(jù)時,如果數(shù)據(jù)大小大于預(yù)設(shè)閾值,則所需存儲的數(shù)據(jù)被存儲到hdfs存儲模塊中;如果數(shù)據(jù)大小不大于預(yù)設(shè)閾值,則所需存儲的數(shù)據(jù)被存儲到hbase存儲模塊中。

較佳的,在將數(shù)據(jù)存儲到數(shù)據(jù)存儲模塊中之前,客戶端將所需存儲的數(shù)據(jù)分割成預(yù)設(shè)的固定大小的數(shù)據(jù)塊,并為每個數(shù)據(jù)塊設(shè)置全局唯一的標(biāo)識,再將各個數(shù)據(jù)塊分別獨立地發(fā)送給數(shù)據(jù)存儲模塊;

各個數(shù)據(jù)存儲模塊根據(jù)各個數(shù)據(jù)塊的全局唯一的標(biāo)識進行數(shù)據(jù)重傳和文件重構(gòu)操作。

較佳的,當(dāng)所述數(shù)據(jù)塊需要存儲在hdfs存儲模塊中時,對應(yīng)的存儲控制器將所述數(shù)據(jù)塊寫入到預(yù)先設(shè)置的hdfs寫入緩沖區(qū)中,再通過hdfs寫入線程從所述hdfs寫入緩沖區(qū)中讀取數(shù)據(jù)塊,并根據(jù)各個數(shù)據(jù)塊的全局唯一的標(biāo)識依次將各個數(shù)據(jù)塊寫入所述hdfs存儲模塊中;其中,所述hdfs寫入緩沖區(qū)按照生產(chǎn)者-消費者的多線程同步方式管理。

較佳的,當(dāng)所述數(shù)據(jù)塊需要存儲在hbase存儲模塊中時,對應(yīng)的存儲控制器將所述數(shù)據(jù)塊寫入到預(yù)先設(shè)置的hbase寫入緩沖區(qū)中,預(yù)先設(shè)置的寫入線程池中的多個hbase寫入線程分別從所述hbase寫入緩沖區(qū)中讀取數(shù)據(jù)塊,并根據(jù)各個數(shù)據(jù)塊的全局唯一的標(biāo)識依次將各個數(shù)據(jù)塊寫入所述hbase存儲模塊中。

較佳的,所述將所需存儲的數(shù)據(jù)分割成預(yù)設(shè)的固定大小的數(shù)據(jù)塊,并為每個數(shù)據(jù)塊設(shè)置全局唯一的標(biāo)識包括:

讀取所需存儲的數(shù)據(jù),設(shè)所需存儲的數(shù)據(jù)為文件f;

獲取所述文件f的元數(shù)據(jù)并存儲到oracle存儲模塊中,記錄文件f的文件狀態(tài)為不可用;

在hbase存儲模塊中創(chuàng)建一條記錄,所述記錄的rowkey為oracle存儲模塊中的文件f的文件id;

根據(jù)預(yù)設(shè)的固定大小,將文件f分割成若干個數(shù)據(jù)塊并為每個數(shù)據(jù)塊設(shè)置全局唯一的標(biāo)識,根據(jù)分割后的各個數(shù)據(jù)塊形成文件塊列表fc。

較佳的,所述根據(jù)各個數(shù)據(jù)塊的全局唯一的標(biāo)識依次將各個數(shù)據(jù)塊寫入所述hbase存儲模塊中包括如下步驟:

a1、初始化時間戳t=0,根據(jù)數(shù)據(jù)塊的全局唯一的標(biāo)識,逆序排列所述文件塊列表fc中的所有數(shù)據(jù)塊;

a2、對于逆序排列后的所述文件塊列表fc中的第t+1個文件塊c,將文件塊c的內(nèi)容、大小、md5值及時間戳t存儲到hbase存儲模塊中;時間戳自增:t=t+1;

a3、判斷判斷當(dāng)前的時間戳t的取值是否大于預(yù)設(shè)的時間戳閾值,如果是,則執(zhí)行步驟a4;否則,返回執(zhí)行步驟a1;

a4、將存儲在oracle存儲模塊中的文件f的文件狀態(tài)設(shè)置為可用。

較佳的,通過如下的步驟從所述hbase存儲模塊讀取所存儲的數(shù)據(jù):

從oracle存儲模塊中獲取所需讀取的數(shù)據(jù)的元數(shù)據(jù),設(shè)所需讀取的數(shù)據(jù)為文件f;

根據(jù)所述元數(shù)據(jù)中的文件f的讀取范圍,計算hbase存儲模塊中與文件f對應(yīng)的各個文件塊的時間戳區(qū)間tc;

從hbase存儲模塊中獲取時間戳區(qū)間tc對應(yīng)的文件塊;

從hbase存儲模塊中依次下載所獲取的所有文件塊,并計算文件塊的md5值,以保證數(shù)據(jù)正確下載;對未正確下載的文件塊進行重試;若重試n次仍未成功則返回錯誤;其中,n為預(yù)設(shè)的數(shù)值。

較佳的,通過如下步驟從數(shù)據(jù)存儲模塊中讀取所需的數(shù)據(jù):

b1、設(shè)所需讀取的數(shù)據(jù)為文件f,當(dāng)用戶u需要讀取文件f時,發(fā)送數(shù)據(jù)讀取請求以請求執(zhí)行數(shù)據(jù)讀取操作fp;所述數(shù)據(jù)讀取請求中攜帶有用戶信息,所述用戶信息包括:用戶組信息和訪問權(quán)限信息;

b2、根據(jù)所述用戶信息判斷該用戶u是否為文件f的所有者;如果是,執(zhí)行fp并結(jié)束流程;否則,執(zhí)行步驟b3;

b3、根據(jù)所述用戶信息判斷該用戶u是否滿足文件f的密級要求;如果是,執(zhí)行步驟b4;否則,向用戶返回用戶密級不匹配的錯誤提示信息并結(jié)束流程;

b4、判斷所述文件f是否共享;如果是,執(zhí)行步驟b5;否則,向用戶返回?zé)o法訪問私有文件的錯誤提示信息并結(jié)束流程;

b5、判斷所述文件f的默認權(quán)限是否滿足fp要求;如果是,執(zhí)行fp并結(jié)束流程;否則,執(zhí)行步驟b6;

b6、根據(jù)所述用戶信息獲取所述用戶u所屬的用戶組以及對應(yīng)的文件共享權(quán)限集合;

b7、判斷文件共享權(quán)限集合中是否存在對文件f執(zhí)行fp的權(quán)限;如果是,執(zhí)行fp;否則,向用戶返回?zé)o操作權(quán)限的錯誤提示信息。

較佳的,該方法進一步包括:

多個客戶端同時通過客戶端讀取線程對存儲控制器發(fā)送數(shù)據(jù)讀取請求,遠程調(diào)用存儲控制器中的存儲控制線程池中的各個存儲控制線程,對hdfs存儲模塊和hbase存儲模塊中所存儲的對應(yīng)的數(shù)據(jù)塊進行并行讀取,實現(xiàn)多線程數(shù)據(jù)下載。

如上可見,在本發(fā)明的技術(shù)方案中,提出了一種基于oracle和hadoop的目標(biāo)特性數(shù)據(jù)存儲方法和系統(tǒng),從而可以利用hadoop的分布式處理和存儲能力,彌補oracle在海量數(shù)據(jù)存儲的不足,降低數(shù)據(jù)存儲成本,統(tǒng)一管理和維護數(shù)據(jù),保障數(shù)據(jù)安全,解決數(shù)據(jù)孤島和單點故障問題,方便數(shù)據(jù)共享和使用,為后續(xù)目標(biāo)特性數(shù)據(jù)處理、挖掘和應(yīng)用研究等提供數(shù)據(jù)和存儲支持。

附圖說明

圖1為本發(fā)明實施例中的目標(biāo)特性數(shù)據(jù)的存儲方法的流程圖。

圖2為本發(fā)明實施例中的訪問控制模型e-r圖。

圖3為本發(fā)明實施例中的多線程數(shù)據(jù)上傳邏輯流程示意圖。

圖4為本發(fā)明實施例中的將數(shù)據(jù)存儲到hbase存儲模塊的邏輯流程示意圖。

圖5為本發(fā)明實施例中的從hbase存儲模塊中讀取數(shù)據(jù)的邏輯流程示意圖。

圖6為本發(fā)明實施例中從數(shù)據(jù)存儲模塊中讀取所需的數(shù)據(jù)的流程示意圖。

圖7為本發(fā)明實施例中的多線程數(shù)據(jù)下載邏輯流程示意圖。

圖8為本發(fā)明實施例中的目標(biāo)特性數(shù)據(jù)存儲系統(tǒng)的結(jié)構(gòu)示意圖。

圖9為本發(fā)明實施例中的目標(biāo)特性數(shù)據(jù)存儲系統(tǒng)的實際部署示意圖。

具體實施方式

為使本發(fā)明的技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及具體實施例,對本發(fā)明作進一步詳細的說明。

圖1為本發(fā)明實施例中的目標(biāo)特性數(shù)據(jù)的存儲方法的流程圖。如圖1所示,本發(fā)明實施例中的目標(biāo)特性數(shù)據(jù)的存儲方法包括如下所述步驟:

步驟101,預(yù)先設(shè)置多個用于存儲數(shù)據(jù)的數(shù)據(jù)存儲模塊以及對應(yīng)的存儲控制器;所述數(shù)據(jù)存儲模塊包括:oracle存儲模塊、hdfs存儲模塊、hbase存儲模塊和cache存儲模塊。

在現(xiàn)有技術(shù)中,oracle數(shù)據(jù)庫是一種已經(jīng)廣泛應(yīng)用到各個領(lǐng)域的通用數(shù)據(jù)庫,可以提供相應(yīng)的數(shù)據(jù)管理功能。因此,在本發(fā)明的技術(shù)方案中,oracle存儲模塊可以使用oracle數(shù)據(jù)庫的方式來存儲相應(yīng)的數(shù)據(jù)。但是,oracle數(shù)據(jù)庫由于存儲容量、性能等限制,在海量特性數(shù)據(jù)存儲方面還存在一定的不足之處,而且數(shù)據(jù)存儲成本較高。因此,如圖8所示,在本發(fā)明的技術(shù)方案中,除了oracle存儲模塊之外,還可以使用hdfs存儲模塊、hbase存儲模塊和cache存儲模塊來存儲數(shù)據(jù),為系統(tǒng)提供底層存儲服務(wù),從而可以利用hadoop的分布式處理和存儲能力,彌補oracle在海量數(shù)據(jù)存儲的不足,降低數(shù)據(jù)存儲成本,統(tǒng)一管理和維護數(shù)據(jù),保障數(shù)據(jù)安全,解決數(shù)據(jù)孤島和單點故障問題,方便數(shù)據(jù)共享和使用,為后續(xù)目標(biāo)特性數(shù)據(jù)處理、挖掘和應(yīng)用研究等提供數(shù)據(jù)和存儲支持。

其中,現(xiàn)有技術(shù)中的hadoop是一個由apache基金會所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu),其具體的實現(xiàn)可以是一個hadoop分布式文件系統(tǒng)(hdfs,hadoopdistributedfilesystem)。hdfs具有高容錯性的特點,并且設(shè)計用來部署在低廉的硬件上;而且還可以提供高吞吐量來訪問應(yīng)用程序的數(shù)據(jù)。

另外,hbase是apache的hadoop項目的子項目,是一個分布式的、面向列的開源數(shù)據(jù)庫,適合于非結(jié)構(gòu)化數(shù)據(jù)存儲的數(shù)據(jù)庫。hadoop和hbase可運行在廉價的計算機上,為系統(tǒng)提供安全、快速、可擴展的數(shù)據(jù)存儲集群服務(wù),有效降低數(shù)據(jù)存儲成本。

此外,在本發(fā)明的技術(shù)方案中,當(dāng)設(shè)置了多個數(shù)據(jù)存儲模塊之后,分發(fā)器可以根據(jù)預(yù)設(shè)的分發(fā)策略將同一用戶的所有請求分發(fā)給對應(yīng)的存儲控制器,每個存儲控制器均可訪問所有的數(shù)據(jù)存儲模塊。

另外,較佳的,在本發(fā)明的具體實施例中,所述分發(fā)策略可以包括:輪訓(xùn)、隨機分配或一致性哈希分配等分發(fā)策略。

在本發(fā)明的一個較佳實施例中,采用對用戶地址進行一致性哈希分配策略分配對應(yīng)的存儲控制器,實現(xiàn)系統(tǒng)的負載均衡。

由于在本發(fā)明的技術(shù)方案中設(shè)置了多個數(shù)據(jù)存儲模塊和多個存儲控制器,因此還可以有效地防止由于單點故障導(dǎo)致整個系統(tǒng)癱瘓的問題,還可以有效地提高系統(tǒng)吞吐率。

步驟102,客戶端向分發(fā)器發(fā)送數(shù)據(jù)存儲請求,所述數(shù)據(jù)存儲請求中攜帶有數(shù)據(jù)信息,所述數(shù)據(jù)信息包括:密級信息、共享信息、用戶組信息和訪問權(quán)限信息。

在目標(biāo)特性數(shù)據(jù)領(lǐng)域,由于行業(yè)的保密性質(zhì),特定文件只能在特定范圍內(nèi)使用。為了在保密的前提下更大范圍地滿足文件共享的需要,且現(xiàn)有技術(shù)中的hadoop的權(quán)限機制不能滿足該要求,因此在本發(fā)明的技術(shù)方案中,對文件系統(tǒng)權(quán)限進行了重新設(shè)計。例如,可以預(yù)先對所需存儲的數(shù)據(jù)或文件設(shè)立密級屬性(即密級信息),并預(yù)先對訪問數(shù)據(jù)或文件的用戶也建立的相應(yīng)的崗位密級。所以,在本發(fā)明的技術(shù)方案中,對于特定的數(shù)據(jù)或文件,只有滿足相應(yīng)的密級要求的用戶才有訪問該數(shù)據(jù)或文件的權(quán)限。因此,用戶在上傳數(shù)據(jù)或文件進行存儲的同時,需要表明該數(shù)據(jù)或文件的密級以及是否可以共享(即共享信息),從而確保只有特定范圍的人員才能訪問該數(shù)據(jù)或文件。

因此,為了更好地挖掘目標(biāo)特性數(shù)據(jù)的價值,在本發(fā)明的技術(shù)方案中設(shè)計了文件共享功能。數(shù)據(jù)或文件的所有者在通過客戶端向分發(fā)器發(fā)送數(shù)據(jù)存儲請求之前,可以預(yù)先根據(jù)所需存儲的數(shù)據(jù)或文件的情況創(chuàng)建或選擇特定的用戶組(即用戶組信息),同時設(shè)定對應(yīng)的訪問權(quán)限(即訪問權(quán)限信息)。例如,只有屬于特定的用戶組的用戶才具有該文件的訪問權(quán)限。

所以,在本步驟中,用戶在通過客戶端向分發(fā)器發(fā)送數(shù)據(jù)存儲請求時,將在該數(shù)據(jù)存儲請求中攜帶與所需存儲的數(shù)據(jù)相關(guān)的數(shù)據(jù)信息,該數(shù)據(jù)信息可以包括:密級信息、共享信息、用戶組信息和訪問權(quán)限信息等信息。

另外,在本發(fā)明的技術(shù)方案中,還可以為不同的用戶設(shè)置不同的訪問權(quán)限。例如,較佳的,在本發(fā)明的一個具體實施例中,所述訪問權(quán)限信息中的訪問權(quán)限可以包括:讀權(quán)限(r)、寫權(quán)限(w)、執(zhí)行權(quán)限(x)和無權(quán)限(0)等。

另外,較佳的,在本發(fā)明的一個具體實施例中,可以對所需存儲的數(shù)據(jù)或文件的權(quán)限以及具有相應(yīng)權(quán)限的用戶組預(yù)先進行設(shè)計。例如,圖2為本發(fā)明實施例中的訪問控制模型e-r圖,如圖2所示,在本發(fā)明的技術(shù)方案中,可以借鑒基于角色的訪問控制技術(shù),通過文件共享表來為各個用戶分配所擁有的對文件的操作權(quán)限。為方便管理和維護,可以預(yù)先設(shè)置一個或多個用戶組,每一個用戶組對應(yīng)一組文件的操作權(quán)限,通過用戶組的方式給用戶授權(quán)。

例如,如圖2所示,“用戶文件表”與“用戶表”之間存在一對多關(guān)系,“用戶表”和“用戶組”之間通過“用戶所屬組”組成多對多關(guān)系,“用戶組”和“用戶文件表”之間也屬于多對多關(guān)系。其中,用戶表中記錄了用戶的用戶名、密碼、用戶狀態(tài)、崗位密級等信息;用戶文件表定義了存儲文件的文件名、保存路徑、所有者、密級、文件類型、文件大小、文件狀態(tài)、創(chuàng)建時間、修改時間、是否共享、默認權(quán)限、備注等信息。用戶所屬組表中記錄了用戶id和項目組id等信息。用戶組表中記錄了組名稱和備注等信息。文件共享表中記錄了文件id、用戶組id和訪問權(quán)限等信息。其中,文件名及文件類型由文件所有者定義,其保存路徑對應(yīng)該文件在系統(tǒng)中的存儲位置,當(dāng)文件(即所需存儲的數(shù)據(jù))大小超過閾值時,該文件被保存到hdfs上,保存路徑對應(yīng)hdfs中的文件路徑;當(dāng)文件大小不超過閾值時,則被存儲到hbase中,保存路徑則對應(yīng)hbase中的一條記錄。文件狀態(tài)標(biāo)記該文件是否可用,一個文件被刪除時會被標(biāo)記為不可用,待系統(tǒng)執(zhí)行清理任務(wù)才被真正刪除;系統(tǒng)定期執(zhí)行刪除任務(wù),在執(zhí)行刪除任務(wù)前,仍可恢復(fù)該文件,防止數(shù)據(jù)誤刪。當(dāng)文件所有者上傳文件時,可設(shè)置該文件是否可以被共享以及其他用戶的默認權(quán)限等,如文件f可被共享且默認權(quán)限為只讀時,若用戶u的崗位密級不低于文件f的密級時,用戶u默認具有文件f的只讀權(quán)限。通過設(shè)置文件的默認權(quán)限,可減少文件共享表存儲的記錄數(shù)。

步驟103,分發(fā)器根據(jù)接收到的數(shù)據(jù)存儲請求以及各個存儲控制器的負載情況選擇一個存儲控制器,將數(shù)據(jù)存儲請求轉(zhuǎn)發(fā)給所選擇的存儲控制器,并將所選擇的存儲控制器通知所述客戶端。

由于在本發(fā)明的技術(shù)方案中,預(yù)先設(shè)置了多個數(shù)據(jù)存儲模塊和存儲控制器,因此,分發(fā)器在收到客戶端發(fā)送的數(shù)據(jù)存儲請求之后,將根據(jù)各個存儲控制器的負載情況為該客戶端選擇一個存儲控制器,然后將數(shù)據(jù)存儲請求轉(zhuǎn)發(fā)給所選擇的存儲控制器,并將所選擇的存儲控制器通知所述客戶端。

步驟104,客戶端與存儲控制器直接進行通信,存儲控制器為客戶端提供統(tǒng)一的數(shù)據(jù)讀寫接口,將客戶端上傳的數(shù)據(jù)存儲到與所述存儲控制器對應(yīng)的數(shù)據(jù)存儲模塊中。

其中,當(dāng)所需存儲的數(shù)據(jù)為結(jié)構(gòu)化數(shù)據(jù)時,所需存儲的數(shù)據(jù)被存儲到系型數(shù)據(jù)庫(即oracle存儲模塊)中;

而當(dāng)所需存儲的數(shù)據(jù)為非結(jié)構(gòu)化數(shù)據(jù)時,數(shù)據(jù)大小大于預(yù)設(shè)閾值的數(shù)據(jù)被存儲到hdfs存儲模塊中,數(shù)據(jù)大小不大于預(yù)設(shè)閾值的數(shù)據(jù)被存儲到hbase存儲模塊中。

另外,在本發(fā)明的技術(shù)方案中,為提高數(shù)據(jù)傳輸效率,在將數(shù)據(jù)存儲到數(shù)據(jù)存儲模塊中之前,客戶端將所需存儲的數(shù)據(jù)或文件分割成預(yù)設(shè)的固定大小的數(shù)據(jù)塊,并為每個數(shù)據(jù)塊設(shè)置全局唯一的標(biāo)識(例如,文件唯一編號+文件塊下標(biāo)等),然后再將各個數(shù)據(jù)塊分別獨立地發(fā)送給數(shù)據(jù)存儲模塊,數(shù)據(jù)存儲模塊可以根據(jù)各個數(shù)據(jù)塊的標(biāo)識進行數(shù)據(jù)重傳和文件重構(gòu)等操作。

此外,在本發(fā)明的技術(shù)方案中,為提高數(shù)據(jù)傳輸效率,還可以使用多線程的數(shù)據(jù)上傳方法來存儲數(shù)據(jù)。

例如,圖3為本發(fā)明實施例中的多線程數(shù)據(jù)上傳邏輯流程示意圖,如圖3所示,由于hdfs存儲模塊在寫入數(shù)據(jù)時,只支持單線程方式,因此,較佳的,在本發(fā)明的一個具體實施例中,當(dāng)所述數(shù)據(jù)塊需要存儲在hdfs存儲模塊中時,對應(yīng)的存儲控制器將所述數(shù)據(jù)塊寫入到預(yù)先設(shè)置的hdfs寫入緩沖區(qū)中,然后再通過hdfs寫入線程從所述hdfs寫入緩沖區(qū)中讀取數(shù)據(jù)塊,并根據(jù)各個數(shù)據(jù)塊的標(biāo)識依次將各個數(shù)據(jù)塊寫入所述hdfs存儲模塊中。

其中,所述hdfs寫入緩沖區(qū)可以按照生產(chǎn)者-消費者的多線程同步方式管理。

再例如,較佳的,在本發(fā)明的一個具體實施例中,當(dāng)所述數(shù)據(jù)塊需要存儲在hbase存儲模塊中時,對應(yīng)的存儲控制器將所述數(shù)據(jù)塊寫入到預(yù)先設(shè)置的hbase寫入緩沖區(qū)中,然后,預(yù)先設(shè)置的寫入線程池中的多個hbase寫入線程分別從所述hbase寫入緩沖區(qū)中讀取數(shù)據(jù)塊,并根據(jù)各個數(shù)據(jù)塊的標(biāo)識依次將各個數(shù)據(jù)塊寫入所述hbase存儲模塊中。

另外,在本發(fā)明的技術(shù)方案中,由于在hbase中,列簇是數(shù)據(jù)存儲和訪問控制的基本單元,同一列簇的列通常具有相同的類型。因此,為了充分利用hbase存儲模塊的存儲特性,提高存儲效率,在本發(fā)明的一個具體實施例中可以預(yù)先設(shè)置如表1所示的存儲模型:

表1

因此,可以根據(jù)上述表1中所示的存儲模型進行數(shù)據(jù)的存儲。

例如,較佳的,在本發(fā)明的一個具體實施例中,在將數(shù)據(jù)存儲到hbase存儲模塊中之前,可以根據(jù)預(yù)設(shè)的固定大小,將所需存儲的數(shù)據(jù)(例如,一個文件)分割成若干個數(shù)據(jù)塊(chunk),存儲到列簇content的chunk列中,每個文件可以對應(yīng)hbase數(shù)據(jù)庫中的一行,以oracle中的文件id作為行鍵(rowkey)進行索引。同時,記錄各個數(shù)據(jù)塊的大小和md5值,存儲在metainfo列簇中的大小(size)和md5列中,以方便數(shù)據(jù)塊的讀取和校驗。

例如,圖4為本發(fā)明實施例中的將數(shù)據(jù)存儲到hbase存儲模塊的邏輯流程示意圖,如圖4所示,較佳的,在本發(fā)明的一個具體實施例中,當(dāng)所需存儲的數(shù)據(jù)需要存儲在hbase存儲模塊中時,所述將所需存儲的數(shù)據(jù)分割成若干個數(shù)據(jù)塊可以包括如下的步驟:

步驟401,讀取所需存儲的文件f(即所需存儲的數(shù)據(jù))。

步驟402,獲取所述文件f的元數(shù)據(jù)并存儲到oracle存儲模塊中,記錄文件f的文件狀態(tài)為不可用。

步驟403,在hbase存儲模塊中創(chuàng)建一條記錄,該記錄的rowkey為oracle存儲模塊中的文件f的文件id。

步驟404,根據(jù)預(yù)設(shè)的固定大小(即chunksize),將文件f分割成若干個數(shù)據(jù)塊并為每個數(shù)據(jù)塊設(shè)置全局唯一的標(biāo)識(例如,文件唯一編號+文件塊下標(biāo)等),根據(jù)分割后的各個數(shù)據(jù)塊形成文件塊列表(fc)。

在將文件f分割成若干個數(shù)據(jù)塊之后,即可對各個數(shù)據(jù)塊進行存儲。

例如,較佳的,在本發(fā)明的一個具體實施例中,所述根據(jù)各個數(shù)據(jù)塊的標(biāo)識依次將各個數(shù)據(jù)塊寫入所述hbase存儲模塊中可以包括如下步驟:

步驟405,初始化時間戳t=0,根據(jù)數(shù)據(jù)塊的全局唯一的標(biāo)識,逆序排列所述文件塊列表fc中的所有數(shù)據(jù)塊。

步驟406,對于逆序排列后的所述文件塊列表fc中的第t+1個文件塊c,將文件塊c的內(nèi)容、大小、md5值及時間戳t存儲到hbase存儲模塊中;時間戳自增:t=t+1;從而可以保證在后續(xù)過程中從hbase存儲模塊中讀取數(shù)據(jù)時,所獲得的文件塊列表是根據(jù)數(shù)據(jù)塊的全局唯一的標(biāo)識正序排列的;

步驟407,判斷所述文件塊列表fc是否遍歷完成(即判斷當(dāng)前的時間戳t的取值是否大于預(yù)設(shè)的時間戳閾值),如果是,則執(zhí)行步驟408;否則,返回執(zhí)行步驟405;

步驟408,將存儲在oracle存儲模塊中的文件f的文件狀態(tài)設(shè)置為可用。

通過上述的步驟401~408,即可將所需存儲的數(shù)據(jù)存儲到hbase存儲模塊中。

更進一步的,在本發(fā)明的一個具體實施例中,圖5為本發(fā)明實施例中的從hbase存儲模塊中讀取數(shù)據(jù)的邏輯流程示意圖,如圖5所示,當(dāng)需要從所述hbase存儲模塊讀取上述所存儲的數(shù)據(jù)時,可以通過如下的步驟實現(xiàn):

步驟501,從oracle存儲模塊中獲取所需讀取的文件f(即所需讀取的數(shù)據(jù))的元數(shù)據(jù)。

步驟502,根據(jù)所述元數(shù)據(jù)中的文件f的讀取范圍,計算hbase存儲模塊中與文件f對應(yīng)的各個文件塊的時間戳區(qū)間tc。

步驟503,從hbase存儲模塊中獲取時間戳區(qū)間tc對應(yīng)的文件塊chunk。

步驟504,從hbase存儲模塊中依次下載所獲取的所有文件塊,并計算文件塊的md5值,以保證數(shù)據(jù)正確下載;對未正確下載的文件塊進行重試;若重試n次仍未成功則返回錯誤;其中,n為預(yù)設(shè)的數(shù)值,例如,n=3。

通過上述的步驟501~504,即可從所述hbase存儲模塊讀取上述所存儲的數(shù)據(jù)。

另外,在本發(fā)明的技術(shù)方案中,可以根據(jù)用戶的要求,從各個數(shù)據(jù)存儲模塊中讀取所需的數(shù)據(jù)。

例如,圖6為本發(fā)明實施例中從數(shù)據(jù)存儲模塊中讀取所需的數(shù)據(jù)的流程示意圖,如圖6所示,較佳的,在本發(fā)明的一個具體實施例中,可以通過如下步驟從數(shù)據(jù)存儲模塊中讀取所需的數(shù)據(jù):

步驟601,當(dāng)用戶u需要讀取文件f(即所需讀取的數(shù)據(jù))時,發(fā)送數(shù)據(jù)讀取請求以請求執(zhí)行數(shù)據(jù)讀取操作(fp);所述數(shù)據(jù)讀取請求中攜帶有用戶信息,所述用戶信息包括:用戶組信息和訪問權(quán)限信息。

步驟602,根據(jù)所述用戶信息判斷該用戶u是否為文件f的所有者;如果是,執(zhí)行fp并結(jié)束流程;否則,執(zhí)行步驟603;

步驟603,根據(jù)所述用戶信息判斷該用戶u是否滿足文件f的密級要求;如果是,執(zhí)行步驟604;否則,向用戶返回用戶密級不匹配的錯誤提示信息并結(jié)束流程;

步驟604,判斷所述文件f是否共享;如果是,執(zhí)行步驟605;否則,向用戶返回?zé)o法訪問私有文件的錯誤提示信息并結(jié)束流程;

步驟605,判斷所述文件f的默認權(quán)限是否滿足fp要求;如果是,執(zhí)行fp并結(jié)束流程;否則,執(zhí)行步驟606;

步驟606,根據(jù)所述用戶信息獲取所述用戶u所屬的用戶組(ug)以及對應(yīng)的文件共享權(quán)限集合(pg);

步驟607,判斷pg中是否存在對文件f執(zhí)行fp的權(quán)限;如果是,執(zhí)行fp;否則,向用戶返回?zé)o操作權(quán)限的錯誤提示信息。

通過上述的步驟601~607,即可從數(shù)據(jù)存儲模塊中讀取所需的數(shù)據(jù)。

另外,由于在本發(fā)明的技術(shù)方案中,hdfs存儲模塊和hbase存儲模塊都可以支持多線程并發(fā)讀取,因此,本發(fā)明中可以對所需讀取的數(shù)據(jù)進行多線程下載。

例如,圖7為本發(fā)明實施例中的多線程數(shù)據(jù)下載邏輯流程示意圖,如圖7所示,較佳的,在本發(fā)明的一個具體實施例中,多個客戶端可以同時通過客戶端讀取線程對存儲控制器發(fā)送數(shù)據(jù)讀取請求,遠程調(diào)用存儲控制器中的存儲控制線程池中的各個存儲控制線程,對hdfs存儲模塊和hbase存儲模塊中所存儲的對應(yīng)的數(shù)據(jù)塊進行并行讀取,從而實現(xiàn)多線程數(shù)據(jù)下載。

此外,在數(shù)據(jù)或文件的下載過程中,還可以將經(jīng)常訪問的文件元數(shù)據(jù)和文件塊進行緩存,從而可以有效地減少磁盤i/o,提高系統(tǒng)響應(yīng)速度。

圖9為本發(fā)明實施例中的目標(biāo)特性數(shù)據(jù)存儲系統(tǒng)的實際部署示意圖,如圖9所示,在本發(fā)明的一個較佳的具體實施例中,oracle存儲模塊、hdfs存儲模塊和hbase存儲模塊可以分別采用oracle11g、hadoop2.6和hbase1.1作為數(shù)據(jù)持久化存儲模塊,然后采用內(nèi)存數(shù)據(jù)庫redis作為全局緩存,使用thrift進行遠程調(diào)用。hadoop/hbase集群對應(yīng)一個主節(jié)點和多個子節(jié)點,主節(jié)點部署hdfs的名稱節(jié)點(namenode)(用于存儲hdfs的元數(shù)據(jù))和hbase的hmaster(用于存儲hbase的元數(shù)據(jù));子節(jié)點部署hdfs的數(shù)據(jù)節(jié)點(datanode)(用于存儲hdfs中的數(shù)據(jù))和hbase的hregionserver(用于存儲hbase中的數(shù)據(jù))。存儲控制器、分發(fā)器和客戶端可以分別部署在10臺個人計算機(例如,dell7010)上,通過千兆以太網(wǎng)連接。其中,存儲控制器及hadoop集群(即hdfs存儲模塊和hbase存儲模塊)可根據(jù)實際具體應(yīng)用情況的需要增加節(jié)點;thrift是跨平臺和支持多語言的遠程調(diào)用框架,可方便數(shù)據(jù)處理程序調(diào)用。

綜上所述,在本發(fā)明的技術(shù)方案中,提出了一種基于oracle和hadoop的目標(biāo)特性數(shù)據(jù)存儲方法和系統(tǒng),從而可以利用hadoop的分布式處理和存儲能力,彌補oracle在海量數(shù)據(jù)存儲的不足,降低數(shù)據(jù)存儲成本,統(tǒng)一管理和維護數(shù)據(jù),保障數(shù)據(jù)安全,解決數(shù)據(jù)孤島和單點故障問題,方便數(shù)據(jù)共享和使用,為后續(xù)目標(biāo)特性數(shù)據(jù)處理、挖掘和應(yīng)用研究等提供數(shù)據(jù)和存儲支持。

以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明保護的范圍之內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1